UNIDAD 8: TECLADO-LCD
OBJETIVO
En esta unidad se comprueba lo fácil que resulta unir dos periféricos
básicos que permiten dotar de
cierta autonomía a un proyecto basado en microcontolador.Una interfaz de introducción de datos (Teclado)
y un dispositivo visualizador (LCD).
FUNDAMENTO TEÓRICO
LCD
El controlador Hitachi HD44780 se ha convertido en un estándar de industria para las LCD cuyas especificaciones
funcionales son imitadas por la mayoría de los fabricantes. Este controlador cuenta con los siguientes interfaces eléctricos:
D0-D7: ocho señales eléctricas que componen un bus de datos.
R/W: una señal que indica si se desea leer o escribir en la pantalla(generalmente solamente se escribe).
RS: una señal que indica si los datos presentes en D0-D7 corresponden
bien a una instrucción, bien a sus parámetros.
E: una señal para activar o desactivar la pantalla.
V0: señal electrica para determinar el contraste de la pantalla. Generalmente
en el rango de cero a cinco voltios.
(Cuando el voltaje es de cero voltios se obtienen los puntos más oscuros.)
Vss y Vdd: señales de alimentación. Generalmente a cinco voltios.
NOTA:En todas las unidades donde aparezca la lcd, su configuración será de 4 bits para los datos, ya que
nos permite emplear un sólo puerto para manejarla correctamente.
Teclado matricial 4x4
Dispositivo de entrada de datos que consta de 16 teclas o pulsadores, dispuestos e interconectados
en filas y columnas. Dispone de un conector SIL (Single In Line) macho de 8 pines que se corresponden
con las 4 filas y las cuatro columnas de las que dispone.
ESQUEMA ELECTRÓNICO
Se conecta la LCD al puerto 2 del microcontrolador.El teclado al puerto 0.
Los pines del puerto 2 y la LCD , se conectan del siguiente modo:
P2^0 // LCD D4 pin 11
P2^1 // LCD D5 pin 12
P2^2 // LCD D6 pin 13
P2^3 // LCD D7 pin 14
P2^4; // LCD I/O enable pin 6
P2^5; // LCD I/O register select pin 4
P2^6; // LCD I/O R/W select pin 5
En la LCD ; pin 1 ->GND; pin 2 -> Vcc ; pin 3 -> contraste.
C
#include <reg51ac2.h>
#include <stdio.h>
#include <LCD16x2.h>
#include <LCD16x2ln.c>
#define UCHAR unsigned char
#define PUERTO P0
void kbInit(){
PUERTO=0xf;}
UCHAR kbHit(){
return(PUERTO ^ 0xf);}
UCHAR keyNumber(){
UCHAR fila,col;
fila=PUERTO;
switch(fila)
{
case 0x0e:
fila=0;
break;
case 0x0d:
fila=1;
break;
case 0x0b:
fila=2;
break;
case 0x07:
fila=3;
break;
default:
fila=0xff;
break;
}
PUERTO=0xf0;
col=PUERTO;
PUERTO=0x0f;
switch(col)
{
case 0xe0:
col=0;
break;
case 0xd0:
col=1;
break;
case 0xb0:
col=2;
break;
case 0x70:
col=3;
break;
default:
col=0xff;
break;
}
if((fila==0xff)||(col==0xff))
col=0xff;
else
col=(fila<<2)+col;
return(col);
}
UCHAR kbRead(){
UCHAR uc;
UCHAR code kbTable[16]={'1','4','7','*',
'2','5','8','0',
'3','6','9','#',
'A','B','C','D'};
int i;
while(kbHit()!=0)
;
while(kbHit()==0)
;
for(i=0;i<3600;i++)
;
uc=keyNumber();
if(uc!=0xff)
uc=kbTable[uc];
return(uc);
}
void main(){
UCHAR tecla;
init_lcd();
kbInit();
for(;;){
tecla=kbRead();
printf("\nLa tecla es:%c",tecla);}}