• No se han encontrado resultados

Uso de teclados matriciales

In document Libro Simulacion Mikroc (página 78-84)

Las aplicaciones con microcontroladores, requieren en algunos casos el uso de teclas de entrada de datos, para datos numéricos, funciones e incluso caracteres de texto. La opción me mayor practicidad es el uso de teclados matriciales, estos consisten en un arreglos de pulsadores alineados en filas y columnas, minimizando el número de conexiones eléctricas. En las siguientes imágenes se puede ver la apariencia física de un teclado matricial de 4x4 y su equivalente esquemático:

Los teclados matriciales pueden tener dimensiones mayores en función de la necesidad del desarrollador. Los teclados especiales pueden ser fabricados con membranas plásticas con la cantidad de teclas y la distribución de las mismas, de tal manera que suplan las necesidades del usuario. Sin embargo los teclados 4x4 permiten hacer una interfaz lo suficientemente completa para muchas de las aplicaciones. Los teclados matriciales funcionan activando una de 4 columnas y revisando cual de las filas se activan, este proceso determina cual es la tecla pulsada, de igual manera el análisis se puede hacer invirtiendo las columnas con las filas. El compilador MikroC PRO, contiene una librería que controla y lee un teclado de 4x4, está librería cuenta con tres funciones para este propósito. La librería que permite el uso de teclados 4x4 es: Keypad4x4, y las funciones que usa son: Keypad_Init(void);, está inicializa el uso del teclado en función del puerto designado para este fin. La función: char Keypad_Key_Press(void);, Está función, retorna un valor de 0 a 16, don de 0 representa el teclado totalmente inactivo, los resultados del 1 al 16 representan las 16 posibles teclas. Está función retorna inmediatamente el estádo del teclado cada vez que es invocada. La última función de la librería para el teclado matricial es: char

Keypad_Key_Click(void);, Su comportamiento es idéntico a la función anterior, su diferencia

vital es que si la función detecta una tecla pulsada, solo retorna su valor hasta que está tecla es soltada.

Para estudiar las características de este tipo de teclados, se mostrará un ejemplo con un nuevo proyecto en ISIS, que requiere de los siguientes dispositivos: PIC 16F877A, RES, BUTTON, LM016L, este último es un display de caracteres de 2x16. De la misma forma se debe crear el proyecto nuevo en el compilador MikroC PRO.

Para iniciar el proyecto se debe construir un circuito en ISIS, como el visualizado en la siguiente figura:

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. }

}

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:

Circuito 6-6

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:

Retorno de las funciones Equivalencia 0 Ninguna tecla pulsada

1 Tecla 1 2 Tecla 2 3 Tecla 3 4 Tecla A 5 Tecla 4 6 Tecla 5 7 Tecla 6 8 Tecla B 9 Tecla 7 10 Tecla 8 11 Tecla 9 12 Tecla C 13 Tecla * 14 Tecla 0 15 Tecla # 16 Tecla D Tabla 6-1

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. }

}

El programa final de está aplicación es el siguiente:

//Declaración del puerto para el teclado 4x4 char keypadPort at PORTC;

//Definicion 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;

//Definicion 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; //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. }

}

void main( void ) {

//Declaración de variables. char Tecla;

//Configuración e inicialización del PIC. Lcd_Init(); //Inicializa el LCD.

Lcd_Cmd(_LCD_CURSOR_OFF); //Se apaga el cursor. Lcd_Out(1, 1,"Tecla:"); //Se imprime texto.

while(1)//Bucle infinito. {

Tecla=LeerTeclado(); //Se lee el teclado y su resultado se guarda en Tecla. Lcd_Chr(2,1,Tecla); //Visualización el valor retornado por el teclado. }

}

Una vez editado, compilado y simulado este programa, se debe ver en la simulación del display LCD, el carácter correspondiente a la tecla que se está pulsando sobre el teclado.

In document Libro Simulacion Mikroc (página 78-84)