Cuando escribi la libreria LCD.H para c18 super facil de manejar pense que quedaria bien complementarla con la libreria para el teclado, creo que no esta incluida en c18 y si ya esta no la encuentro, bueno a mi me gusta hacer las cosas yo mismo y esa es la ventaja de c18 que te obliga a ser mas creativo.
El teclado a usar es uno extandar de 16 teclas aunque podemos usar otro de 12 aca uno de 16
Circuito a armar:
Codigo de la libreria:
unsigned char KeyScan(){
unsigned char k,j,dt=0;
k=0b11101111;
for(j=0;j<4;j++){
PORTB=k;
delay_ms(1);
switch (PORTB){
case 0x77: dt='0'; break;
case 0xB7: dt='1'; break;
case 0xD7: dt='2'; break;
case 0xE7: dt='3'; break;
case 0x7B: dt='4'; break;
case 0xBB: dt='5'; break;
case 0xDB: dt='6'; break;
case 0xEB: dt='7'; break;
case 0x7D: dt='8'; break;
case 0xBD: dt='9'; break;
case 0xDD: dt='A'; break;
case 0xED: dt='B'; break;
case 0x7E: dt='C'; break;
case 0xBE: dt='D'; break;
case 0xDE: dt='E'; break;
case 0xEE: dt='F'; break;
}
if(dt!=0){break;}
k<<=1;
}
return dt;
}
Como se puede intuir tambien es requete facil de usar como la libreria
LCD.h que publique en otro post.
Aca un ejemplo de uso:
void main(void){
TRISC=0;
PORTC=0;
TRISB=0x0f;
PORTB=0x0f;
Lcd_Init();
Lcd_Cmd(Lcd_Clr);
Lcd_Cmd(Off_Cur);
Lcd_OutR(1,1,"keyscan by");
Lcd_OutR(2,1,"mikrosurfer");
delay_ms(1000);
Lcd_Cmd(Lcd_Clr);
while(1){
if(KeyScan()!=0){
Lcd_Chr_cp(KeyScan());
while(KeyScan()!=0){delay_ms(100);}
}
}
}
Bueno cuando saque las otras librerias que tengo planeadas las publico aca.
espero les guste.