Upload
jhony-alvarez
View
23
Download
0
Embed Size (px)
Citation preview
25/11/2011
1
Interfaz LCD HD44780 con el Z80
Interfaz con uso de Busy Flag
Interfaz PIO con LCD
2
Configuración de Terminales
1. Ground
2. VCC (+3.3 to +5V)
3. Contrast adjustment (VO)
4. 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 Inicialización
Encender LCD
Esperar 1.5 ms después de que Vdd llega a 4.5V
Enviar código de
INICIO 0011XXXX
BF no puede probarse en este
punto
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 100s
Inicializar LCD
Apagar y prender el display
Limpiar pantalla Establecer modo
de Escritura
4
Comunicándose con LCD
• LCD tiene un bus de datos de 8 bits (pin 7-14) por el cual se transfiere el código ASCII a escribirse
• Se utilizan 3 señales de control: – Selección de Registro
(RS)
– Escritura/Lectura (R/W)
– Habilitación de Reloj (CE)
Selección de Registro
RS = 0, setup
RS = 1, dato
Escritura RW = 1
Habilita intercambio
CE = 1
Envió de datos
Envió de código ASCII
Deshabilita Intercambio
CE = 0
5
1. RS=0: Instrucción, RS=1: Dato 2. R/W=0: Escritura, R/W=1: Lectura 3. CE = 1 habilita, CE = 0, deshabilitado
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
6
25/11/2011
2
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.
7
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
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
8
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
0 0 0 0 0 0 1 1 1 1 Pantalla y cursor encendido y cursor destellando
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.
9 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
Checa la bandera (BF)
11
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
Escritura de comando en la LCD
12
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
25/11/2011
3
Escritura de DATOS en la LCD
13
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
Programa para controlar LCD PORTA EQU 80H
PORTB EQU 81H
CTRLA EQU 82H
CTRLB EQU 83H
STACK EQU 1EFEH
MESSAGE .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
15
INTERFAZ CON USO DE RETARDOS Microprocesadores 2011
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 18
25/11/2011
4
Retardo
• Total de estados-t
• LT = 40
• TC = 0.5s
• Ttotal = 10ms
• L0 = 68
213.49840
68
40105.0
10106
3
010 F
L
L
LT
TN
TTC
total
20
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 B,10 ; Espera por 0.1 segundos
LOOP: 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
Escritura de comando en la LCD
22
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
Escritura de DATOS en la LCD
23
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
Programa para controlar LCD PORTA EQU 80H
PORTB EQU 81H
CTRLA EQU 82H
CTRLB EQU 83H
STACK EQU 1EFEH
MESSAGE .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
24
25/11/2011
5
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
25