Fecha de publicación: May 02, 2013 2:0:4 AM
Un LCD es un dispositivo de visualisacion que puede desplagar informacion grafica y en modo de texto cubriendo el codigo ASCII, es decir los caracteres numericos y alfanumericos necesarios para una desplegar informacion comprensible, existen tanto con comunicacion serial como con comunicacion paralela.
Existen LCD's de distintos tamaños, pudiendo ser distinguidos por esa caracteristica, varian en el tamaño por el numero de filas y columnas, existen aquellos q poseen solo 1 fila hasta 4 filas las columnas tambien varian en tamaño, para nuestros ejemplos utilizaremos el LCD de tamaño mas comun el 16x02 16 Columnas y 2 Filas.
Aca se muestra los pines de un LCD y la descripcion de pines en forma fisica
Los pines que se muestran en la siguiente figura, son conectados a un potenciometro con el cual se controla el contraste de la pantalla LCD, ajustando manualmente la claridad de la informacion en pantalla
Tambien los LCD poseen en algunos casos una retroiluminacion, esto en algunos casos, esta retroiluminacion puede ser de sitintos colores como verde blanco amarillo azul, etc. La alimentacion para la retroiluminacion es a travez de los pines denominaros A y K que representan el Anodo y Katodo es recomendable alimentar estos pines con una resistencia de proteccion para no quemar la retroiluminacion de su LCD si este lo posee.
Los LCD's tiene dos modos de trabajo, uno donde se utiliza los 8 pines del bus de datos para el envio y recepcion de informacion y comandos y otro donde solo se utilizan 4 pines, en esta clace utilizaremos el modo de 4 bit's, En el modo de 4 bits se ahorra la cantidad de pines necesarios para controlar el LCD lo cual es conveniente en caso de que se requiera utilzar con microcontroladores mas pequeños que no tengan muchos recursos pero que sean mas economicos y suficientes para el proposito del diseñador.
Para todo el desarrrollo de nuestra practica vamos a utilizar la hoja de especificaicion tecnica para poder utilizar la informacion que el fabricante nos ofrece para el control de su LCD.
Una vez comprendido que es y para que sirve el LCD y conociendo sus pines y sus propositos nos queda armar un circuito para el control del mismo, el cual sera el siguiente:
Y deacuerdo a nuestras conecciones vamos a definir los pines que vamos a utilizar y a darles el proposito a cada uno. Esto a travez del siguiente codigo:
datos equ P0
RS equ P2.0
RW equ P2.1
EN equ P2.2
Para empezar a enviar informacion o leerla del LCD necesitamos saber el Diagrama de tiempos que nos permite ejecutar las opciones de Lectura y Escritura "R/W" para lo cual nos basaremos en el diagrama de tiempos de la hoja de especificacion tecnica.
Como nota practicamente en la mayoria de los casos solo enviaremos informacion no leeremos la informacion del LCD. asi q se puede obviar el pin R/W colocandolo a tierra.
El LCD requiere que se le indique cuando el dato es solamente un dato o cuando es un comando, para lo cual utiliza la linea RS la cual le indica que tipo de informacion es la que recibe una instruccion o un dato.
Para utilizar el modo de 4 bit's , este trozo de programa separa el dato del acumulador "a" de 8 bits en dos datos de 4 bits guardados en el acumulador "a" y "b" respectivamente.
; - - - - - - - - - - - - - - - - - -
separador:
mov b,a
anl b,#0f0h
swap a
anl a,#0f0h
ret
Posteriormente se pueden enviar los datos al LCD con las siguientes lineas de codigo:
; - - - - - - - - - - - - - - - - - -
send_LCD:
mov datos,b
setb EN
acall delay
clr EN
acall delay
mov datos,a
setb EN
acall delay
clr EN
acall delay
ret
donde delay es un retardo necesario para q el LCD procese la informacion.
Con los dos primeros codigos podemos escribir el siguiente:
; - - - - - - - - - - - - - - - - - -
lcd_data:
setb RS
acall separador
acall send_LCD
ret
De la misma forma enviar un comando al LCD
; - - - - - - - - - - - - - - - - - -
lcd_cmd:
clr RS
acall separador
acall send_LCD
ret
Para enviar la informacion en modo de cuatro bit's, primero se envia la informacion del bit alto luego la informacion del bit mas bajo, es decir se envia primero el nible alto y luego el nible bajo.
Para empezar a utilizar el LCD lo pirmero que se requiere es inicializarlos para lo cualializar el LCD vamos a acatar ciegamente las instruccion que nos da el fabricante mas generico de estos LCD, que es totalmente compatible entre marcas asi que no se preocupe por la marca.
; - - - - - - - - - - - - - - - - - -
init:
acall delay
acall delay
mov datos,#20h
clr RS
setb EN
acall delay
clr EN
mov a,#28H
acall lcd_cmd
mov a,#0ch
acall lcd_cmd
mov a,#06h
acall lcd_cmd
mov a,#01h
ret
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Practica 08 CONTROL DE LCD 16 x 02
; Por:
; Raul Alejandro QL
; La Paz - Bolivia
; WWW:
; https://sites.google.com/site/cursodemicrocontroladores8051
; Facebok:
; http://www.facebook.com/LicRaulAlejandroQL
; Youtube:
; http://www.youtube.com/user/raulalejandroql
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
datos equ P0
RS equ P2.0
RW equ P2.1
EN equ P2.2
; - - - - - - - - - - - - - - - - - -
; Programa Principal
ORG 0000h
; condiciones iniciales
setb RS
setb EN
; no necesario se puede poner a GND
clr RW
; iniciar el LCD modo 4 Bit's
acall init
; cargar mensaje y enviar
mov dptr,#txta
acall lcd_mensaje
; enviara comando para 2da linea
mov a,#0c0H
acall lcd_cmd
; cargar mensaje y enviar
mov dptr,#txtb
acall lcd_mensaje
; bucle infinito para detener programa
ajmp $
; - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - -
lcd_mensaje:
; - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - -
mov r0,#0d
send:
mov a,r0
inc r0
movc a,@a+dptr
call lcd_data
cjne r0,#16,send
ret
; - - - - - - - - - - - - - - - - - -
send_LCD:
mov datos,b
setb EN
acall delay
clr en
acall delay
mov datos,a
setb EN
acall delay
clr en
acall delay
ret
; - - - - - - - - - - - - - - - - - -
separador:
mov b,a
anl b,#0f0h
swap a
anl a,#0f0h
ret
; - - - - - - - - - - - - - - - - - -
lcd_cmd:
clr RS
acall separador
acall send_LCD
ret
; - - - - - - - - - - - - - - - - - -
lcd_data:
setb RS
acall separador
acall send_LCD
ret
; - - - - - - - - - - - - - - - - - -
init:
acall delay
acall delay
mov datos,#20h
clr RS
setb EN
acall delay
clr EN
mov a,#28H
acall lcd_cmd
mov a,#0ch
acall lcd_cmd
mov a,#06h
acall lcd_cmd
mov a,#01h
ret
; - - - - - - - - - - - - - - - - - -
delay:
MOV R6, #10H
L2: MOV R7,#0FH
L1: DJNZ R7, L1
DJNZ R6, L2
RET
; - - - - - - - - - - - - - - - - - -
txta:
db 'Curso de uC 8051'
txtb:
db '"LCD 4 Bit mode"'
end