El teclado matricial (teclado 4x4) es muy empleado en el desarrollo de proyectos con microcontroladores PIC y encuentra aplicación en el ingreso de datos alfanuméricos de manera manual, en aquellos casos en que el uso de pulsadores simples (botones) no es lo más apropiado, ya sea por la presentación final del producto o por la restricción del número de líneas de entrada del microcontrolador. Recibe el nombre debido a que tiene 16 teclas formando una matriz que normalmente representan las cifras del sistema de numeración hexadecimal.


¡Descubre el mundo de los microcontroladores PIC y lleva tus habilidades de programación al siguiente nivel! Obtén nuestro eBook y disfruta aprendiendo paso a paso desde cero, podrás realizar proyectos prácticos, encontrar soluciones a problemas comunes y explorar una amplia cobertura de temas desde lo más básico a lo más avanzado. Incluye software y ejemplos resueltos. ¡Cómpralo ahora y libera el increíble potencial de esta poderosa tecnología hoy mismo!

Microcontroladores PIC en PDF: Curso completo


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 intención de reducir el número de pines necesarios para su conexión. Las 16 teclas necesitan sólo 8 pines del microcontrolador, en lugar de los 16 pines que se requerirían para la conexión de 16 teclas independientes.  

Teclado matricial 4x4    Teclado matricial

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.

Librería Keypad4x4 de mikroC PRO para teclado matricial 4x4

En la tabla siguiente se describen las funciones que se incluyen en la librería Keypad4x4 de mikroC PRO para el manejo del teclado matricial 4x4.

Funciones de mikroC PRO                        para teclado matricial 4x4

Para poder utilizar estas funciones se tiene que declarar previamente una variable que especifica el puerto que se empleará para la conexión del teclado matricial 4x4, como se observa en los ejemplos de programación. La conexión al PIC16F88 se muestra a continuación 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.

Teclado matricial 4x4 con PIC

Ejemplo en mikroC PRO con el PIC16F88

Debe notarse que el código que se obtiene al presionar una tecla es un número entero entre 1 y 16, de izquierda a derecha y de arriba abajo, comenzando por la fila A. Este número se emplea para asociarle  el símbolo respectivo impreso en el teclado matricial 4x4 (por medio de los códigos ASCII), para su uso posterior en el programa. Esto se detalla en el siguiente ejemplo.

Ejemplo-Teclado_1.c: Lo que se va escribiendo por el teclado es visualizado en la primera línea del LCD. Cuando llega al final se borra todo y comienza de nuevo.

//Teclado_1.c
// Variable necesaria para la conexión del teclado.
char  keypadPort at PORTB;
//Declaración de las 12 variables necesarias para la conexión
//del módulo LCD.
sbit LCD_RS at RA4_bit;
sbit LCD_EN at RA6_bit;
sbit LCD_D4 at RA0_bit;
sbit LCD_D5 at RA1_bit;
sbit LCD_D6 at RA2_bit;
sbit LCD_D7 at RA3_bit;

sbit LCD_RS_Direction at TRISA4_bit; 
sbit LCD_EN_Direction at TRISA6_bit;
sbit LCD_D4_Direction at TRISA0_bit;
sbit LCD_D5_Direction at TRISA1_bit;
sbit LCD_D6_Direction at TRISA2_bit;
sbit LCD_D7_Direction at TRISA3_bit;
// Fin de declaración de variables de conexión.
char kp, contador=0;

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                         //Espera por una tecla.
  kp=Keypad_Key_Click();  //Lee el número de la tecla y lo guarda en kp.
  while (!kp);
  switch (kp){
    case  1: kp = 49; break;  //49 es el código ASCII del número 1.
    case  2: kp = 50; break;  //50 es el código ASCII del número 2.
    case  3: kp = 51; break;  //51 es el código ASCII del número 3.
    case  4: kp = 65; break;  // A
    case  5: kp = 52; break;  // 4
    case  6: kp = 53; break;  // 5
    case  7: kp = 54; break;  // 6
    case  8: kp = 66; break;  // B
    case  9: kp = 55; break;  // 7
    case 10: kp = 56; break;  // 8
    case 11: kp = 57; break;  // 9
    case 12: kp = 67; break;  // C
    case 13: kp = 42; break;  // *
    case 14: kp = 48; break;  // 0
    case 15: kp = 35; break;  // #
    case 16: kp = 68; break;  // D
  }
  Lcd_Chr_CP(kp);            //Presenta el carácter en el LCD.
  contador++;                //Cuenta el número de pulsaciones.
  if (contador==16){         //Si se han efectuado 16 pulsaciones.
    contador=0;
    Delay_1sec();             //Espera 1 s.
    Lcd_Cmd(_LCD_CLEAR);      //Borra la pantalla y retorna el cursor al
  }                          //origen.
}
}