Como hacer un menu en pic con un teclado matricial?

Que tal estoy haciendo un proyecto con un pic 16f887 y la verdad no se como hacer un menu implementando el teclado matricial de 4x4 esto es algo de lo que llevo pero todavia no puedo hacer que funcione el teclado

#include <16f887.h>
#fuses xt,nowdt,noprotect,nolvp,put
#use delay(clock=4000000)


#include<lcd.c>
#use fast_io(a)
#use fast_io(b)
#use fast_io(d)
#byte puertoa=0x05 // declaracion del puerto a ( direccion de memeoria en que se encuentra)
#byte puertob=0x06 // identificador asociado al registro de direccion 6
#byte puertod=0x08

//configuracion del teclado

#define KBD_ROW1 PIN_B7
#define KBD_ROW2 PIN_B6
#define KBD_ROW3 PIN_B5
#define KBD_ROW4 PIN_B4
#define KBD_COL1 PIN_B3
#define KBD_COL2 PIN_B2
#define KBD_COL3 PIN_B1
#define KBD_COL4 PIN_D3
#define KBD_USES_PULLUPS
#include<kbd4.c>

char k;

void main()
{
port_b_pullups (0xFF);


lcd_init();
kbd_init();


while(true){


printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"Bienvido elija una opción");
lcd_gotoxy(1,2);
printf(lcd_putc,"1)Servir Alimento/Agua");
lcd_gotoxy(21,1);
printf(lcd_putc,"2)Programar Alimento");
lcd_gotoxy(21,2);
printf(lcd_putc,"3)Nivel de agua/comida");
delay_ms(2000);



//Primera opcion del Menu
k=kbd_getc();
if(K!=0)
switch (k){


case 1:
printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"1)Agua");
lcd_gotoxy(1,2);
printf(lcd_putc,"1)Alimento");
lcd_gotoxy(21,1);
printf(lcd_putc,"2)Regresar");
delay_ms(2000);
break;
}
}
}
 
Última edición:
Hola, tenés el circuito de como estás implementando el teclado?

Usando entradas y salidas digitales, deberías tener agrupados los pulsadores de a 4, cada grupo con una salida del PIC (digamos, columnas), y luego cada fila a una entrada. Activando una salida, se muestrea para ver si se activó alguna entrada. Según que salida estaba activada, y qué entrada se activó, te dará que botón se pulsó.
 
Arriba