TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: jdaniels en 09 de Julio de 2007, 23:19:06
-
Saludos he implementado esta rutina que puso el compañero pocher en este Tema (http://www.todopic.com.ar/foros/index.php?topic=4807.msg36881#msg36881) de redpic al final puden ver la rutina del teclado por interrupción, la cosa es que la rutina trabaja bien pero no del todo:
#INT_RB
void TECLADO_INTERRUPT()
{
delay_ms(50);
if(!RB4 || !RB5 || !RB6 || !RB7)
{
k= kbd_getc();
RB0=RB1=RB2=RB3=0;
}
}
asi como esta trabaja bien pero yo queria que dentro de la interrupcion me pusiera en el lcd la tecla presionada con un lcd_putc(k) asi de esta manera:
#INT_RB
TECLADO_INTERRUPT()
{
delay_ms(50);
if(!RB4 || !RB5 || !RB6 || !RB7)
{
k= kbd_getc();
lcd_putc(k);
RB0=RB1=RB2=RB3=0;
}
}
la cosa es que no trabaja, si no después de presionar 24 veces cualquier tecla es decir a la 25 escribe la tecla que se presiono siempre es constante a la 25, escribí el comando putc(k) para ver si entraba en la interrupcion y efectivo lo hace entra manda la tecla por rs232 pero no la escribe en el lcd alguien le ha pasado lo mismo? en el tema pocher decia que no lo habia probado en fisico solo en proteus, no es nada que tenga en void main ya que solo inicio el lcd y habilito la interrupcion, pongo las pullups y esa cosas
-
Hola,la libreria incorporada KBD.C es una cagada a mi tampoco me funciona no me dio la gana estudiarla asi ke me hice una funcion para escanear un teclado de 4x3,creo ke por ahi pasa el problema,ademas en el if yo usaria un | en vez de ||,y mas bien usaria un printf(lcd_putc,"%c",tecla) dentro de la misma funcion o printf(lcd_putc,"%c",escan_teclado()) aca dejo el código,chau
char escan_teclado()
{
int tecla;
int i=0;
boolean teclapulsada=FALSE;
int vect[5]={0x0E,0x0D,0x0B,0x07,0};
char matriz_teclado[4][3]={'1','2','3','4','5','6','7','8','9','*','0','#'};
while(i<4|teclapulsada==FALSE)
{
portb=vect;
if(!input(PIN_B4))
{
tecla=0;
tecla=matriz_teclado[tecla];
teclapulsada=TRUE;
}
if(!input(PIN_B5))
{
tecla=1;
tecla=matriz_teclado[tecla];
teclapulsada=TRUE;
}
if(!input(PIN_B6))
{
tecla=2;
tecla=matriz_teclado[tecla];
teclapulsada=TRUE;
}
i++;
}
teclapulsada=FALSE;
return(tecla);
}
-
Hola jdaniels.
¿Probaste físicamente la rutina que escribí? Es por saber si funciona.
Un saludo
-
Sip la rutina si funciona, solo cuando le hice esos pequeños cambios no me hacia caso, a lo mejor solo reconoce a quien la diseño :D, pero si pocher la rutina trabaja excelente