Vous êtes sur la page 1sur 7

1

2.6. LCD.INC: Gestin de un display de 2 lneas y 16 caracteres por lnea

7
8
9
10
11
12
13
14

Un LCD (Liquid Crystal Display) es un dispositivo de bajo costo que permite


visualizar mensajes de una forma fcil y econmica en sistemas microcontroladores. En el
mercado es fcil encontrar dispositivos de 1, 2, 3 y 4 lneas de 16 hasta 40 caracteres por
lnea. El ms popular de ellos es el LM016L que tiene 2 lneas de 16 caracteres cada una. En
la siguiente figura se muestra una foto y un esquema de este LCD.

Las caractersticas principales de este dispositivo son las siguientes:


1.
2.
3.
4.
5.

Bajo consumo (<10mW)


Memoria con 40 caracteres por lnea aunque solo sean visibles 16 de ellos.
Representa caracteres del alfabeto latino, griego, japons y smbolos matemticos.
Posibilidad de usar cursor
Gestin del bus de datos con 8 lneas o con 4 lneas.

Descripcin de los pines del LM016L:

D0-D7 : Bus de datos


E (Enable): Si E=1 el LCD est habilitado y si E=0 est deshabilitado por lo que
el resto de patitas podran utilizarse para otras funciones mientras tanto.
R/W : Si R / W =0 la instruccin es de escritura, si es 1 es de lectura.
RS: Si RS=0 el byte enviado es un comando, si es 1 es un carcter para mostrar
en la pantalla del LCD.
VDD : Tensin de alimentacin (+5V).
VSS : Masa.
VEE : Tensin para regular el brillo de la pantalla.

2.6.1. Instrucciones
La siguiente tabla est extrada de la hoja de catlogo del dispositivo LM016L y
resume las instrucciones que admite este dispositivo. Algunas de ellas no se detallarn ya que
no se usarn:

Serie 74HCxx

2
Instruccin
Borrar LCD
Cursor al inicio
Modo de entrada
Control display
Desplazamiento
Funcin
Direcc. CGRAM
Direcc. DDRAM
Leer bandera BF
Escribir
Leer

RS R/W D7 D6 D5 D4 D3 D2 D1 D0
0
0
0
0
0
0
0
0
0
1
1

0
0
0
0
0
0
0
0
1
0
1

0
0
0
0
0
0
0
1
BF

0
0
0
0
0
0
1

0
0
0
0
0
1
0
0
0
0
1
0
0
0
1 I/D S
0
0
1
D
C
B
0
1 S/C R/L 1
DL N
F
--------- No se usar -----Direccin DDRAM
-------------- No se usar -----Dato a escribir
------------------- No se usar ------

T. mx.
1.64ms
1.64ms
40s
40s
40s
40s
40s
40s
0s
40s
40s

A continuacin se describen los diferentes comandos que se envan al LCD a travs


del bus de datos:
Borrar LCD (00000001): Borra el LCD completo y sita el cursor al principio de la
primera lnea (Direccin 0 de la memoria).
Cursor al inicio (0000001-): Cursor al principio. Tambin desplaza el display a su
posicin original (Direccin 0 de la memoria) sin modificar el contenido de los datos.
Para entender mejor el desplazamiento del display hay que tener presente que
este dispositivo tiene una memoria de datos para el display de 40 bytes por lnea; de
los cuales solo 16 son visibles para cada lnea. Esta memoria se llama DDRAM (Data
Display RAM) y contiene el cdigo de los caracteres que se envan al display. En la
siguiente figura se muestra dicha memoria as como la ventana que inicialmente es
visible.

El primer carcter de la fila superior est en la direccin 00h y el de la fila


inferior est en la posicin 40h.
Modo de entrada (000001 I/D S): Caracteriza el movimiento del cursor y de la ventana
visible (desplazamiento) cada vez que se escribe o lee un carcter del display.
o I/D=0. Decrementa en 1 la posicin del cursor y del puntero de la memoria
DDRAM para que la siguiente instruccin de lectura/escritura tome el
siguiente carcter.
o I/D=1. Incrementa en 1 la posicin del cursor y del puentor de la memoria.
o S=0. No se desplaza la ventana visible.
o S=1. Se desplaza la ventana visible en la direccin dada por el bit I/D cuando
el puntero de la memoria llegue a uno de sus extremos.

