Interfaz LCD HD44780 con el Z80
Interfaz con uso de Busy Flag
Interfaz PIO con LCD
Interfaz 8255 conLCD
Configuracin de Terminales
1.
2.
3.
4.
Ground
VCC (+3.3 to +5V)
Contrast adjustment (VO)
Register Select (RS). RS=0:
Command, RS=1: Data
5. Read/Write (R/W). R/W=0:
Write, R/W=1: Read
6. Clock (Enable). Falling edge
triggered
7. Bit 0 (Not used in 4-bit operation)
8. Bit 1 (Not used in 4-bit operation)
9. Bit 2 (Not used in 4-bit operation)
[Link] 3 (Not used in 4-bit operation)
[Link] 4
[Link] 5
[Link] 6
[Link] 7
[Link] Anode (+)
[Link] Cathode (-)
4
Rutina de Inicializacin
Encender
LCD
Esperar 1.5 ms
despus de que
Vdd llega a 4.5V
Enviar
cdigo de
INICIO
0011XXXX
Repetir
cdigo de
INICIO
Esperar por mas
de 4.1 ms
Repetir
cdigo de
INICIO
El cdigo de
inicio indica que
la interfaz se
establece a 8 bits
Esperar 100s
Inicializar
LCD
Apagar y prender
el display
Limpiar pantalla
BF no puede
probarse en este
punto
Establecer modo
de Escritura
5
Comunicndose con LCD
LCD tiene un bus de
datos de 8 bits (pin 714) por el cual se
transfiere el cdigo
ASCII a escribirse
Se utilizan 3 seales de
control:
1.
2.
3.
Seleccin de Registro
(RS)
Escritura/Lectura (R/W)
Habilitacin de Reloj (CE)
6
RS=0: Instruccin, RS=1: Dato
R/W=0: Escritura, R/W=1: Lectura
CE = 1 habilita, CE = 0, deshabilitado
Seleccin
de Registro
RS = 0,
setup
Escritura
RW = 1
Habilita
intercambio
CE = 1
Envi de
datos
Envi de
cdigo ASCII
Deshabilita
Intercambio
CE = 0
RS = 1, dato
LCD HD44780
Rutina de inicializacin
Escribir el cdigo 0011XXXX
Checar BF, cuando este en bajo enviar nuevamente el
cdigo 0011XXXX
Checar BF, cuando este en bajo enviar nuevamente el
cdigo 0011XXXX
Establecer el tipo de funcionalidad del LCD
Apagar el cursor y la pantalla
Limpiar la pantalla
Establecer el modo de entrada
Encender el cursor y pantalla
7
Function Set
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
DL
DL
= 1, Los datos son enviados en 8 bits
= 0; Los datos son enviados en 4 bits, dos lecturas por cada carcter
Establece el numero de lneas de la pantalla
Establece el tamao del carcter.
Numero de
Lineas
Tamao del
Carcter
Duty
Factor
57 puntos
1/8
510 puntos
1/11
57 puntos
1/8
38H
8
Apagar Pantalla
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
= 1, Pantalla Encendida
= 0; Pantalla Apagada, los datos permanecen en la RAM interna para
desplegarse en cuanto la pantalla se encienda
=1, despliega el cursor, = 0, apaga el cursor
=1, el cursos destella, = 0, el cursor permanece encendido todo el tiempo
RS
R/
W
D7
D6
D5
D4
D3
D2
D1
D0
pantalla y cursor
apagados
Pantalla y cursor
encendido y
cursor destellando
Comandos
RS
R/
W
D7
D6
D5
D4
D3
D2
D1
D0
Limpiar pantalla
Regresar el cursor a la primer
columna de la pantalla
1/D
1/D=1 incrementa la posicin del
cursor hacia la derecha
1/D = 0 decrementa la posicin del
cursor hacia la izquierda
S = 1 mueve todo el display hacia la
derecha si I/D = 1 o hacia la
izquierda si I/D = 0.
10
SETUP:
LD A,0FH
; Configurar el puerto A como SALIDA
OUT (CTRLA),A
; Escribe al registro de control A
LD A,0FH
; Configurar el puerto B como salida
OUT (CTRLB),A
; Escribe al registro de control B
LD A,00110000B
; cdigo para establecer comunicacin con LCD
LD B,A
CALL OUTPUT
; enva el cdigo a LCD
CALL CMDOUT
; reenva el cdigo a LCD
CALL CMDOUT
; reenva el cdigo a LCD
LD A, 00111000B
; establece 8 bits, 2 lneas y 5X7 caracteres
CALL CMDOUT
LD A,00001000B
; apaga pantalla y cursor
CALL CMDOUT
LD A,00000001B
;limpia pantalla
CALL CMDOUT
LD A,00000110B
; modo de entrada, corre e incrementa cursor
CALL CMDOUT
LD A,00001100B
; enciende pantalla y cursor
CALL CMDOUT
RET
11
Checa la bandera (BF)
CHKDB7:
LD A, 4FH
OUT (CNTRLA),A
LD A, 00000000B
RS = 0
OUT (PORTB),A
LD A, 00000100B
RS = 0, R/W = 1
OUT (PORTB),A
READ:
LD A, 00000101B
RS = 0, R/W = 1, CE = 1
OUT (PORTB),A
IN A,(PORTA)
RLCA
LD A, 00000000B
OUT (PORTB),A
JP C, READ
LD A, 0FH
OUT (CNTRLA),A
RET
12
Escritura de comando en la LCD
CMDOUT:
LD B, A
CALL CHKDB7
OUTPUT:
LD A, 00000000B
; RS = 0
OUT (PORTB),A
LD A, 00000000B
; R/W = 0
OUT (PORTB),A
LD A, 00000001B
; EN = 1
OUT (PORTB),A
LD A,B
OUT (PORTA),A
LD A, 00000000B
OUT (PORTB),A
RET
13
Escritura de DATOS en la LCD
DTAOUT:
LD B, A
CALL CHKDB7
LD A, 00000010B
; RS = 1
OUT (PORTB),A
LD A, 00000010B
; R/W = 0
OUT (PORTB),A
LD A, 00000011B
; EN = 1
OUT (PORTB),A
LD A,B
OUT (PORTA),A
LD A, 00000000B
OUT (PORTB),A
RET
14
Programa para controlar LCD
MESSAGE
PORTA
EQU
80H
PORTB
EQU
81H
CTRLA
EQU
82H
CTRLB
EQU
83H
STACK
EQU
1EFEH
.DEFB 48H,45H,4CH,4CH,4FH,00
.ORG 1850H
START:
LD SP, STACK
CALL SETUP
LD A,87H
CALL CMDOUT
LD HL, MESSAGE
15
Programa para controlar LCD
NEXT:
LD A,(HL)
CP 00
JP Z,END
CALL DTAOUT
INC HL
JP NEXT
END
HALT
16
Microprocesadores 2011
INTERFAZ CON USO DE RETARDOS
Subrutina Retardo
DELAY:
; Esta subrutina realiza un retardo de 10 ms. El retardo es repetido el
; numero de veces indicado en B.
; Entrada: Numero de veces a repetir el retardo especificado en B
; Salida: Ninguna
; Registros Modificados: B
PUSH DE
11 ; guarda el contenido de DE y AF
PUSH AF
11
WAIT:
LD
DE, COUNT
10 ; Carga DE =01F2 para obtener el retardo
LOOP:
DEC
DE
;de 10ms
LD
A,D
; Coloca D en A para checar banderas
OR
; Prende bandera del cero si D=E=0
JP
NZ,LOOP
10 ; Repite hasta si DE >0
DEC
; Decrementa B
JR
NZ,WAIT
; Si el retardo es suficiente termina
POP
AF
10 ; Restablece el valor de DE y AF
POP
DE
10
RET
10
19
Retardo
Total de estados-t
LT = 40
TC = 0.5s
Ttotal = 10ms
L0 = 68
3
Ttotal
L0
10 10
68
N10
498.3 1F 2
6
TC LT LT 0.5 10 40 40
SETUP:
LOOP:
LD A,0FH
; Configurar el puerto A como SALIDA
OUT (CTRLA),A
; Escribe al registro de control A
LD A,0FH
; Configurar el puerto B como salida
OUT (CTRLB),A
; Escribe al registro de control B
LD B,10
; Espera por 0.1 segundos
CALL DELAY
; Retardo de 10 ms
DJNZ LOOP
LD A,00110000B
; cdigo para establecer comunicacin con LCD
CALL CMDOUT
; enva el cdigo a LCD
CALL DELAY
; espera por 10ms
CALL CMDOUT
; reenva el cdigo a LCD
CALL DELAY
;espera por 10ms
CALL CMDOUT
; reenva el cdigo a LCD
CALL DELAY
;espera por 10ms
21
LD A, 00111000B
; establece 8 bits, 2 lneas y 5X7 caracteres
CALL CMDOUT
CALL DELAY
;espera por 10ms
LD A,00001000B
; apaga pantalla y cursor
CALL CMDOUT
CALL DELAY
;espera por 10ms
LD A,00000001B
;limpia pantalla
CALL CMDOUT
CALL DELAY
;espera por 10ms
LD A,00000110B
; modo de entrada, corre e incrementa cursor
CALL CMDOUT
CALL DELAY
;espera por 10ms
LD A,00001100B
; enciende pantalla y cursor
CALL CMDOUT
CALL DELAY
;espera por 10ms
RET
22
Escritura de comando en la LCD
CMDOUT:
LD B, A
LD A, 00000000B
; RS = 0 comando
OUT (PORTB),A
LD A, 00000000B
; R/W = 0 escribir
OUT (PORTB),A
LD A, 00000001B
; EN = 1 habilitar LCD
OUT (PORTB),A
LD A,B
; Enviar comando a escribir
OUT (PORTA),A
LD A, 00000000B
; Deshabilitar LCD
OUT (PORTB),A
RET
23
Escritura de DATOS en la LCD
DTAOUT:
LD B, A
LD A, 00000010B
; RS = 1 Datos
OUT (PORTB),A
LD A, 00000010B
; R/W = 0 Escribir
OUT (PORTB),A
LD A, 00000011B
; EN = 1 Habilitar LCD
OUT (PORTB),A
LD A,B
; Enviar dato
OUT (PORTA),A
LD A, 00000000B
; Deshabilitar LCD
OUT (PORTB),A
RET
24
Programa para controlar LCD
MESSAGE
PORTA
EQU
80H
PORTB
EQU
81H
CTRLA
EQU
82H
CTRLB
EQU
83H
STACK
EQU
1EFEH
.DEFB 48H,45H,4CH,4CH,4FH,00
.ORG 1850H
START:
LD SP, STACK
; Definir pila
CALL SETUP
; Inicializar LCD
LD A,87H
; Iniciar escritura en la posicin 8
CALL CMDOUT
CALL DELAY
LD HL, MESSAGE
25
Programa para controlar LCD
NEXT:
LD A,(HL)
; Tomar el siguiente carcter
CP 00
; Verificar si es el fin de la cadena
JP Z,END
CALL DTAOUT
; Enviar carcter a la LCD
CALL DELAY
; Esperar 10 ms
INC HL
; Apuntar al siguiente carcter
JP NEXT
END
HALT
26