Programas para práctica de teclado
PROGRAMA 1
unsigned short kp, cnt, oldstate = 0;
char txt[6];
char keypadPort at PORTD; // Conexiones del módulo del teclado
// final de conexiones del módulo del teclado
// Establecer las conexiones del LCD
sbit LCD_RS at LATE0_bit;
sbit LCD_EN at LATE1_bit;
sbit LCD_D4 at LATC0_bit;
sbit LCD_D5 at LATC1_bit;
sbit LCD_D6 at LATC6_bit;
sbit LCD_D7 at LATC7_bit;
sbit LCD_RS_Direction at TRISE0_bit;
sbit LCD_EN_Direction at TRISE1_bit;
sbit LCD_D4_Direction at TRISC0_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D6_Direction at TRISC6_bit;
sbit LCD_D7_Direction at TRISC7_bit;
// Final de las conexiones del LCD
void main() {
PORTD= 0x00;
Realizo: M. en E. Víctor morales castillo.
TRISD= 0X00;
cnt =0; // Reiniciar el contador
Keypad_init(); // Inicializar el Teclado
Lcd_Init(); // Inicializar LCD
Delay_ms(1);
Lcd_Cmd(_LCD_CLEAR); // Limpiar display
Delay_ms(1);
Lcd_Cmd(_LCD_CURSOR_OFF); // Apagar cursor
Delay_ms(1);
Lcd_Out(1, 1, " ");
Lcd_Out(1, 1, "Tecla :");
Lcd_Out(2, 1, "Tiempo :");
do{
kp =0; // Reiniciar la variable de codigo de tecla
// Esperar que la tecla se presione y suelte
do
//kp = Keypad_Key_Click(); // Almacena el código de la tecla
kp = Keypad_Key_press(); // Almacena el código de la tecla
while (!kp);
// Prepara el valor para la salida, convertir el dato en el código ASCII equivalente
switch (kp){
default:kp +=48;
Realizo: M. en E. Víctor morales castillo.
case 1:kp = 55; break; //'7'
case 2:kp = 56; break; //'8'
case 3:kp = 57; break; //'9'
case 4:kp = 37; break; //'%'
case 5:kp = 52; break; //'4'
case 6:kp = 53; break; //'5'
case 7:kp = 54; break; //'6'
case 8:kp = 42; break; //'*'
case 9:kp = 49; break; //'1'
case 10:kp = 50; break; //'2'
case 11:kp = 51; break; //'3'
case 12:kp = 45; break; //'-'
case 13:kp = 67; break; //'ON'
case 14:kp = 48; break; //'0'
case 15:kp = 61; break; //'='
case 16:kp = 43; break; //'+'
if(kp!= oldstate){ // Tecla presionada es distinta a la anterior
cnt=1;
oldstate = kp;
else{ // Tecla presionada es igual a la anterior
cnt++;
Lcd_Chr(1,10,kp); // Visualizar el valor ASCII del dato en el LCD
if(cnt==255){ // Si la variable del contador esta fuera del rango
cnt=0;
Realizo: M. en E. Víctor morales castillo.
Lcd_Out(2,10," ");
WordToStr(cnt,txt); // convertir el valor del contador en la cadena
Lcd_Out(2,10,txt); // Visualizar el valor del contador en el LCD
} while(1);
PRORAMA 2
//Declaración del puerto para el teclado 4x4
char keypadPort at PORTD;
//Definicion pines para el LCD.
sbit LCD_RS at LATE0_bit;
sbit LCD_EN at LATE1_bit;
sbit LCD_D4 at LATC0_bit;
sbit LCD_D5 at LATC1_bit;
sbit LCD_D6 at LATC6_bit;
sbit LCD_D7 at LATC7_bit;
//Definicion de registros TRIS para el LCD.
sbit LCD_RS_Direction at TRISE0_bit;
sbit LCD_EN_Direction at TRISE1_bit;
sbit LCD_D4_Direction at TRISC0_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D6_Direction at TRISC6_bit;
sbit LCD_D7_Direction at TRISC7_bit;
//Función para decodificar el teclado.
char LeerTeclado( void )
Realizo: M. en E. Víctor morales castillo.
{
//Estructura switch case para evaluar los valores retornados
//por la librería del teclado.
switch( Keypad_Key_press() )
case 1: return '7';
case 2: return '8';
case 3: return '9';
case 4: return '/';
case 5: return '4';
case 6: return '5';
case 7: return '6';
case 8: return '*';
case 9: return '1';
case 10: return '2';
case 11: return '3';
case 12: return '-';
case 13: return 'c';
case 14: return '0';
case 15: return '=';
case 16: return '+';
default: return 0; //Tecla no pulsada.
void main( void )
//Declaración de variables.
char Tecla;
//Configuración e inicialización del PIC.
Realizo: M. en E. Víctor morales castillo.
Lcd_Init(); //Inicializa el LCD.
Lcd_Cmd(_LCD_CURSOR_OFF); //Se apaga el cursor.
Lcd_Out(1, 1,"Tecla:"); //Se imprime texto.
while(1)//Bucle infinito.
Tecla=LeerTeclado(); //Se lee el teclado y su resultado se guarda en Tecla.
Lcd_Chr(2,1,Tecla); //Visualización el valor retornado por el teclado.
PROGRAMA 3
//Declaración del puerto para el teclado 4x4
char keypadPort at PORTD;
// Establecer las conexiones del LCD
sbit LCD_RS at LATE0_bit;
sbit LCD_EN at LATE1_bit;
sbit LCD_D4 at LATC0_bit;
sbit LCD_D5 at LATC1_bit;
sbit LCD_D6 at LATC6_bit;
sbit LCD_D7 at LATC7_bit;
sbit LCD_RS_Direction at TRISE0_bit;
sbit LCD_EN_Direction at TRISE1_bit;
sbit LCD_D4_Direction at TRISC0_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D6_Direction at TRISC6_bit;
sbit LCD_D7_Direction at TRISC7_bit;
Realizo: M. en E. Víctor morales castillo.
// Final de las conexiones del LCD
void main( void )
//Declaración de variables.
unsigned short Tecla;
char Text[20];
//Configuración e inicialización del PIC.
Lcd_Init(); //Inicialización del LCD.
Lcd_Cmd(_LCD_CURSOR_OFF); //Se apaga el cursor.
Lcd_Out(1, 1,"Tecla:"); //Se imprime texto.
while(1)//Bucle infinito.
Tecla=Keypad_Key_Press(); //Se lee el teclado y se guarda el resultado en Tecla.
ByteToStr(Tecla, Text); //Conversión de entero a texto.
Lcd_Out(2,1,Text); //Visualización del valor retornado por el teclado.
Realizo: M. en E. Víctor morales castillo.
Realizo: M. en E. Víctor morales castillo.