Está en la página 1de 9

TECLADO MATRICIAL 4x4

Los teclados matriciales son muy utilizados en sistemas embebidos, ya que ofrecen el control de varias teclas utilizando solo un puerto del microcontrolador.

Tabla de Contenido
________________________________________________________________________________

DEFINICIN

FUNCIONAMIENTO

PROGRAMACIN

LISTA DE PARTES

ENSAMBLE

DEFINICIN
Un teclado matricial es un simple arreglo de botones conectados en filas y columnas, de modo que se pueden leer varios botones con el mnimo nmero de entradas requeridas. Un teclado matricial 44 solamente ocupa 4 lneas de un puerto para las filas y otras 4 lneas para las columnas, de este modo se pueden leer 16 teclas utilizando solamente 8 entradas (un solo puerto) de un microcontrolador.

Este dispositivo, contiene varias teclas, las cuales sirven para introducir datos, por ejemplo a un microcontrolador, que realiza la funcin de calculadora, marcador telefnico, cerradura electrnica y una infinidad de aplicaciones.

FUNCIONAMIENTO
La mayora de los teclados se leen por una tcnica de exploracin consistente en ir leyendo consecutivamente las filas o las columnas de ste. Hay circuitos especializados en esta tarea, pero es fcil hacer que un microcontrolador lea estos teclados matriciales

La figura muestra un teclado matricial de 4x4, el cual tiene 16 teclas, las cuales estn configuradas en cuatro renglones y cuatro columnas. Para la configuracin del teclado matricial en el microcontrolador se utiliza algunos de sus puertos en el cual cuatro bits del puerto funcionan como salida y los cuatro bits restantes funcionan como entrada. El funcionamiento bsico del teclado matricial consiste en rastrear la unin entre un rengln y una columna, mediante un algoritmo que descifra cual tecla fue presionada.

En este caso configuraremos nuestro teclado matricial de la siguiente manera: 1. Utilizaremos el puerto A del microcontrolador para la conexin del teclado: Los cuatro bits menos significativos estarn conectados a los renglones (PA0-PA3). Los cuatro bits ms significativos estarn conectadas a las columnas (PA4- PA7). No es necesario activar las resistencias de pull-up internas del microcontrolador.

2. El puerto B del microcontrolador (PB0PB7) estar configurado como salida, donde se conectara un display ctodo de 7 segmentos, el cual mostrara el nmero de la tecla oprimida.

Tareas bsicas que realiza un programa de teclado matricial

Inicio

Mediante el software se hace un recorrido en los cuatro renglones de nuestro teclado, mientras que ninguna tecla sea presionada el valor lgico de estas se mantienen en un 1.

Se presion alguna tecla?


NO SI Cuando se detecte un valor distinto a un 1, se hace un rastreo de los renglones mediante la comparacin de en qu rengln se detect el cero, adems de aplicar el algoritmo de sumar el nmero de la columna para saber exactamente que botn fue presionado.

Rastrear renglones para encontrar columna de la tecla oprimida.

Descifrar la tecla oprimida.

Es importante recordar que en la prctica existe un efecto de rebote al presionar una tecla, para resolver este problema basta que en el programa se le aplique un pequeo retardo _delay_ms(time ms), dependiendo de la aplicacin es el tiempo que pondremos de retardo, generalmente es de 200ms.

PROGRAMACIN
Para comenzar con la programacin del ATMega16 comenzaremos con declarar las libreras necesarias para el funcionamiento del teclado matricial.
#include <avr/io.h> // Librera principal para utilizar los puertos del Microcontrolador #include <avr/pgmspace.h> // Librera necesaria para utilizar memoria flash del microcontrolador