Problema 16

Control display (00001 D C B): El objetivo de estos 3 bits son los siguientes:
o D=0. Apaga el display.
o D=1. Enciende el display.
o C=0. Cursor no visible.
o C=1. Cursor visible.
o B=0. Cursor no parpadea (si ste es visible)
o B=0. Cursor parpadea (si ste es visible)
Desplazamiento (0001 S/C R/L - -): Mueve el cursor o desplaza la ventana visible una
posicin a la izquierda o derecha sin cambiar el contenido de la DDRAM.
o S/C=0. Desplaza el cursor en la direccin dada por el bit R/L.
o S/C =1. Desplaza la ventana visible en la direccin dada por el bit R/L.
o R/L=0. Izquierda.
o R/L =1. Derecha.
Funcin (001 DL N F - -): Mueve el cursor o desplaza la ventana visible una posicin
a la izquierda o derecha sin cambiar el contenido de la DDRAM.
o DL=0. Bus de datos de 4 bits (los 4 bits ms significativos del LM016L).
o DL =1. Bus de datos de 8 bits.
o N=0. Una sola lnea visible.
o N =1. Dos lneas visibles.
o F=0. Carcter de 5x7 puntos.
o F =1. Carcter de 5x10 puntos.
Direcc. DDRAM (1 Direccin DDRAM): Actualiza el puntero interno de la DDRAM
al valor dado por Direccin DDRAM. Por ejemplo, si la direccin que se escribe es la
41h implica que la prxima lectura o escritura que se realice ser al segundo carcter
de la fila inferior.
Leer bandera BF (BF ------------): La lectura de la bandera BF permite saber si el
mdulo LM016L contina aun ocupado con la operacin ltima realizada de
lectura/escritura bien de un carcter bien de un comando. No se usar ya que la
seal R / W se conectar a 0 lgico para ahorrar un pin del microcontrolador.
Esto implica que solo se pueden realizar operaciones de escritura. Se tendr
mucho cuidado al usar los retardos adecuados para contemplar los tiempos que
requiere este dispositivo en cada una de las operaciones que puede realizar.
2.6.2. Librera en esamblador LCD.INC
Listado de rutinas:
;
;
;
;
;
;
;
;
;
;
;
;
;

LCD_ini
LCD_enciende
LCD_apaga
LCD_enviaComando
LCD_enviaCaracter
LCD_irFilCol
LCD_irLineaInf
LCD_irLineaSup
LCD_lineaEnBlanco
LCD_1_blanco
LCD_2_blancos
LCD_3_blancos
LCD_4_blancos

Serie 74HCxx

Configuraciones posibles en funcin de la constante LCD_OPCION que est ubicada en el


fichero de librera:
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;

La librera est preparada para que los 4 pines de datos (salidas para el PIC) puedan
ser compartidos por otro perifrico pero como entradas (ej.: filas de un teclado).
Librera de rutinas para la gestin de un LCD de 2 lneas x 16 caracteres gestionado
con un bus de datos 4 lneas para optimizar el nmero de pines empleados.
El bus de datos del LCD (configurado para 4 bits) se conectar bien a las 4 lneas
inferiores de un puerto del PIC (en este caso la constante LCD_BUS_PINES=b'00001111')
o bien a los 4 bits superiores del puerto (en este caso la constante
LCD_BUS_PINES=b'11110000'). Estos pines se ponen en alta impedancia cuando el pin E del
LCD se pone a '0'. Por tanto, pueden conectarse a otros dispositivos y tener ms
de una funcin ya que el pin E solo se pone a '1' cuando el pic se dirige al LCD.
Los pines E y RS pueden asignarse a cualquier otro pin libre
del mismo puerto o de cualquier otro puerto del PIC. Las posibilidades de conexin del
16F84 son mltiples. En el caso de un pic con ms de 2 puertos aumentan aun ms.
En esta librera se pueden elegir entre 5 opciones cambiando el valor de la constante
LCD_OPCION para un pic de dos puertos (PORTA y PORTB).
LCD_OPCION=1. Bus de datos conectado al nibble bajo del puerto A. RS y E conectados
al puerto B. Se deja libre RB0 para posible interrupcin externa.
Pin LCD
-------[DB7:DB4]
RS
E
RW

