Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 27

Teclado Matricial

Ing. Diego Chacón


Teclado 4x4 y PIC16f877A

• Uno de los periféricos bastante util que usamos en algunos proyectos


con microcontroladores es teclado matricial. Normalmente los
encontramos en 2 presentaciones, 3x4 y 4x4. el primer numero nos
indica la cantidad de columnas y el segundo la cantidad de filas.
• Normalmente el teclado necesita resistencias de Pull-up para que el
microcontrolador pueda interpretar las señales que produce el
teclado. Esta seria una conexión típica de un teclado y un
microcontrolador.

• Como observamos en la imagen anterior nace la necesidad de


conectar las resistencias externas, pero algunos microcontroladores
como por ejemplo el 16F877A trae internamente estas resistencias
conectadas en el puerto B.
¿Como funciona un teclado matricial?

• El principio de funcionamiento es sencillo y es similar a lo que


haríamos para multiplexar leds o dipslays de 7 segmentos. El
programa configura el puerto B del PIC de la siguiente forma: RB4 a
RB7 funcionan como salidas y la otra mitad (RB0-RB3) como
entradas. Las filas (horizontal) del teclado matricial se conectan a los
bits más significativos que funcionan como salidas, mientras que las
columnas (vertical) se conectan a los bits menos significativos del
puerto que funcionan como entradas con resistencias pull-
down. Cualquier tecla que se oprima en una columna causará que
uno de los bits menos significativos del puerto (RB0 – RB3) cambie
de un estado lógico bajo a un estado alto.
La siguiente imágen muestra las conexiones del teclado al puerto B del microcontrolador. La imagen muestra
el teclado en reposo (sin teclas oprimidas).
• ¿Que pasa cuando se oprime una tecla en un teclado matricial?… la
corriente puede fluir a través del switch y el voltaje de los pines
conectados a las filas del teclado (5 V o nivel alto) aparece ahora
también en alguno de los pines RB0 a RB3 según la columna en la que
se encuentra la tecla oprimida. La siguiente imagen ilustra lo que
sucede al oprimir una tecla: al oprimir el botón 6 provocamos un
cambio en el PIN RB2 que ahora recibe un 1 o estado alto. Sabemos
entonces que se ha pulsado un botón en la segunda columna y se
muestra como un nivel lógico alto aparece en los bits menos
significativos del puerto B, específicamente en RB2.
• De esta manera el microcontrolador sabe que se ha oprimido una
tecla al detectar un cambio de nivel en los bits menos significativos.
Hasta el momento, se sabe que se ha oprimido una tecla en alguna
columna (dependiendo del bit activo RB3 a RB0), sin embargo, no
sabemos en cual fila. Para resolver en que fila se oprimió una tecla,
hay que realizar un proceso de escaneo del teclado. En este proceso,
colocaremos en secuencia un 1 lógico (estado alto) en los 4 bits más
significativos del puerto y leeremos el estado de los 4 bits menos
significativos. Sigamos con el ejemplo en el que se ha oprimido la
tecla 6 pero ahora viéndolo gráficamente:
Teclado matricial 4x4 con los microcontroladores PIC


El microcontrolador escanea en forma sucesiva los pines de salida,
mientras lee las entradas en la parte baja del puerto, de manera que
puede detectar que teclas están oprimidas en cada fila. Ahora solo
falta escribir nuestro codigo en MikroC que implemente los
procedimientos mencionados anteriormente y nos devuelva un valor
de la tecla oprimida, por ejemplo, mediante un número binario.
• Su funcionamiento es muy sencillo, cuando se presiona una tecla, se
conectan internamente la fila y columna correspondientes; por
ejemplo, al presionar la tecla “7” se conectan la fila C y la columna 1.
Si no hay ninguna tecla presionada, las filas están desconectadas de
las columnas.
• Su funcionamiento es muy sencillo, cuando se presiona una tecla, se
conectan internamente la fila y columna correspondientes; por
ejemplo, al presionar la tecla “7” se conectan la fila C y la columna 1.
Si no hay ninguna tecla presionada, las filas están desconectadas de
las columnas.
Figura 1 Teclado matricial 4x4
• En la tabla se describen las funciones que se incluyen en la librería
Keypad4x4 de mikroC PRO para el manejo del teclado matricial 4x4.
• Al correr la simulación de este programa en la pantalla se pueden ver
los valores retornados por el teclado. En la siguiente figura se puede
apreciar un a vista de la simulación cuando se pulsa la tecla rotulada
con el número 8:

• Para el caso puntual de este ejemplo el teclado hace un barrido de


izquierda a derecha y de arriba hacia abajo, empezando con la tecla 1,
y terminando con la tecla D. Esto significa que los retornos de las
funciones de lectura para el teclado son los siguientes datos con
respecto a cada una de las teclas:
• El programa diseñado en MikroC PRO, leerá el teclado y mostrará en el LCD, el valor retornado por el mismo.
Para este fin observe y analice el siguiente ejemplo:
• //Declaración del puerto para el teclado 4x4
• char keypadPort at PORTC;
• //Definición pines para el LCD.
• sbit LCD_RS at RB4_bit;
• sbit LCD_EN at RB5_bit;
• sbit LCD_D7 at RB3_bit;
• sbit LCD_D6 at RB2_bit;
• sbit LCD_D5 at RB1_bit;
• sbit LCD_D4 at RB0_bit;
• //Definición de registros TRIS para el LCD.
• sbit LCD_RS_Direction at TRISB4_bit;
• sbit LCD_EN_Direction at TRISB5_bit;
• sbit LCD_D7_Direction at TRISB3_bit;
• sbit LCD_D6_Direction at TRISB2_bit;
• sbit LCD_D5_Direction at TRISB1_bit;
• sbit LCD_D4_Direction at TRISB0_bit;
• 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.
• }
• }
• Hasta este punto se pueden leer del teclado una serie de números
pero estos no son equivalentes a la tecla pulsada, para corregir este
aspecto se debe implementar una función que decodifique los valores
entregados por el teclado y los convierta en el verdadero carácter que
cada una de las teclas representa. Para este fin observe la siguiente
función que se hace por medio de una estructura switch case para
decodificar el teclado.

• //Función para decodificar el teclado.
• char LeerTeclado( void )
• {
• //Estructura switch case para evaluar los valores retornados
• //por la librería del teclado.
• switch(Keypad_Key_Press() )
• {
• case 1: return „1‟;
• case 2: return „2‟;
• case 3: return „3‟;
• case 4: return „A‟;
• case 5: return „4‟;
• case 6: return „5‟;
• case 7: return „6‟;
• case 8: return „B‟;
• case 9: return „7‟;
• case 10: return „8‟;
• case 11: return „9‟;
• case 12: return „C‟;
• case 13: return „*‟;
• case 14: return „0‟;
• case 15: return „#‟;
• case 16: return „D‟;
• default: return 0; //Tecla no pulsada.
• }
• }

También podría gustarte