Interfaz LCD HD44780 con el Z80

Anuncio
Interfaz LCD HD44780 con el Z80
Interfaz con uso de Busy Flag
Interfaz PIO con LCD
2
Interfaz 8255 conLCD
Configuración 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)
10.Bit 3 (Not used in 4-bit operation)
11.Bit 4
12.Bit 5
13.Bit 6
14.Bit 7
15.Backlight Anode (+)
16.Backlight Cathode (-)
4
Rutina de Inicialización
Encender
LCD
Esperar 1.5 ms
después de que
Vdd llega a 4.5V
Enviar
código de
INICIO
0011XXXX
Repetir
código de
INICIO
Esperar por mas
de 4.1 ms
Repetir
código de
INICIO
El código de
inicio indica que
la interfaz se
establece a 8 bits
Esperar 100s
Inicializar
LCD
Apagar y prender
el display
Limpiar pantalla
BF no puede
probarse en este
punto
Establecer modo
de Escritura
5
Comunicándose con LCD
• LCD tiene un bus de
datos de 8 bits (pin 714) por el cual se
transfiere el código
ASCII a escribirse
• Se utilizan 3 señales de
control:
1.
2.
3.
– Selección de Registro
(RS)
– Escritura/Lectura (R/W)
– Habilitación de Reloj (CE)
6
RS=0: Instrucción, RS=1: Dato
R/W=0: Escritura, R/W=1: Lectura
CE = 1 habilita, CE = 0, deshabilitado
Selección
de Registro
RS = 0,
setup
Escritura
RW = 1
Habilita
intercambio
CE = 1
Envió de
datos
Envió de
código ASCII
Deshabilita
Intercambio
CE = 0
RS = 1, dato
LCD HD44780
• Rutina de inicialización
– Escribir el código 0011XXXX
– Checar BF, cuando este en bajo enviar nuevamente el
código 0011XXXX
– Checar BF, cuando este en bajo enviar nuevamente el
código 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
0
0
0
0
1
DL
N
F
X
X
DL
= 1, Los datos son enviados en 8 bits
= 0; Los datos son enviados en 4 bits, dos lecturas por cada carácter
N
Establece el numero de líneas de la pantalla
F
Establece el tamaño del carácter.
N
F
Numero de
Lineas
Tamaño del
Carácter
Duty
Factor
0
0
1
5×7 puntos
1/8
0
1
1
5×10 puntos
1/11
1
X
2
5×7 puntos
1/8
0
0
0
0
1
1
1
0
0
0
38H
8
Apagar Pantalla
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
0
0
1
D
C
B
D
= 1, Pantalla Encendida
= 0; Pantalla Apagada, los datos permanecen en la RAM interna para
desplegarse en cuanto la pantalla se encienda
C
=1, despliega el cursor, = 0, apaga el cursor
B
=1, el cursos destella, = 0, el cursor permanece encendido todo el tiempo
RS
R/
W
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
0
0
1
0
0
0
pantalla y cursor
apagados
1
Pantalla y cursor
encendido y
cursor destellando
0
0
0
0
0
0
1
1
1
9
Comandos
RS
R/
W
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
0
0
0
0
0
1
Limpiar pantalla
0
0
0
0
0
0
0
0
1
X
Regresar el cursor a la primer
columna de la pantalla
0
0
0
0
0
0
0
1
1/D
S
1/D=1 incrementa la posición del
cursor hacia la derecha
1/D = 0 decrementa la posición 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
; código para establecer comunicación con LCD
LD B,A
CALL OUTPUT
; envía el código a LCD
CALL CMDOUT
; reenvía el código a LCD
CALL CMDOUT
; reenvía el código a LCD
LD A, 00111000B
; establece 8 bits, 2 líneas 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
6
;de 10ms
LD
A,D
9
; Coloca D en A para checar banderas
OR
E
4
; Prende bandera del cero si D=E=0
JP
NZ,LOOP
10 ; Repite hasta si DE >0
DEC
B
4
; Decrementa B
JR
NZ,WAIT
7
; 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.5s
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
; código para establecer comunicación con LCD
CALL CMDOUT
; envía el código a LCD
CALL DELAY
; espera por 10ms
CALL CMDOUT
; reenvía el código a LCD
CALL DELAY
;espera por 10ms
CALL CMDOUT
; reenvía el código a LCD
CALL DELAY
;espera por 10ms
21
LD A, 00111000B
; establece 8 bits, 2 líneas 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 posición 8
CALL CMDOUT
CALL DELAY
LD HL, MESSAGE
25
Programa para controlar LCD
NEXT:
LD A,(HL)
; Tomar el siguiente carácter
CP 00
; Verificar si es el fin de la cadena
JP Z,END
CALL DTAOUT
; Enviar carácter a la LCD
CALL DELAY
; Esperar 10 ms
INC HL
; Apuntar al siguiente carcter
JP NEXT
END
HALT
26
Descargar