Pin PIC
--------[RA3:RA0]
RB1
RB2
GND

(4 lneas inferiores de PORTA).

(se ahorra un pin del PIC)

LCD_OPCION=2. Bus de datos conectado al nibble bajo del puerto B. RS y E tambin


conectados al puerto B.
Pin LCD
-------[DB7:DB4]
RS
E
RW

Pin PIC
--------[RB3:RB0]
RB4
RB5
GND

(4 lneas inferiores de PORTB).

(se ahorra un pin del PIC)

LCD_OPCION=3. Bus de datos conectado al nibble bajo del puerto B. RS y E conectados


al puerto A.
Pin LCD
-------[DB7:DB4]
RS
E
RW

Pin PIC
--------[RB3:RB0]
RA0
RA1
GND

(4 lneas inferiores de PORTB).

(se ahorra un pin del PIC)

LCD_OPCION=4. Bus de datos conectado al nibble alto del puerto B. RS y E tambin


conectados al puerto B.
Pin LCD
-------[DB7:DB4]
RS
E
RW

Pin PIC
--------[RB7:RB4]
RB2
RB3
GND

(4 lneas superiores de PORTB).

(se ahorra un pin del PIC)

LCD_OPCION=5. Bus de datos conectado al nibble alto del puerto B. RS y E conectados


al puerto A.
Pin LCD
-------[DB7:DB4]
RS
E
RW

Pin PIC
--------[RB7:RB4]
RA0
RA1
GND

(4 lneas superiores de PORTB).

(se ahorra un pin del PIC)

Problema 16

Descripcin de las rutinas:


;=============================================================================================
* LCD_ini
*
*
- Memoriza la configuracin de los 6 pines del puerto conectado al LCD
*
*
- El pin E y RS son exclusivos para el LCD por lo que se fijarn de salida
*
*
- Inicio del LCD segn especifica el fabricante:
*
* Retardo superior a 15ms para que se estabilice la tensin de alimentacin.
*
* Enva b'0011'.
*
* Retardo superior a 4,1ms.
*
* Enva b'0011'
*
* Retardo superior a 100us.
*
* Enva b'0011'
*
* Retardo superior a 40us.
*
* Enva b'0010'
(Este valor configura el bus de 4 bits)
*
*
- Configuracin del resto de parmetros
*
* LCD de 2 lneas, bus de 4 lneas y caracteres de 5x7 puntos.
*
* Borra el contenido y sita el cursor al principio.
*
* Enciende la pantalla y cursor no visible.
*
* Cursor configurado en modo incremental y sin desplazamiento.
*
;=============================================================================================
;=============================================================================================
; LCD_enviaComando
; - Entrada: W. Contiene los 8 bits del comando a enviar al LCD
; - Enva primero el nibble alto del comando y despus el bajo
;=============================================================================================

;=============================================================================================
; LCD_enviaCaracter
; - Entrada: W. Contiene los 8 bits del carcter a enviar al LCD
; - Enva primero el nibble alto del carcter y despus el bajo
;=============================================================================================

;=============================================================================================
; Rutinas
; - LCD_lineaEnBlanco: Enva 16 espacios blancos para dejar en blanco la lnea
; - LCD_1_blanco: Enva 1 espacio en blanco.
; - LCD_2_blancos: Enva 2 espacios en blanco.
; - LCD_3_blancos: Enva 3 espacios en blanco.
; - LCD_4_blancos: Enva 4 espacios en blanco.
;=============================================================================================

