Beruflich Dokumente
Kultur Dokumente
PIC
Extracto
del
Captulo
VIII
del
libro
Cmo programar en lenguaje C los microcontroladores PIC16F88, 16F628A y
16F877A. 2da edicin.
En este captulo se har el estudio del teclado matricial 4x4 (figura 8.1), que son
los ms utilizados en el desarrollo de proyectos con microcontroladores PIC y que
tienen su aplicacin en el ingreso de datos de manera manual por parte del
usuario, en aquellos casos en que el empleo de pulsadores simples no es lo ms
apropiado, ya sea por la presentacin final del producto o por la restriccin del
nmero de lneas de entrada de los microcontroladores PIC.
El teclado matricial 4x4 est constituido por una matriz de pulsadores dispuestos
en filas (A,B,C,D) y columnas (1,2,3,4), con la intencin de reducir el nmero de
pines necesarios para su conexin. Las 16 teclas necesitan slo 8 pines del
microcontrolador, en lugar de los 16 pines que se requeriran para la conexin de
16 teclas independientes.
Para poder utilizar estas funciones se tiene que declarar previamente una variable
que especifica el puerto que se emplear para la conexin del teclado matricial
4x4, como se observa en los ejemplos de programacin. La conexin a los
microcontroladores PIC16F88, 16F628A y 16F877A se muestra en las figuras
8.2.1, 8.2.2 y 8.2.3 donde se ha empleado el puerto B: las columnas se conectan
al nibble bajo, mientras que las filas se conectan al nibble alto del mismo puerto.
at
at
at
at
at
at
de
TRISA4_bit;
TRISA6_bit;
TRISA0_bit;
TRISA1_bit;
TRISA2_bit;
TRISA3_bit;
variables de conexin.
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
kp=Keypad_Key_Click();
while (!kp);
switch (kp){
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
kp
kp
kp
kp
kp
kp
kp
kp
kp
kp
kp
kp
kp
kp
kp
kp
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
49;
50;
51;
65;
52;
53;
54;
66;
55;
56;
57;
67;
42;
48;
35;
68;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
}
Lcd_Chr_CP(kp);
contador++;
if (contador==16){
contador=0;
Delay_1sec();
Lcd_Cmd(_LCD_CLEAR);
}
}
}