Fecha de publicación: Apr 27, 2013 9:1:52 PM
Un LCD es una pantalla con matriz de puntos, un dispositivo de visualizacion utilizado para mostrar informacion con una resolucion minima y que responde a la mayoria de caracteres ASCII.
Existen de varios tamaños uno de los mas comunes y el que usaremos en esta pagina sera el de 16x02 es decir 16 columnas por 2 filas, en esta imagen se muestra un LCD de 20x02.
Existe un bus de datos paralelo de 8 pines desde DB0 a DB7, un pin que habilita el LCD denominado "E" Enable, un pin para el control de lectura y escritura "R/W", y un Selector de Registro "RS" ya que se posee varios registros para el control del LCD, para el control del contraste con el que se muestra la pantalla esta "VE" Voltage de contraste que por lo general se conecta a un potenciometro con la finalidad de controlar el contraste del LCD dicho Potenciometro tendra entre sus bornes Vcc y Gnd conectadoa a Vdd y VSS respectivamente, pues estos alimentan al LCD.
Los LCD pueden ser controlados de dos maneras utilizando todo el bus de datos los 8 Bit's o utilizando solo la mitad es decir 4 Bits, en esta clace veremos la utilizacion de en modo 8 Bit's.
Con tal proposito los display LCD cuentan con un diagrama para la inicializaion en cada uno de los modos, aqui el grafico del diagrama de flujo de 8 Bit's.
Una vez inicializado el LCD en modo de 8 Bit's para este ejemplo veremos que el LCd posee varios comandos para utilizar el LCD e aqui un listado de ellos
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; 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
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; configuracion de pines
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
rs equ p2.0
rw equ p2.1
e equ p2.2
dat equ p0
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; P R O G R A M A P R I N C I P A L
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
org 0000h
setear:
call iniciar_lcd
mov dptr,#lcd1
call send_lcd
call new_line
mov dptr,#lcd2
call send_lcd
repetir:
jnb p3.0, men1
jnb p3.1, men2
ajmp repetir
men1:
call lcd_home
mov dptr,#L1
call send_lcd
call new_line
mov dptr,#L2
call send_lcd
ajmp repetir
men2:
call lcd_home
mov dptr,#L11
call send_lcd
call new_line
mov dptr,#L22
call send_lcd
ajmp repetir
; - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - -
iniciar_lcd:
; - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - -
mov a,#60d
call w_set
mov a,#14d
call w_set
mov a,#1d
call w_set
mov a,#6d
call w_set
ret
; - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - -
new_line:
; - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - -
mov a,#192d
call w_set
ret
; - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - -
lcd_home:
; - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - -
mov a,#02d
call w_set
ret
; - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - -
send_lcd:
; - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - -
mov r0,#0d
send:
mov a,r0
inc r0
movc a,@a+dptr
call w_dat
cjne r0,#16,send
ret
; - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - -
w_set:
; con rs = 0 para config
; - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - -
clr e
clr rs
clr rw
call sleep
setb e
call sleep
mov dat,a
call sleep
clr e
call sleep
ret
; - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - -
w_dat:
; rs = 1 datos
; - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - -
clr e
setb rs
clr rw
call sleep
setb e
call sleep
mov dat,a
call sleep
clr e
call sleep
ret
; - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - -
write_lcd:
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
clr e
mov rs,c ; reg datos (1) control (0)
clr rw
setb e
mov dat,a
clr e
acall delay
ret
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
read_lcd:
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
clr e
mov rs,c ; q reg?
setb rw
setb e
mov dat,a
clr e
acall delay
ret
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
delay:
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cpl p1.0
mov r6,#08h
buc1: mov r7,#0ffh
buc0: djnz r7,buc0
djnz r6,buc0
ret
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sleep:
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
mov r5,#055d
buc: djnz r5,buc
ret
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; mensajes de tamaño 16
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LCD1:
db ' RaulAlejandroQL'
LCD2:
db ' Curso uC 8051 '
L1:
db ' - Hola Mundo - '
L2:
db ' Practica 06 '
L11:
db ' Assembler 8051 '
L22:
db ' Aprender de 0 '
end