;=============================================================================================
; LCD_enciende
;
* LCD de 2 lneas, bus de 4 lneas y caracteres de 5x7 puntos.
;
* Borra el contenido y sita el cursor al principio.
;
* Enciende la pantalla y cursor no visible.
;
* Cursor configurado en modo incremental y sin desplazamiento.
;=============================================================================================
;=============================================================================================
; LCD_apaga
; Apaga temporalmente el display (no har falta iniciarlo con posterioridad, solo encenderlo).
;=============================================================================================
;=============================================================================================
; Rutinas:
; - LCD_irLineaSup: Sita el cursor al comienzo de la lnea 1
; - LCD_irLineaInf: Sita el cursor al comienzo de la lnea 2
; - LCD_irFilCol: Sita el cursor en la lnea dada por Y y la posicin dada por X
;
- Entrada (W): b'y000xxxx'. X= nibble inferior de (W), Y=nibble superior de (W)
;
- Ejemplo 1 w=b'10001111'. X=1111 (posicin 15), Y=1 (lnea 2, inferior)
;
- Ejemplo 2 w=b'10000111'. X=0111 (posicin 7),
Y=0 (lnea 1, superior)
;
- Ejemplo 3 w=b'10000000'. X=0000 (posicin 0),
Y=0 (lnea 1, superior)
;=============================================================================================

Serie 74HCxx

2.6.3. Aplicacin de la librera LCD.INC para el caso LCD_OPCION=4.


Se pretende que el LCD muestre parpadeando lo siguiente: en la lnea superior la
cadena Curso 2010-2011 y en la inferior
SED. La constantes LCD_OPCION de
la librera se asignar a 4. Por tanto, El bus del LCD se conectar a los pines PB4-PB7 del
PIC, el pin E al pin PB3 y el pin RS al pin PB2.
; ****************************************************************************** *
; *********
Fichero: LCD.ASM
******** *
; ****************************************************************************** *
; * *************************************** *
; * Encabezados
*
; * *************************************** *
LIST
P=16F84A
INCLUDE
<P16F84A.INC>
__CONFIG
_CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC
; * *************************************** *
; * Variables globales
*
; * *************************************** *
CBLOCK 0x0C
ENDC
; * *************************************** *
; * Vector de interrupcin: RESET
*
; * *************************************** *
RESET ORG
0
; El programa comienza en la direccin 0.
goto
inicio
; * *************************************** *
; * Vector de interrupcin: INTERRUPCION
*
; * *************************************** *
ORG
4
clrf INTCON
; INTCON=b'00000000'. Borramos banderas y mscaras de
interrupcin
retfie
; * *************************************** *
; * Cadenas de caracteres (mensajes)
*
; * *************************************** *
cadenas
;
addwf PCL,F
movwf PCL
cadena0
DT "Curso 2010-2011",0
cadena1
; DT " SED",0
retlw 0x20
; (' ' en cdigo ASCII)
retlw 0x20
; (' ' en cdigo ASCII)
retlw 0x53
; ('S' en cdigo ASCII)
retlw 0x45
; ('E' en cdigo ASCII)
retlw 0x44
; ('D' en cdigo ASCII)
retlw 0
cadenas_fin
; * *************************************** *
; * Mdulo inicial
*
; * *************************************** *
inicio
;-----------------------call LCD_ini
; Inicia el display
;-----------------------movlw cadena0
; Carga en W la direccin de memoria del primer carcter
call LCD_enviaCadena
; Enva caracteres de la cadena hasta encontrar el 0.
;-----------------------call LCD_irLineaInf
; Sita el cursor en la 2 fila
;-----------------------call LCD_4_blancos
; Enva 4 espacios en blanco
;-----------------------movlw ' '
call LCD_enviaCaracter
; Enva otro espacio en blanco
;------------------------

Problema 16
;-----------------------movlw cadena1
call LCD_enviaCadena
;------------------------

7
; Carga en W la direccin de memoria del primer carcter
; Enva caracteres de la cadena hasta encontrar el 0.

; * *************************************** *
; * Mdulo Principal. Bucle infinito
*
; * *************************************** *
inf
nop
goto
inf
; * *************************************** *
; * Libreras
*
; * *************************************** *
INCLUDE <LCD.INC>
; Subrutinas de control del mdulo LCD.
END

Vous aimerez peut-être aussi