25/11/2011
Interfaz PIO con LCD
Interfaz LCD HD44780 con el Z80
Interfaz con uso de Busy Flag
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) 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 (-)
3
Rutina de Inicializacin
Encender LCD Enviar cdigo de INICIO Repetir cdigo de INICIO Repetir cdigo de INICIO Inicializar LCD
Esperar 1.5 ms despus de que Vdd llega a 4.5V
0011XXXX
BF no puede probarse en este punto
Esperar por mas de 4.1 ms
El cdigo de inicio indica que la interfaz se establece a 8 bits
Esperar 100s
Apagar y prender el display
Limpiar pantalla
Establecer modo de Escritura 4
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:
Seleccin de Registro (RS) Escritura/Lectura (R/W) Habilitacin de Reloj (CE)
5
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
6
1. 2. 3.
RS=0: Instruccin, RS=1: Dato R/W=0: Escritura, R/W=1: Lectura CE = 1 habilita, CE = 0, deshabilitado
Seleccin de Registro Escritura Habilita intercambio Envi de datos Deshabilita Intercambio
RS = 0, setup RS = 1, dato
RW = 1
CE = 1
Envi de cdigo ASCII
CE = 0
25/11/2011
Function Set
RS 0 DL N F N 0 0 1 0 R/W 0 D7 0 D6 0 D5 1 D4 DL D3 N D2 F D1 X D0 X D RS 0 R/W 0 D7 0 = 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. F 0 1 X 0 Numero de Lineas 1 1 2 0 0 Tamao del Carcter 57 puntos 510 puntos 57 puntos 1 1 Duty Factor 1/8 1/11 1/8 1 0 0 0 38H
7
Apagar Pantalla
D6 0 D5 0 D4 0 D3 1 D2 D D1 C D0 B = 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 0 0 R/ W 0 0 D7 0 0 D6 0 0 D5 0 0 D4 0 0 D3 1 1 D2 0 1 D1 0 1 D0 0 1 pantalla y cursor apagados Pantalla y cursor encendido y cursor destellando
8
C B
SETUP:
LD A,0FH OUT (CTRLA),A LD A,0FH OUT (CTRLB),A LD A,00110000B
; Configurar el puerto A como SALIDA ; Escribe al registro de control A ; Configurar el puerto B como salida ; Escribe al registro de control B ; cdigo para establecer comunicacin con LCD
Comandos
RS 0 0 R/ W 0 0 D7 0 0 D6 0 0 D5 0 0 D4 0 0 D3 0 0 D2 0 0 D1 0 1 D0 1 X
Limpiar pantalla Regresar el cursor a la primer columna de la pantalla 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.
LD B,A CALL OUTPUT CALL CMDOUT CALL CMDOUT LD A, 00111000B CALL CMDOUT LD A,00001000B CALL CMDOUT LD A,00000001B CALL CMDOUT LD A,00000110B CALL CMDOUT LD A,00001100B CALL CMDOUT
9
; enva el cdigo a LCD ; reenva el cdigo a LCD ; reenva el cdigo a LCD ; establece 8 bits, 2 lneas y 5X7 caracteres
1/D
; apaga pantalla y cursor
;limpia pantalla
; modo de entrada, corre e incrementa cursor
; enciende pantalla y cursor
RET
10
Checa la bandera (BF)
CHKDB7: LD A, 4FH OUT (CNTRLA),A LD A, 00000000B OUT (PORTB),A LD A, 00000100B OUT (PORTB),A READ: LD A, 00000101B OUT (PORTB),A IN A,(PORTA) RLCA LD A, 00000000B OUT (PORTB),A JP C, READ LD A, 0FH OUT (CNTRLA),A RET
11
Escritura de comando en la LCD
CMDOUT: LD B, A CALL CHKDB7 LD A, 00000000B OUT (PORTB),A LD A, 00000000B OUT (PORTB),A LD A, 00000001B OUT (PORTB),A LD A,B OUT (PORTA),A LD A, 00000000B OUT (PORTB),A RET
12
RS = 0 RS = 0, R/W = 1 RS = 0, R/W = 1, CE = 1
OUTPUT:
; RS = 0 ; R/W = 0 ; EN = 1
25/11/2011
Escritura de DATOS en la LCD
DTAOUT: LD B, A CALL CHKDB7 LD A, 00000010B OUT (PORTB),A LD A, 00000010B OUT (PORTB),A LD A, 00000011B OUT (PORTB),A LD A,B OUT (PORTA),A LD A, 00000000B OUT (PORTB),A RET
13
Programa para controlar LCD
PORTA PORTB EQU EQU EQU EQU EQU 80H 81H 82H 83H 1EFEH CTRLA CTRLB STACK MESSAGE
; RS = 1 ; R/W = 0 ; EN = 1
.DEFB 48H,45H,4CH,4CH,4FH,00 .ORG 1850H
START:
LD SP, STACK CALL SETUP LD A,87H CALL CMDOUT LD HL, MESSAGE
14
Programa para controlar LCD
NEXT: LD A,(HL) CP 00 JP Z,END CALL DTAOUT INC HL JP NEXT END HALT
Microprocesadores 2011
INTERFAZ CON USO DE RETARDOS
15
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 PUSH AF WAIT: LOOP: LD DEC LD OR JP DEC JR POP POP RET DE, COUNT DE A,D E NZ,LOOP B NZ,WAIT AF DE
11 ; guarda el contenido de DE y AF 11 10 ; Carga DE =01F2 para obtener el retardo 6 9 4 4 7 10 10
18
;de 10ms ; Coloca D en A para checar banderas ; Prende bandera del cero si D=E=0 ; Decrementa B ; Si el retardo es suficiente termina
10 ; Repite hasta si DE >0
10 ; Restablece el valor de DE y AF
25/11/2011
Retardo
Total de estados-t LT = 40 TC = 0.5s Ttotal = 10ms L0 = 68
3
SETUP:
LD A,0FH OUT (CTRLA),A LD A,0FH OUT (CTRLB),A LD B,10
; Configurar el puerto A como SALIDA ; Escribe al registro de control A ; Configurar el puerto B como salida ; Escribe al registro de control B ; Espera por 0.1 segundos ; Retardo de 10 ms ; cdigo para establecer comunicacin con LCD ; enva el cdigo a LCD ; espera por 10ms ; reenva el cdigo a LCD ;espera por 10ms ; reenva el cdigo a LCD ;espera por 10ms
20
LOOP:
CALL DELAY DJNZ LOOP LD A,00110000B CALL CMDOUT CALL DELAY CALL CMDOUT CALL DELAY CALL CMDOUT CALL DELAY
T L 10 10 68 N10 total 0 498.3 1F 2 TC LT LT 0.5 106 40 40
LD A, 00111000B CALL CMDOUT CALL DELAY LD A,00001000B CALL CMDOUT CALL DELAY LD A,00000001B CALL CMDOUT CALL DELAY LD A,00000110B CALL CMDOUT CALL DELAY LD A,00001100B CALL CMDOUT CALL DELAY RET
; establece 8 bits, 2 lneas y 5X7 caracteres ;espera por 10ms ; apaga pantalla y cursor ;espera por 10ms ;limpia pantalla ;espera por 10ms ; modo de entrada, corre e incrementa cursor ;espera por 10ms ; enciende pantalla y cursor ;espera por 10ms
Escritura de comando en la LCD
CMDOUT: LD B, A LD A, 00000000B OUT (PORTB),A LD A, 00000000B OUT (PORTB),A LD A, 00000001B OUT (PORTB),A LD A,B OUT (PORTA),A LD A, 00000000B OUT (PORTB),A RET
21 22
; RS = 0 comando ; R/W = 0 escribir ; EN = 1 habilitar LCD ; Enviar comando a escribir ; Deshabilitar LCD
Escritura de DATOS en la LCD
DTAOUT: LD B, A LD A, 00000010B OUT (PORTB),A LD A, 00000010B OUT (PORTB),A LD A, 00000011B OUT (PORTB),A LD A,B OUT (PORTA),A LD A, 00000000B OUT (PORTB),A RET
23
Programa para controlar LCD
PORTA PORTB EQU EQU EQU EQU EQU 80H 81H 82H 83H 1EFEH CTRLA CTRLB STACK MESSAGE
; RS = 1 Datos ; R/W = 0 Escribir ; EN = 1 Habilitar LCD
.DEFB 48H,45H,4CH,4CH,4FH,00 .ORG 1850H
; Enviar dato ; Deshabilitar LCD
START:
LD SP, STACK CALL SETUP LD A,87H CALL CMDOUT CALL DELAY LD HL, MESSAGE
; Definir pila ; Inicializar LCD ; Iniciar escritura en la posicin 8
24
25/11/2011
Programa para controlar LCD
NEXT: LD A,(HL) CP 00 JP Z,END CALL DTAOUT CALL DELAY INC HL JP NEXT END HALT ; Enviar carcter a la LCD ; Esperar 10 ms ; Apuntar al siguiente carcter ; Tomar el siguiente carcter ; Verificar si es el fin de la cadena
25