PROGRAMACIÓN DE UN DISPLAY DE LCD

Salvador Macías Hernández

Página hecha el Miércoles 8 de Marzo del 2006

Introducción

     Cada día la tecnología está mejorando. Cada día aparecen nuevos hallazgos científicos y tecnológicos. Hace ya varias décadas, la información de los sistemas digitales se presentaban a través de pequeños LEDs, después se hicieron a través del papel. De hecho el comando "Print" de basic, que muestra cierta información en la pantalla, obtuvo su nombre por que en ese tiempo no existía monitores de tubos de rayos catódicos. Sino que eran impresoras que mostraban la información directamente en el papel. Con el paso del tiempo se ha pasado por los LED's de siete segmentos, la matriz de LED's, el monitor de CRT, el cristal líquido, el plasma, etc. 

      Las siglas LCD quieren decir "Pantalla de Cristal Líquido" ("Liquid Crystal Display"). El LCD es una sustancia que se comporta al mismo tiempo como un líquido y como un sólido. Las moléculas de un cristal líquido pueden desplazarse unas respecto a otras con bastante facilidad, de forma semejante a las de un líquido. Sin embargo, todas las moléculas de un cristal líquido tienden a estar orientadas del mismo modo, algo similar a la estructura molecular de un cristal sólido. Los cristales líquidos sólo mantienen su doble naturaleza sólida y líquida en un determinado rango de temperaturas y presiones. A temperaturas lo bastante altas o presiones lo bastante bajas, el orden de la orientación da paso a las rotaciones moleculares aleatorias, con lo que el cristal líquido se convierte en un líquido normal. Cuando la temperatura es lo bastante baja o la presión es lo bastante alta, las moléculas de un cristal líquido ya no pueden desplazarse entre sí con facilidad, y el cristal líquido pasa a ser un sólido normal.

     Entre las muchas clases de cristal líquido están las fases nemática y colestérica y las distintas fases esmécticas, caracterizadas por una determinada colocación de las moléculas. Muchas veces es posible manipular las propiedades ópticas de un cristal líquido sometiéndolo a un campo magnético o eléctrico que cambia la orientación de sus moléculas. Por ejemplo, cuando se les aplica un campo eléctrico pequeño, algunos cristales líquidos pasan de ser claros a ser opacos, o adquieren la capacidad de girar la luz polarizada.

     El principio de funcionamiento es sencillo. Estos cristales líquidos están formados por unas moléculas alargadas con forma de puro, que se llaman moléculas nemáticas y se alinean con una estructura simétrica. En este estado el material es transparente. Un campo eléctrico provoca que las moléculas se desalinien de manera que se vuelven opacas a la luz. De esta manera, aplicando o no aplicando un campo eléctrico (es decir, polarizando o no polarizando), podemos jugar con oscuridad o transparencia respectivamente. Si aplicamos el campo localmente en geometrías iguales al display de 7 segmentos, conseguiremos un display análogo al de los LED´s pero con cristal líquido.

Los LCD son visualizadores pasivos, esto significa que no emiten luz como el visualizador o display alfanumérico hecho a base de un arreglo de LEDs. Es por esa razón que, algunas veces, cuando intentamos ver la hora en un reloj que utiliza esta tecnología, es necesario una fuente de luz adicional. El LCD tiene muy bajo consumo de energía si se lo compara con el display o visualizador alfanumérico y son compatibles con la tecnología CMOS, característica que permite que se utilice en equipos portátiles (ejemplo: los relojes de pulsera, calculadoras, etc.). Tiene una vida aproximada de 50,000 horas. Hay diferentes tipos de presentaciones y son muy fáciles de configurar. Hay desde visualizadores comunes de 7 segmentos, hasta una matriz de puntos, todos ellos muy delgados.

El controlador estándar Hitachi HD44780

