1. EPN SISTEMAS MICROPROCESADOS DETRI
DISPLAY GRÁFICO DE CRISTAL LÍQUIDO
DE 128 x 64 PIXELES
Organización en el GLCD: la información para controlar los pixels
se almacena en la RAM del controlador del GLCD y está organizada
para manejar la matriz de 128 columnas de 64 filas.
Ing. Jaime Velarde Página Nº1 Diciembre 2011
2. EPN SISTEMAS MICROPROCESADOS DETRI
Manejo independientemente en dos secciones: dentro del GLCD
existen dos circuitos independientes que controlan los pixels, donde
están organizados en 64 columnas de 64 filas. Para acceder a la
información se escoge por hardware mediante la entrada de selección
CS1 para los pixels de la matriz de la izquierda y CS2 para los de la
matriz de la derecha.
Especificación de las columnas: la columna de pixels se especifica
dentro de cada sección entre 0 y 63 mediante la “Dirección Y”, que se
almacena en un contador de seis bits; el cual, que se incrementa
automáticamente cada vez que se escribe o se lee el dato de la
sección. Para inicializar el contador existe el Comando de Poner la
Dirección.
Especificación de la página: las filas se agrupan de 8 en 8
denominadas páginas; por lo tanto, para las 64 filas existen 8
páginas numeradas de 0 a 7, que se escogen mediante el contenido
Ing. Jaime Velarde Página Nº2 Diciembre 2011
3. EPN SISTEMAS MICROPROCESADOS DETRI
del Registro X dentro de cada sección del GLCD. Para inicializar el
registro existe el Comando de Poner la Página.
Ubicación del dato: la información de los pixels no se escribe ni se
lee individualmente sino de ocho en ocho, es decir por bytes; por eso,
para acceder a un dato se debe especificar la sección por hardware,
mientras la dirección y la página por software.
Organización de la RAM
en el controlador del
GLCD: la memoria para
controlar los pixels del
GLCD está formada por
1024 bytes, que necesitan
la especificación de la
sección, de la página y de
la columna para poder
acceder.
Ing. Jaime Velarde Página Nº3 Diciembre 2011
4. EPN SISTEMAS MICROPROCESADOS DETRI
DISTRIBUCIÓN DE LOS TERMINALES
DEL GLCD Y SU FUNCIÓN
TERMINALES 1 2 3 4 5 6 7 8 9 10
VSS VDD VO D/I R/W E DB0 DB1 DB2 DB3
GLCD 11 12 13 14 15 16 17 18 19 20
DB4 DB5 BD6 BD7 CS1 CS2 RST Vout BLA BLK
POLARIZACIÓN: Vss y VDD
DATOS: DB0 – DB7
CONTROL: D/I, R/W, E
SELECCIÓN: CS1, CS2
RESET: RST
CONTRASTE: VO
VOLTAJE NEGATIVO: Vout
LUZ POSTERIOR: BLA, BLK
COMANDOS DEL LCD GRÁFICO
Los comandos o instrucciones para las secciones del GLCD se
ejecutan colocando en los terminales los valores que se indican en la
tabla que se encuentra a continuación y produciendo un pulso
completo en el terminal de E de Habilitación.
Ing. Jaime Velarde Página Nº4 Diciembre 2011
5. EPN SISTEMAS MICROPROCESADOS DETRI
ESCRITURA DE DATOS O COMANDOS EN EL GLCD
DESCRIPCIÓN DE LOS COMANDOS
Sección del display encendida – apagada: no afecta al estado de
la RAM interna, L = apagada, H = encendida.
COMANDO R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
Display On/Off L L L L H H H H H L/H
Ing. Jaime Velarde Página Nº5 Diciembre 2011
6. EPN SISTEMAS MICROPROCESADOS DETRI
Poner la Dirección: almacena la direcciones Y en el contador.
COMANDO R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
Set Address L L L H Dirección Y (0 - 63)
Poner la Página: almacena la página en el registro X.
COMANDO R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
Set Page L L H L H H H Page (0 - 7)
Fila de inicio del display: indica el dato de la RAM que aparece en
la parte superior de la sección.
COMANDO R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
Display Start Line L L H H Dirección Y (0 - 63)
Leer el Estado: información del estado de la sección del display.
BUSY = 1 trabajando BUSY = 0 listo
ON/OFF = 1 apagado ON/OFF = 0 encendido
RESET = 1 activado RESET = 0 desactivado
COMANDO R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
Status Read H L Busy L OnOff Reset L L L L
Escribir un Dato: escribe el dato en la RAM de la sección, luego se
incrementa automáticamente el contador de direcciones.
COMANDO R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
Write Display Data L H Dato que se escribe
Leer un Dato: lee el dato desde la RAM de la sección.
COMANDO R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
Read Display Data H H Dato que se lee
PROGRAMA PARA COMPROBAR EL
FUNCIONAMIENTO DEL GLCD
El siguiente programa dibuja líneas horizontales, una cuadrícula y un
gráfico en el GLCD, utilizando las siguientes subrutinas:
RSTGLCD: configura los pórticos para la comunicación con el GLCD,
establece a la fila 0 como la superior y enciende las secciones.
WCMDI, WCMDD: escritura de un comando en la sección izquierda
y en la sección derecha.
WDATI, WDATD: escritura de un dato en la sección izquierda y en
la sección derecha.
WSCRN: escritura de 1024 datos para dibujar toda la pantalla.
Ing. Jaime Velarde Página Nº6 Diciembre 2011
7. EPN SISTEMAS MICROPROCESADOS DETRI
CIRCUITO DE PRUEBA DEL GLCD
Nota: la distribución de los terminales del GLCD en el Proteus no
corresponde al que se consigue en los almacenes de componentes.
; PROGRAMA CON SUBRUTINAS PARA MANEJO DEL DISPLAY LCD GRÁFICO 128x64
.NOLIST
.INCLUDE "m164pdef.inc"
.LIST
; DEFINICIÓN DE ETIQUETAS PARA LOS REGISTROS
.DEF AUX1 = R16 ; REGISTRO AUXILIAR1
.DEF AUX2 = R17 ; REGISTRO AUXILIAR2
.DEF AUX3 = R18 ; REGISTRO AUXILIAR3
; SEGMENTO DE PROGRAMA o MEMORIA FLASH
.CSEG
; INICIALIZACIÓN DEL STACK Y DE LOS PÓRTICOS
PROGP: LDI AUX1,LOW(RAMEND)
OUT SPL,AUX1
LDI AUX1,HIGH(RAMEND)
OUT SPH,AUX1
; PARA INICIALIZAR EL LCD GRÁFICO
REPITA: RCALL RSTGLCD
; PARA DIBUJAR LÍNEAS HORIZONTALES
LDI AUX2,0xB8
LAZO: MOV AUX1,AUX2
RCALL WCMDI
RCALL WCMDD
;
Ing. Jaime Velarde Página Nº7 Diciembre 2011
8. EPN SISTEMAS MICROPROCESADOS DETRI
LDI AUX1,0x40
RCALL WCMDI
RCALL WCMDD
;
LDI AUX1,0x0F
LDI AUX3,64
LAZO1: RCALL WDATI
DEC AUX3
BRNE LAZO1
;
LDI AUX1,0xF0
LDI AUX3,64
LAZO2: RCALL WDATD
DEC AUX3
BRNE LAZO2
;
INC AUX2
CPI AUX2,0xC0
BRNE LAZO
; PARA APAGAR Y ENCENDER LAS SECCIONES DEL GLCD
RCALL DELAY
LDI AUX1,0x3E ; APAGAR GLCD SECCIÓN DERECHA
RCALL WCMDD
RCALL DELAY
LDI AUX1,0x3E ; APAGAR GLCD SECCIÓN IZQUIERDA
RCALL WCMDI
RCALL DELAY
LDI AUX1,0x3F ; ENCENDER GLCD SECCIÓN DERECHA
RCALL WCMDD
RCALL DELAY
LDI AUX1,0x3F ; ENCENDER GLCD SECCIÓN IZQUIERDA
RCALL WCMDI
; PARA DIBUJAR UNA CUADRÍCULA CON DATOS QUE ESTÁN EN ESTE MISMO ARCHIVO
Ing. Jaime Velarde Página Nº8 Diciembre 2011
9. EPN SISTEMAS MICROPROCESADOS DETRI
RCALL DELAY
LDI ZL,LOW(PANT1<<1) ; TABLA DE DATOS
LDI ZH,HIGH(PANT1<<1)
RCALL WSCRN
; PARA DIBUJAR UNA PANTALLA CON DATOS QUE ESTÁN EN OTRO ARCHIVO SECUNDARIO
RCALL DELAY
LDI ZL,LOW(PANT2<<1) ; TABLA DE DATOS
LDI ZH,HIGH(PANT2<<1)
RCALL WSCRN
RCALL DELAY
FINAL: RJMP REPITA
; SUBRUTINA DE INICIALIZACIÓN DEL GLCD
.EQU BUS = PORTC
.EQU CTR = PORTD
.EQU E = PD7
.EQU WR = PD6
.EQU DI = PD5
.EQU BKL = PD4
.EQU CS2 = PD3
.EQU CS1 = PD2
RSTGLCD:
LDI AUX1,0xFF
OUT BUS-1,AUX1
LDI AUX1,0xEC
OUT CTR-1,AUX1
;
LDI AUX1,0xC0 ; FILA 0 DE INICIO
RCALL WCMDI
RCALL WCMDD
;
LDI AUX1,0x3F ; PARA MOSTRAR
RCALL WCMDI
RCALL WCMDD
RET
; COMANDO PARA EL CONTROLADOR IZQUIERDO
WCMDI: SBI CTR,CS1
CBI CTR,WR
CBI CTR,DI
OUT BUS,AUX1
SBI CTR,E
CBI CTR,E
CBI CTR,CS1
RET
Ing. Jaime Velarde Página Nº9 Diciembre 2011
10. EPN SISTEMAS MICROPROCESADOS DETRI
; COMANDO PARA EL CONTROLADOR DERECHO
WCMDD: SBI CTR,CS2
CBI CTR,WR
CBI CTR,DI
OUT BUS,AUX1
SBI CTR,E
CBI CTR,E
CBI CTR,CS2
RET
; DATO PARA EL CONTROLADOR IZQUIERDO
WDATI: SBI CTR,CS1
CBI CTR,WR
SBI CTR,DI
OUT BUS,AUX1
SBI CTR,E
CBI CTR,E
CBI CTR,CS1
RET
; DATO PARA EL CONTROLADOR DERECHO
WDATD: SBI CTR,CS2
CBI CTR,WR
SBI CTR,DI
OUT BUS,AUX1
SBI CTR,E
CBI CTR,E
CBI CTR,CS2
RET
; ESCRITURA DE TODA UNA PANTALLA CON LOS DATOS APUNTADOS POR EL REGISTRO Z
WSCRN: LDI AUX2,0xB8
WSCRN1: MOV AUX1,AUX2
RCALL WCMDI
RCALL WCMDD
LDI AUX1,0x40
RCALL WCMDI
RCALL WCMDD
LDI AUX3,64
WSCRN2: LPM AUX1,Z+
RCALL WDATI
DEC AUX3
BRNE WSCRN2
LDI AUX3,64
WSCRN3: LPM AUX1,Z+
RCALL WDATD
DEC AUX3
BRNE WSCRN3
INC AUX2
CPI AUX2,0xC0
BRNE WSCRN1
RET
; SUBRUTINA DE ESPERA ANTES DE CONTINUAR
DELAY: LDI AUX1,5
CLR R15
CLR R14
DELAY1: DEC R15
BRNE DELAY1
Ing. Jaime Velarde Página Nº10 Diciembre 2011
15. EPN SISTEMAS MICROPROCESADOS DETRI
rectangular, denomina una “ventana”. Por ejemplo ventanas de
16x16 pixeles, de 8x16 pixeles, de 8x8 pixeles, etc.
La escritura de ventanas significa escribir menos número de bytes:
para ventanas de 16x16 se necesitan escribir 32 bytes, para ventanas
de 8x16 se escriben 16 bytes, para 8x8 solo 8 bytes, etc. Por lo
tanto, las tablas son más pequeñas; el principal problema al escribir
las ventanas es elaborar el algoritmo para establecer la ubicación en
base a la numeración que se asigne a las ventanas.
VENTANAS DE 16x16
División de la pantalla: el GLCD de 128x64 pixeles se divide en 32
ventanas de 16x16.
Cada ventana está compuesta por 32 bytes, los 16 primeros ocupan
una página inferior; mientras que los otros 16 bytes ocupan la
siguiente página superior. En ambos casos la dirección inicial para el
contador de las columnas es la misma. También, en la escritura de la
ventana se toma en cuenta la sección en que se encuentra.
Numeración que se asigna: la numeración va de 0 a 31.
Ing. Jaime Velarde Página Nº15 Diciembre 2011
16. EPN SISTEMAS MICROPROCESADOS DETRI
La forma que se indica en el gráfico favorece a la obtención de las
páginas que ocupa la ventana, de la dirección inicial de las columnas
y de la sección a la que pertenece, a partir del número de la ventana.
Ubicación de las ventanas: la siguiente tabla muestra la relación
entre el número de la ventana con la ubicación.
Página Página
Ventana Binario Sección Columna
Inferior Superior
0 00000 Izq. 0 1 0
1 00001 Izq. 0 1 16
2 00010 Izq. 0 1 32
3 00011 Izq. 0 1 48
4 00100 Der. 0 1 0
5 00101 Der. 0 1 16
6 00110 Der. 0 1 32
7 00111 Der. 0 1 48
8 01000 Izq. 2 3 0
------ ------ ------ ------ ------ ------
15 01111 Der. 2 3 48
16 10000 Izq. 4 5 0
------ ------ ------ ------ ------ ------
23 10111 Der. 4 5 48
24 11000 Izq. 6 7 0
------ ------ ------ ------ ------ ------
31 11111 Der. 6 7 48
También se muestra el número binario de donde se obtiene los
valores de la ubicación, de la siguiente forma:
Si B4 B3 B2 B1 B0 es el Número de la Página en binario con 5 bits
La ventana que pertenece a la SECCIÓN DERECHA tiene B2 = 1
La PÁGINA INFERIOR es igual a los bits B4 B3 multiplicados por 2
La COLUMNA INICIAL es igual a los bits B1 B0 multiplicados por 16
Subrutina para escribir ventanas de 16x16: considerando que ya
existen las subrutinas para escribir Comando y Datos en las secciones
izquierda y derecha del GLCD, la siguiente subrutina permite escribe
los 32 datos contenidos en la tabla apuntada por el Registro Puntero
Z en la ventana cuyo número está contenido en el Registro AUX5, si
este número excede el rango permitido la subrutina finaliza, sin
escribir en el GLCD.
Ing. Jaime Velarde Página Nº16 Diciembre 2011
17. EPN SISTEMAS MICROPROCESADOS DETRI
; SUBRUTINA PARA ESCRIBIR VENTANAS DE 16x16
WWIN: CPI AUX5,32
BRCC WWIN7
MOV AUX2,AUX5
ANDI AUX2,0B00011000
LSR AUX2
LSR AUX2
LDI AUX1,0xB8
ADD AUX1,AUX2
RCALL WCMDI
RCALL WCMDD
MOV AUX3,AUX5
ANDI AUX3,0B00000011
SWAP AUX3
LDI AUX1,0x40
ADD AUX1,AUX3
RCALL WCMDI
RCALL WCMDD
LDI AUX4,16
WWIN1: LPM AUX1,Z+
SBRC AUX5,2
RJMP WWIN2
RCALL WDATI
RJMP WWIN3
WWIN2: RCALL WDATD
WWIN3: DEC AUX4
BRNE WWIN1
INC AUX2
LDI AUX1,0xB8
ADD AUX1,AUX2
RCALL WCMDI
RCALL WCMDD
LDI AUX1,0x40
ADD AUX1,AUX3
RCALL WCMDI
RCALL WCMDD
LDI AUX4,16
WWIN4: LPM AUX1,Z+
SBRC AUX5,2
RJMP WWIN5
RCALL WDATI
RJMP WWIN6
WWIN5: RCALL WDATD
WWIN6: DEC AUX4
BRNE WWIN4
WWIN7: RET
PROGRAMA PRINCIPAL PARA ESCRIBIR VENTANAS DE 16x16
.NOLIST
.INCLUDE "m164pdef.inc"
.LIST
; DEFINICIÓN DE ETIQUETAS PARA LOS REGISTROS
.DEF AUX1 = R16 ; REGISTRO AUXILIAR1
.DEF AUX2 = R17 ; REGISTRO AUXILIAR2
Ing. Jaime Velarde Página Nº17 Diciembre 2011
20. EPN SISTEMAS MICROPROCESADOS DETRI
BRNE CSCRN3
INC AUX2
CPI AUX2,0xC0
BRNE CSCRN1
RET
Ing. Jaime Velarde Página Nº20 Diciembre 2011
21. EPN SISTEMAS MICROPROCESADOS DETRI
ESCRITURA DE SERIE DE VENTANAS
Al tener varias ventanas que pueden ser escritas en diferentes
posiciones de la pantalla, se puede escribir la serie de ventanas
mediante una sola subrutina que obtenga el orden de la serie desde
una tabla que puede estar en la FLASH o en la SRAM.
Ing. Jaime Velarde Página Nº21 Diciembre 2011
22. EPN SISTEMAS MICROPROCESADOS DETRI
El valor obtenido desde esa tabla, permite buscar en otra tabla la
dirección donde se encuentran los datos de la ventana que se va a
escribir en la serie; por lo tanto, se debe generar junto con los datos
de las ventanas la tabla de direcciones.
PROGRAMA PRINCIPAL PARA ESCRIBIR SERIES DE VENTANAS
.NOLIST
.INCLUDE "m164pdef.inc"
.LIST
; DEFINICIÓN DE ETIQUETAS PARA LOS REGISTROS
.DEF AUX1 = R16 ; REGISTRO AUXILIAR1
.DEF AUX2 = R17 ; REGISTRO AUXILIAR2
.DEF AUX3 = R18 ; REGISTRO AUXILIAR3
.DEF AUX4 = R19 ; REGISTRO AUXILIAR4
.DEF AUX5 = R20 ; REGISTRO AUXILIAR5
; SEGMENTO DE PROGRAMA o MEMORIA FLASH
.CSEG
; INICIALIZACIÓN DEL STACK Y DE LOS PÓRTICOS
PROGP: LDI AUX1,LOW(RAMEND)
OUT SPL,AUX1
LDI AUX1,HIGH(RAMEND)
OUT SPH,AUX1
;
RCALL RSTGLCD
;
REPITA: LDI ZL,LOW(ORDEN1<<1)
LDI ZH,HIGH(ORDEN1<<1)
RCALL SERIE
RCALL DELAY
RCALL CSCRN
LDI ZL,LOW(ORDEN2<<1)
LDI ZH,HIGH(ORDEN2<<1)
RCALL SERIE
RCALL DELAY
RCALL CSCRN
LDI ZL,LOW(ORDEN3<<1)
LDI ZH,HIGH(ORDEN3<<1)
RCALL SERIE
RCALL DELAY
RCALL CSCRN
;
FINAL: RJMP REPITA
;
ORDEN1: .DB 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
.DB 16,17,18,19,20,21,24,23,24,25,26,27,28,29,30,31
ORDEN2: .DB 16,17,18,19,20,21,24,23,24,25,26,27,28,29,30,31
.DB 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
ORDEN3: .DB 3,3,3,6,6,6,8,9,10,23,17,11,12,21,13,14
.DB 16,18,19,0,1,2,20,24,24,25,31,27,28,29,30,15
;
.INCLUDE “CASILLAS.ASM”
Ing. Jaime Velarde Página Nº22 Diciembre 2011
23. EPN SISTEMAS MICROPROCESADOS DETRI
Subrutina para escribir serie de 32 ventanas
Esta subrutina considera que en la tabla DIRVEN se encuentran
ordenadas las direcciones iniciales de las tablas de datos de las 32
ventanas que conforman la serie.
SERIE: LDI AUX5,0
SERIE1: LPM AUX3,Z+
MOVW Y,Z ; SALVAR EL PUNTERO DE LA SERIE
LDI ZL,LOW(DIRVEN<<1)
LDI ZH,HIGH(DIRVEN<<1)
SERIE2: LPM AUX1,Z+
LPM AUX2,Z+
CPI AUX3,0
BREQ SERIE3
DEC AUX3
RJMP SERIE2
SERIE3: MOVW Z,AUX1
RCALL WWIN
MOVW Z,Y
INC AUX5
CPI AUX5,32
BRNE SERIE1
RET
Resultados de la simulación:
Ing. Jaime Velarde Página Nº23 Diciembre 2011
24. EPN SISTEMAS MICROPROCESADOS DETRI
A continuación está el listado del archivo “CASILLAS.ASM” que
contiene los datos para escribir las 32 ventanas de la serie y la tabla
de direcciones iniciales de estos datos.
Ing. Jaime Velarde Página Nº24 Diciembre 2011