Anda di halaman 1dari 3

Ejemplo en mikroC PRO con el

PIC16F88
Estos ejemplos se pueden probar en el circuito de la figura 8.2.1 y corresponden al
microcontrolador PIC16F88. El cdigo fuente para los microcontroladores
PIC16F628A y 16F877A se encuentra en las carpetas correspondientes que
acompaan a este libro. Debe notarse que el cdigo que se obtiene al presionar una
tecla es un nmero entero entre 1 y 16, de izquierda a derecha y de arriba abajo,
comenzando por la fila A. Este nmero se emplea para asociarle el smbolo
respectivo impreso en el teclado matricial 4x4 (por medio de los cdigos ASCII),
para su uso posterior en el programa. Esto se detalla en el siguiente ejemplo.

Ejemplo-Teclado_1.c: Lo que se va escribiendo por el teclado es visualizado en la


primera lnea del LCD. Cuando llega al final se borra todo y comienza de nuevo.

//Teclado_1.c
// Variable necesaria para la conexin del teclado.
char keypadPort at PORTB;
//Declaracin de las 12 variables necesarias para la conexin
//del mdulo LCD.
sbit LCD_RS at RA4_bit;
sbit LCD_EN at RA6_bit;
sbit LCD_D4 at RA0_bit;
sbit LCD_D5 at RA1_bit;
sbit LCD_D6 at RA2_bit;
sbit LCD_D7 at RA3_bit;

sbit LCD_RS_Direction at TRISA4_bit;


sbit LCD_EN_Direction at TRISA6_bit;
sbit LCD_D4_Direction at TRISA0_bit;
sbit LCD_D5_Direction at TRISA1_bit;
sbit LCD_D6_Direction at TRISA2_bit;
sbit LCD_D7_Direction at TRISA3_bit;
// Fin de declaracin de variables de conexin.
char kp, contador=0;
void main(){
OSCCON=0x40; //Oscilador interno a 1MHz (TCI=4 us).
while (OSCCON.IOFS==0); //Esperar mientras el oscilador est inestable.
ANSEL=0x00; //Bits AN6:AN0 como E/S digital.
Keypad_Init(); //Inicializa el teclado.
Lcd_Init(); //Inicializa el LCD.
Lcd_Cmd(_LCD_CLEAR); //Borra el display.
Lcd_Cmd(_LCD_CURSOR_OFF); //Apaga el cursor.

while (1){
kp=0;
do //Espera por una tecla.
kp=Keypad_Key_Click(); //Lee el nmero de la tecla y lo guarda en kp.
while (!kp);
switch (kp){
case 1: kp = 49; break; //49 es el cdigo ASCII del nmero 1.
case 2: kp = 50; break; //50 es el cdigo ASCII del nmero 2.
case 3: kp = 51; break; //51 es el cdigo ASCII del nmero 3.
case 4: kp = 65; break; // A
case 5: kp = 52; break; // 4
case 6: kp = 53; break; // 5
case 7: kp = 54; break; // 6
case 8: kp = 66; break; // B
case 9: kp = 55; break; // 7
case 10: kp = 56; break; // 8
case 11: kp = 57; break; // 9
case 12: kp = 67; break; // C
case 13: kp = 42; break; // *
case 14: kp = 48; break; // 0
case 15: kp = 35; break; // #
case 16: kp = 68; break; // D
}
Lcd_Chr_CP(kp); //Presenta el carcter en el LCD.
contador++; //Cuenta el nmero de pulsaciones.
if (contador==16){ //Si se han efectuado 16 pulsaciones.
contador=0;
Delay_1sec(); //Espera 1 s.
Lcd_Cmd(_LCD_CLEAR); //Borra la pantalla y retorna el cursor al
} //origen.
}
}

Anda mungkin juga menyukai