Vous êtes sur la page 1sur 5

TECLADO MATRICIAL.

Un teclado est compuesto de una serie de interruptores (pulsadores), los cuales estn
conectados en forma de matriz.
Aunque los teclados pueden tener presentaciones de 4x3 (4 renglones x 3 columnas) o bien de
4x4, no observamos que salen 12 o 16 cables respectivamente, es decir no hay un cable por
cada tecla. Lo normal es que se tengan 8 cables, para el caso de un teclado de 4x4, 4 cables
corresponden a cada uno de los renglones y los 4 restantes a las columnas.


Dentro del aprendizaje del manejo del teclado debe considerarse el saber identificar que cable
corresponde a que columna o rengln, para despus conectarse al microcontrolador. Esto se
logra por simple observacin del impreso del teclado.
Como se puede ver en la figura, cada botn del teclado esta por un lado conectado a un
rengln y a una columna, esto facilitar su identificacin. Por ejemplo al presionar la tecla 3
estamos relacionando el rengln 2 con la columna 2 o en la tecla 4 rengln 1 con columna 0,
como si fueran coordenadas.
Entonces lo que se debe hacer en el programa para identificar que tecla es la que se est
pulsando, es probar cada combinacin que se puede tener de rengln-columna.
Supongamos que decidimos trabajar el teclado matricial con el puerto C y que la conexin
queda de la siguiente forma:
PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0
Rengln3 Rengln2 Rengln1 Rengln0 Col3 Col2 Col1 Col0

Para identificar una tecla lo que debemos hacer es activar cada uno de los renglones (enviando
un 1) y preguntar en que columna aparece ese mismo 1.

Primero activamos el rengln 0 (row0) que est en PC4, as al puerto le ponemos le asignamos
el siguiente nmero (lo voy a poner en binario para que quede muy claro)
puertoC= 0b0001000; // activamos rengln 0 y luego preguntamos
if( puertoC==0b00010001){
lcd_gotoxy(1,1);
printf(lcd_putc, es la tecla 7); }
if( puertoC==0b00010010) {
lcd_gotoxy(1,1);
printf(lcd_putc, es la tecla 8 ); }
if( puertoC==0b00010100) {
lcd_gotoxy(1,1);
printf(lcd_putc, es la tecla 9 ); }
if( puertoC==0b00011000) {
lcd_gotoxy(1,1);
printf(lcd_putc, es la tecla A ); }
//pasamos a activar el rengln 1 y luego preguntamos
puertoC=0b00100000; // se activ el rengln 1
if( puertoC==0b00100001) {
lcd_gotoxy(1,1);
printf(lcd_putc, es la tecla 4); }
if( puertoC==0b00100010) {
lcd_gotoxy(1,1);
printf(lcd_putc, es la tecla 5); }
.. y as debemos seguir en todo el programa, cambiamos 4 veces la informacin del rengln
y preguntamos en cada una 4 veces por cada columna.
Este es el modo ms rudimentario de identificar el teclado, otra forma sera creando funciones
con una instruccin for.. para recorrer el 1 del rengln. O bien algn algoritmo.
PIC-C ofrece una librera para identificar el teclado KBD.c, esta librera esta creada para un
teclado de 4x3, pero se puede modificar y arreglar para un teclado de 4x4.
Analicemos la librera kbd.c , hay que recordar que al inicio de la librera aparecen siempre las
funciones que se encuentran habilitadas para poder hacer uso de la misma.
En el caso de la librera kbd.c, solo tiene dos funciones:


