5
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

LCD Z80 LCD

Embed Size (px)

Citation preview

Page 1: LCD Z80   LCD

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

Page 2: LCD Z80   LCD

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

Page 3: LCD Z80   LCD

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

Page 4: LCD Z80   LCD

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

Page 5: LCD Z80   LCD

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