#include #include #include #include #define UCHAR unsigned char #define PUERTO P0 void kbInit(){ PUERTO=0xf;} UCHAR kbHit(){ return(PUERTO ^ 0xf);} UCHAR keyNumber(){ UCHAR fila,col; fila=PUERTO; switch(fila) { case 0x0e: fila=0; break; case 0x0d: fila=1; break; case 0x0b: fila=2; break; case 0x07: fila=3; break; default: fila=0xff; break; } PUERTO=0xf0; col=PUERTO; PUERTO=0x0f; switch(col) { case 0xe0: col=0; break; case 0xd0: col=1; break; case 0xb0: col=2; break; case 0x70: col=3; break; default: col=0xff; break; } if((fila==0xff)||(col==0xff)) col=0xff; else col=(fila<<2)+col; return(col); } UCHAR kbRead(){ UCHAR uc; UCHAR code kbTable[16]={'1','4','7','*', '2','5','8','0', '3','6','9','#', 'A','B','C','D'}; int i; while(kbHit()!=0) ; while(kbHit()==0) ; for(i=0;i<3600;i++) ; uc=keyNumber(); if(uc!=0xff) uc=kbTable[uc]; return(uc); } void main(){ UCHAR tecla; init_lcd(); kbInit(); for(;;){ tecla=kbRead(); printf("\nLa tecla es:%c",tecla);}}