Módulo teclado matricial

INTRODUCCIÓN:

    Muchas aplicaciones con microcontroladores se sirven de teclados para la introducción de datos.

DESCRIPCIÓN:

     La mayoría de los teclados se leen por una técnica de exploración consistente en ir leyendo consecutivamente las filas o las columnas de éste. Hay circuitos especializados en esta tarea, pero es fácil hacer que un microcontrolador lea estos teclados matriciales (los ordenadores compatibles PC incluyen un pequeño microcontrolador que hace esta tarea y envía las teclas pulsadas a la unidad central). La disposición en matriz de los teclados responde a la necesidad de leer gran cantidad de conmutadores con pocas líneas de entrada, piénsese en que si se necesitase una línea por cada tecla del teclado de un PC, serían necesarios más de 100 líneas. El esquema muestra un esquema de un típico teclado matricial 4x4 y la conexión directa a un puerto del microcontrolador. Las resistencias de pull-up no son necesarias en el caso de que el teclado se conecte a puertos con pull-up interna (P1, P2 y P3).

Descarga Del Esquematico Del Módulo Teclado Hexadecimal

 Conexión del teclado al microcontrolador

    Para explorar el teclado se procede de la siguiente forma: poner a 0 una fila (una entrada) y el resto a 1 leer las columnas (las salidas) si uno de los bits leídos en las salidas es 0 es porque hay una tecla pulsada en esa fila, se deberá ver que bit es y devolver un dato correspondiente a la tecla que es. La pulsación de teclas en otras filas no tiene efecto en la fila a explorar si no hay teclas pulsadas en la fila, pasar a la fila siguiente y repetir el proceso.

PCB:

Descarga Del PCB Del Módulo Teclado Hexadecimal

COMPONENTES:

COMPONENTES

CANTIDAD
Conector Molex 2x5  1
Resistencias 10K 1/4W 4
Teclado Matricial Hexadecimal  1
Torretas Separadoras 10 mm 4
PCB 1 cara (125 x 82)mm 1

 

EJEMPLO:

(guardar)

     El siguiente módulo software permite explorar el teclado y devolver el número de tecla pulsado o un 0 si no hay ninguna pulsada. Será fácil asignar a cada código de tecla un carácter u otro código empleando una tabla de búsqueda. El módulo es muy sencillo, se podría mejorar para evitar el efecto del rebote de las teclas o para que el sistema de interrupciones lo explorase cada cierto tiempo y la información leída se fuese introduciendo en un buffer (como en el teclado de un PC).

/* keyb.c */
#include <io51.h>
#include "keyb.h"
#ifndef KBP
#define KBP P1
#endif

static unsigned char kbcol(unsigned char l)
{
    switch(l)
    {
        case 0x07: return(4);
        case 0x0B: return(3);
        case 0x0D: return(2);
        case 0x0E: return(1);
    }
    return(0);
}
 
 

unsigned char kb_scan(void)
{
    unsigned char l,s,f;
    s = 0;
    KBP = 0xFF;
    KBP &= 0xEF;
    if ((l = (KBP & 0x0F)) != 0x0F)
    {
        f = 0;
        s = kbcol(l);
    }
    KBP = 0xFF;
    BP &= 0xDF;
    if ((l = (KBP & 0x0F)) != 0x0F)
    {
        f = 4;
        s = kbcol(l);
    }
    KBP = 0xFF;
    KBP &= 0xBF;
    if ((l = (KBP & 0x0F)) != 0x0F)
    {
        f = 8;
        s = kbcol(l);
    }
    KBP = 0xFF;
    KBP &= 0x7F;
    KBP &= 0x7F;
    if ((l = (KBP & 0x0F)) != 0x0F)
    {
        f = 12;
        s = kbcol(l);
    }
    if (s) return(s+f);
    else
        return(0);
}
 

/* keyb.h */
unsigned char kb_scan(void);

/* testkb.c */
#include "lcd.h"
#include "keyb.h"
unsigned char taula[]="-123A456B789C*0#D";

void main(void)
{
    unsigned char tecla;
    lcd_reset();
    lcd_escribe("Has pulsado:");
    while(1)
    {
        if (tecla = kb_scan())
        {
            lcd_gotoxy(14,1);
            lcd_caracter(taula[tecla]);
            while(kb_scan()); /* esperar a que se suelte */
        }
    }
}