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);}}

teclado_lcd.c

teclado_lcd.hex