Este programa en especfico utiliza la memoria flash del microcontrolador para guardar los nmeros que se mostraran en el display de siete segmentos. Tambin es necesario declarar el prototipo de la funcin del teclado matricial y la secuencia que se utilizara para el recorrido de los renglones del mismo.
//Nmeros Almacenados en la memoria Flash del microcontrolador const char tabla[] PROGMEM = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,0x67,0x77,0x7C,0x39,0x5E,0x79, 0x71}; // Secuencia de barrido de reglones en el teclado matricial volatile unsigned char secuencia[] = {0xFE, 0xFD, 0xFB, 0xF7}; // Prototipo de la funcin teclado. unsigned char teclado();

Ahora comenzamos con el cuerpo del programa, en donde se configuraran algunos puertos del microcontrolador como entradas y salidas, adems de declarar algunas variables tiles en el proceso de ejecucin del mismo.
int main() { unsigned char tecla=0; // Utilizamos el puerto A del microcontrolador para conectar el teclado. DDRA = 0x0F; // Los 4 bits menos significativos funcionan como salida y los dems como entradas DDRB = 0xFF; // Se configuran los 8 bits del puerto B como salida // Ciclo infinito, para la ejecucin continua del programa en el microcontrolador while(1) { tecla=teclado(); // Se llama a la funcin del teclado y recibimos en la variable tecla. if (tecla != 0xFF) // Verificamos si se ha presionado una tecla PORTB=pgm_read_byte(&tabla[tecla]); // Se muestra en display la tecla presionada } }

Por ultimo escribimos la funcin del teclado, en la cual viene el algoritmo de deteccin de tecla, donde solo se realiza un recorrido de los renglones con la secuencia de barrido escrita

anteriormente en el cdigo y se suma el nmero de la columna al rengln donde fue presionada la tecla.
unsigned char teclado(){ // Funcin para el teclado matricial unsigned char renglon, j, dato; for (renglon=0, j=0; j<4; j++){ // Recorrido de los renglones del teclado PORTA = secuencia [j]; asm("nop"); dato = PINA & 0xF0; if(dato != 0xF0){ switch (dato){ // Se rastrea el rengln y se le suma el numero de columna case case case case } 0xE0: 0xD0: 0xB0: 0x70: return return return return renglon; (renglon + 1); (renglon + 2); (renglon + 3);

} renglon = renglon + 4; } return 0xFF; // Se envia unos si no se presiona ninguna tecla

Tu programa debe verse de la siguiente manera, solo resta compilar el cdigo, si este no presenta ningn error el compilador automticamente generara un archivo con la extensin .hex, el cual es el archivo que vas a cargar a tu microcontrolador.
#define F_CPU 1000000UL #include <avr/io.h> #include <avr/pgmspace.h> const char tabla[] PROGMEM = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,0x67,0x77,0x7C,0x39,0x5E,0x79, 0x71}; volatile unsigned char secuencia[] = {0xFE, 0xFD, 0xFB, 0xF7}; unsigned char teclado(); int main() { unsigned char tecla=0; DDRA = 0x0F; DDRB = 0xFF;

while(1) { tecla=teclado(); if (tecla != 0xFF) PORTB=pgm_read_byte(&tabla[tecla]); } } unsigned char teclado(){ unsigned char renglon, j, dato; for (renglon=0, j=0; j<4; j++){ PORTA = secuencia [j]; asm("nop"); dato = PINA & 0xF0; if(dato != 0xF0){ switch (dato){ case 0xE0: return case 0xD0: return case 0xB0: return case 0x70: return } } renglon = renglon + 4; } return 0xFF; }

renglon; (renglon + 1); (renglon + 2); (renglon + 3);

LISTA DE PARTES
JP6 Tira de 5 terminales doble R108 - R111 330 (naranja-naranja-caf) S10 - S25 PCB Push button Tarjeta de cobre

ENSAMBLE
Para ensamblar el teclado matricial identifique cada uno de los componentes, colquelos y suldelos en la tabla de cobre (PCB) como lo indica las figuras impresas en l. Primero coloque los puentes marcados en la tarjeta de cobre antes de colocar los botones. Recomendamos emparejar los pines de los botones antes de instalarlos para una mejor insercin.

También podría gustarte