KBDD.C ////
//// kbd_init() Must be called before any other function. Con esta funcin inicializamos el
teclado y equivale a estar habilitando cada uno de los renglones.
//// c = kbd_getc(c) Will return a key value if pressed . Con esta function se captura el valor
de la tecla y se asigna dicho valor a una variable que en este caso la llaman c.
// Un-comment the following define to use port B
// #define use_portb_kbd TRUE la librera originalmente esta creada para controlar el
teclado en el puerto D, pero si quitan los comentarios al #define anterior entonces
quedara habilitado para el puerto B, que es la mejor opcin, ya que en el puerto B se
encuentran una serie de resistencias de pull-up y al ser habilitadas nos simplifican mucho el
hardware del teclado.
Conexiones del teclado al microcontrolador. La librera trae definido como se debe realizar
dicha conexin:
//Keypad connection: (for example column 0 is B2)
#ifdef blue_keypad ///////////////////////////////////// For the blue keypad
#define COL0 (1 << 2) // la columna 0 a PB2
#define COL1 (1 << 3) // la columna 1 a PB3
#define COL2 (1 << 6) // la columna 2 a PB6, si el teclado es de 4x4 hay que
Agregar otro define para COL4 y asignarlo a PB0
#define ROW0 (1 << 4) // el rengln 0 a PB4 CONEXIONES PARA
#define ROW1 (1 << 7) // el rengln 1 a PB7 TECLADO AZUL
#define ROW2 (1 << 1) // el rengln 2 a PB1
#define ROW3 (1 << 5) // el rengln 3 a PB5
#else ////////////////////////////////////////////////// For the black keypad
#define COL0 (1 << 5) // la columna 0 a PB5
#define COL1 (1 << 6) CONEXIONES TECLADO
#define COL2 (1 << 7) NEGRO
Si el teclado es de 4x4 agregar otro define y asignarlo a PB0
#define ROW0 (1 << 1)
#define ROW1 (1 << 2) CONEXIONES TECLADO NEGRO
#define ROW2 (1 << 3)
#define ROW3 (1 << 4)

#define ALL_ROWS (ROW0|ROW1|ROW2|ROW3)
#define ALL_PINS (ALL_ROWS|COL0|COL1|COL2) HAY QUE AGREGAR OTRA COLUMNA

Distribucin de las teclas. La librera ya trae asignada un nmero, signo o letra a cada tecla
pero podemos dar otra distribucin cambiando la matriz que presenta la librera.
// Keypad layout: podemos hacer otra distribucin segn nuestras necesidades Y
tamao del teclado
ORIGINAL CAMBIO A UN TECLADO DE 4x4 y otra distribucin

char const KEYS[4][3] = {{'1','2','3'}, char const KEYS[4][4]= {{A,B.C,D},
{'4','5','6'}, {1,2,3,E},
{'7','8','9'}, {4,5,6,F},
{'*','0','#'}}; {7,8,9,0}};

Hay que terminar de analizar la librera y ver donde ms se necesita un cambio para ajustar a
un manejo de un teclado de 4x4.
PROGRAMA
Para identificar una letra y desplegarla en la LCD.
//directivas
#include <16f877a.h>
#fuses XT.
#use delay(clock
#include <lcd.c>
#include <kbd.c> //traemos librera de lcd ya modificada el teclado q se va a manejar
Char TECLA;

// funciones
Inicializar(){
Lcd_init();
Kbd_init();
Port_b_pullups(TRUE); } // se habilitan las resistencias del pullup del puerto B para
poder manejar la lcd
//principal
Main(){
Inicializar();
Lcd_gotoxy(1,1);
Printf(lcd_putc, la tecla es:);
While(true){
TECLA= kbd_getc(); // llama a la funcin q hay en la librera KBD para
identificar la tecla y asignarla a la variable tipo char TECLA.
lcd_gotoxy(3,2);
printf(lcd_putc, %C, TECLA); } } // IMPRIME EN EL SEGUNDO RENGLN LA
VARIABLE TIPO CHAR TECLA
ATENCIN
Hay que poner cuidado en como manda la letra o el nmero el teclado es cdigo BCD o ASCII?
Es importante esta informacin cuando se quiere tomar una decisin con la informacin que
manda el teclado.
.

Vous aimerez peut-être aussi