Los LCD de texto son los más baratos y simples de utilizar. Solamente permiten visualizar mensajes cortos de texto. Existen algunos modelos estandarizados en la industria, en función de su tamaño medido en número de líneas y columnas de texto. Existen modelos de una, dos y cuatro filas únicamente. El número de columnas típico es de ocho, diesiséis, veinte y cuarenta caracteres. El controlador Hitachi HD44780 se ha convertido en un estándar de industria cuyas especificaciones funcionales son imitadas por la mayoría de los fabricantes. Este controlador cuenta con las siguientes terminales eléctricas:

  • 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. 
  • Vee: 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. 
  • LED+ y LED-: Señales para encender la luz trasera de la pantalla en algunos modelos.

A continuación veremos una tabla con la asignación estándar de pines para displays menores de 80 caracteres:

Pin 

Symbolo

 Nivel  

I/O

Función

1

Vss

-

-

Tierra (GND)

2

Vcc

-

-

+Vcc (+5V)

3

Vee

-

-

Contraste

4

RS

0/1

I

Selección de Registro

0 = Instrucción
1 = Datos

5

R/W

0/1

I

0 = Escribimos Dato
1 = Leemos Dato

6

E

1, 1->0

I

Enable signal

7

DB0

0/1

I/O

Datos (LSB)

8

DB1

0/1

I/O

Datos

9

DB2

0/1

I/O

Datos

10

DB3

0/1

I/O

Datos

11

DB4

0/1

I/O

Datos

12

DB5

0/1

I/O

Datos

13

DB6

0/1

I/O

Datos

14

DB7

0/1

I/O

Datos (MSB)

 

Y  para controlarlo hay que usar la siguiente tabla de instrucciones:

Estos módulos de Cristal Líquido, aparte de tener la función de display, también son una memoria RAM, donde se guardan los caracteres enviados, y leer dichos valores. Aunque no es común que se haga eso. Ahora bien, cada localidad de memoria, es un lugar para desplegar un caracter. Y cada lugar para poner un caracter tiene su dirección de memoria, así como lo muestra la figura siguiente:

Por ejemplo, para posicionar el cursor en la localidad 40h (principio del segundo renglón), hay que ingresar la instrucción Set DD Ram Address con la dirección 40h (Add= 40 = 100 000). Con lo cual tendremos el siguiente byte:

Instrucción RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
Set DD Ram Address 0 0 1 1 0 0 0 0 0 0

 

 

La Inicialización del Display

 

En cuanto nosotros alimentamos el display, vamos a ver que aparece una línea con barritas negras (Ver fotografía). Esto es lo que hace por omisión el display, ya que para hacer uso del display, hay que inicializarlo. Hay que decirle que vamos a utilizar una interfase de 8 bits o de 4 bits (dependiendo el caso), vamos a decirle que incremente el cursor en cuanto se escriba algo, vamos a decirle si queremos que el cursor parpadeé o no, etc.

 

 

Subrutinas para el display de LCD utilizando el microcontrolador AT89C51

;===================================================================
; SUBRUTINAS DEL DISPLAY DE LCD
;===================================================================


;------------------------MUESTRA_MENSAJE_LCD------------------------
; Esta subrutina imprime una barrita en el display de LCD
; UTILIZA: DataPointer
; MODIFICA: Puerto0, Registro 1, Registro 0
;-------------------------------------------------------------------
MUESTRA_MENSAJE_LCD:
clr LCD_En
setb LCD_DI ;Decimos que es dato ;)
mov R0,#010h
mov R1,#0FFh
MUESTRA_MENSAJE_LCD_002:
inc R1
mov Acc,R1
movc A,@A+DPTR
mov P0,Acc
setb LCD_En
call ESPERA_50uS
clr LCD_En
djnz R0,MUESTRA_MENSAJE_LCD_002
RET


;------------------------BAJA_RENGLON_LCD------------------------
; Esta subrutina manda el cursor al inicio del renglón de abajo
; UTILIZA: P0
; MODIFICA: P0
;-------------------------------------------------------------------
BAJA_RENGLON_LCD:
clr LCD_DI
clr LCD_En
mov P0,#0C0h
setb LCD_En
call ESPERA_50uS
clr LCD_En
RET

