Hola
Enigma te paso a contestar tus dudas:
1) guarda(Tabla_Display (tecla=1)); // Tecla 1; Mando el 1 al display
Sabes que está variable tecla me guarda el valor para irlo a buscar a la tabla no??? ahora, en la función de la tabla, dicha variable está declarada así:
int Tabla_Display(int _Tecla)
Umm ellas no deberian ser iguales????
"tecla" es el nombre de la variable donde guardas el valor de la última tecla pulsada y "_Tecla" es el nombre del parámetro que se le pasa a la función, estos nombre pueden ser iguales o distintos, eso es indiferente. Fíjate que si queremos llamar a la función con distintas variables, si los nombres tuvieran que ser iguales no se podría hacer. Por ejemplo:
tecla1 = Lee_teclado();
tecla2 = Lee_teclado();
Display1 = Tabla_Display(tecla1);
Display2 = Tabla_Display(tecla2);
2) while((input_b()&0b11110000)!=0b11110000); // Espera a que se suelte la tecla.
Me puedes explicar que me está diciendo o preguntando está instrucción?? y disculpa mi ignorancia??? (pero toy nuevita en C, aún jejeje )
En esta instrucción hacemos lo siguiente:
1º) Leemos el puerto "B": input_b()
2º) Hacemos un AND con el valor binario 11110000, esto hace que los 4 bits menos significativos siempre valgan cero (un and con un cero siempre da 0) y los 4 bist mas significativos depende de los valores del puerto "B".
3º) Verificamos si es distinto al valor binario 11110000. Ya sabemos que los cuatro ceros siempre estarán ahí, pero los 1 solo aparecerán cuando soltemos todas las teclas. Por consiguiente si es distinto a 11110000 hay alguna tecla pulsada y hay que esperar. Si el valor es distinto lo cerramos en un bucle while sin instrucciones esperando que se suelte.
3) No es necesario abrir las llaves despues de un If, lo pregunto porque en la rutina que me prestaste no las abres.... pense que era necesario abrirlas....
if(input(pin_B6)==0) //RB6 está en 0? (Ascii =4)
{
delay_ms(20); // verifica sino es rebote
if(input(pin_B6)==0) // verifico otra vez si RB5 está en 0 (Ascii =4)
boton=4;
guarda(Tabla_Display(tecla=4)); // Tecla 4; Mando el 4 al display }
En esto me has pillado por lo menos parcialmente. Efectivamente en este caso hay que poner llaves para que afecte a todas las instrucciones de tal forma que quedaría como:
if(input(pin_B6)==0) //RB6 está en 0? (Ascii =4)
{
delay_ms(20); // verifica sino es rebote
if(input(pin_B6)==0) // verifico otra vez si RB5 está en 0 (Ascii =4)
{
boton=4;
guarda(Tabla_Display(tecla=4)); // Tecla 4; Mando el 4 al display[/color] }
}
Pero no es necesario poner siempre la llaves. Estas se ponen si hay que controlar más de una instrucción. Si solo hay una instrucción no hace falta. Por ejemplo:
if(input(pin_B6)==0)
guarda(Tabla_Display(tecla=4));
boton=4;
El "if" solo afecta a: guarda(Tabla_Display(tecla=4)); y boton=4; siempre se ejecuta.
Pero con:
if(input(pin_B6)==0)
{
guarda(Tabla_Display(tecla=4));
boton=4;
}
el "if" afecta a las dos instruccines.
De echo es muy habitual cuando solo hay una instrucción poner:
if(input(pin_B6)==0) guarda(Tabla_Display(tecla=4));
Se pone en la misma línea el "if" y la instrucción.
Un saludo