;------------------------POSICIONA_CURSOR_LCD------------------------
; Esta subrutina manda el cursor auna cordenada dada por el registro7
; UTILIZA: P0
; MODIFICA: P0
;-------------------------------------------------------------------
POSICIONA_CURSOR_LCD:
clr LCD_DI
clr LCD_En
mov P0,R7
setb P0.7
setb LCD_En
call ESPERA_50uS
clr LCD_En
RET

;------------------------IMPRIME_BARRITA_LCD------------------------
; Esta subrutina imprime una barrita en el display de LCD
; UTILIZA: P0
; MODIFICA: P0
;-------------------------------------------------------------------
IMPRIME_BARRITA_LCD:
clr LCD_En
setb LCD_DI ;Decimos que es dato ;)
mov P0,#0FFh
setb LCD_En
call ESPERA_50uS
clr LCD_En
RET


;-----------------------------HOME_LCD------------------------------
; Esta subrutina manda el cursor a inicio
; UTILIZA: P0
; MODIFICA: P0
;-------------------------------------------------------------------
HOME_LCD:
clr LCD_DI
clr LCD_En
call ESPERA_50uS
mov P0,#080h
setb LCD_En
call ESPERA_50uS
clr LCD_En
RET

;----------------------------LIMPIA_LCD-----------------------------
; Esta subrutina limpia el display de LCD y manda el cursor a inicio
; UTILIZA: P0
; MODIFICA: P0
;-------------------------------------------------------------------

LIMPIA_LCD:
clr LCD_En
clr LCD_DI
mov P0,#01h
setb LCD_En
call ESPERA_5mS
clr LCD_En
setb LCD_DI
call ESPERA_5mS
RET


;--------------------------INICIALIZA_LCD---------------------------
; Esta subrutina inicializa el display de LCD
; UTILIZA: P0
; MODIFICA: P0
;-------------------------------------------------------------------

INICIALIZA_LCD:
clr LCD_DI
mov P0,#038h ;Define interfáz de 8 bits, doble línea
call ESPERA_50uS ;y font de 5x8 dots 
clr LCD_En


mov P0,#0Fh ;Enciende el LCD y apaga el cursor
setb LCD_En
call ESPERA_50uS
clr LCD_En

mov P0,#06h ;Especifica el movimiento del cursor 
setb LCD_En ;incrementándose. 
call ESPERA_50uS
clr LCD_En

mov P0,#01h ;Limpia el Display y manda el cursor a
setb LCD_En ;la posición de inicio
call ESPERA_50uS
clr LCD_En

call ESPERA_5mS
call ESPERA_5mS
call ESPERA_5mS
call ESPERA_5mS

setb LCD_DI

RET 

;--------------------------MUESTRA NÚMERO 2dig-----------------------
; Esta subrutina convierte el número binario almacenado en el
; Registro 7 a decimal de dos dígitos (de 0 a 99) y lo muestra
; en el display en donde está el cursor. 
; UTILIZA: Registro 7
; MODIFICA: Puerto 0,Acumulador; Registro B 
;-------------------------------------------------------------------
MUESTRA_NUMERO_2dig:
mov A, R7 ;Convertimos el dato binario a decimal de dos digitos
mov B, #10
div AB
orl A, #30h
orl B, #30h

clr LCD_En
setb LCD_DI ;Mandamos el primer dígito
mov P0,A
setb LCD_En
call ESPERA_50uS
clr LCD_En

clr LCD_En
setb LCD_DI ;Mandamos el segundo dígito
mov P0,B
setb LCD_En
call ESPERA_50uS
clr LCD_En
ret

Bibliografía

El LCD - Display de Cristal Líquido

http://www.unicrom.com/Tut_LCD.asp

LCD

Wikipedia - La enciclopedia libre

http://es.wikipedia.org/wiki/LCD

Crístal Líquido

http://perso.wanadoo.es/chyryes/glosario/cris_liq.htm

http://server-die.alc.upv.es/asignaturas/LSED/2002-03/Sensores_Luz/cristal_liquido.htm

How to control a HD44780-based Character-LCD

http://ouwehand.net/~peter/lcd/lcd.shtml

Hantronix; CHARACTER MODULE INITIALIZATION