Sunteți pe pagina 1din 43

PROYECTO CONEXIÓN DE UN LCD

Teoría de funcionamiento:

El LCD es actualmente el circuito más barato y confiable para mostrar datos en un


proceso de monitoreo y control. Su interfaz con los controladores se realiza a
través de un conector de 14 pines, cuya configuración es respetada por la mayoría
de los fabricantes. A diferencia de los teclados, los fabricantes del display de
cristal líquido (“Liquid Cristal Display”) LCD, han estandarizado sus señales en un
conector de 14 pines, así como sus comandos de control para el manejo del
mismo

En el LCD se pueden mostrar datos como la hora y la fecha, así como valores de
variables tales como nivel, presión, gasto, temperatura, etc. El LCD puede también
emplearse para programar parámetros internos del sistema, de acuerdo a su
aplicación o para mostrar al usuario las opciones del sistema mientras lo opera.

El módulo LCD lleva integrado a sus circuitos una memoria ROM conocida como
“generador de caracteres” que habrá de generar los patrones de la matriz de
puntos (5 x 7 ó 7 x 9) que forman los caracteres en la pantalla.  También tiene una
RAM interna que almacena los caracteres y los exhibe en el módulo LCD.

Hardware:

El diagrama general de conexiones del display se muestra en la figura de abajo.


En su aplicación más simple, se desea solo escritura al LCD y el pin 5 se conecta
permanentemente a tierra. Las señales del puerto B del 16F84, RB0...RB7 son
usadas para enviar los datos o comanods. Las señales del puerto A, RA1 y RA2
se usan como señales de control del LCD.
Todas las señales de datos y control llevan niveles TTL (0 a 5 volts), con
excepción de la señal de control de intensidad, en el cual hay que aplicar tierra
para la mayor intensidad y 5 volts para la menor. En EDUPIC, este voltaje ya viene
preajustado con un divisor de resistencias formado por R26 y R25, de 1K y 100K
para dar la intensidad adecuada.

Operación:

En la interfaz de 14 pines, 8 son señales de comandos y datos. Estos datos se


manejan en códigos ASCII y se escriben en la memoria del LCD en forma
secuencial. A través de estas mismas señales pueden escribirse también
comandos. En seguida se adjuntan 2 tablas. En la primera, se muestra la
distribución de señales de la interfaz y en la segunda algunos de los comandos
más comúnmente empleados.
PIN FUNCION PIN FUNCION
1 Tierra 8 DB1
2 5 volts. 9 DB2
3 INT Control intensidad 10 DB3
4 RS 0=comando 1=datos 11 DB4
5 R/W 0=escribir , 1=leer        12 DB5
6 EN Enable modo pulso 13 DB6
7 DB0 14 DB7

COMMAND FUNCION HEXA


CLEAR LIMPIA DISPLAY 01H
HOME POSICIONA CURSOR AL INICIO DEL LCD 03H
CURSOR MUESTRA CURSOR CON PARPADEO 0FH
8 BITS SELECCIONA INTERFAZ DE 8 BITS 38H
RENGLON1 SELECCIONA ESCRITURA EN EL PRIMER RENGLON 80H
RENGLON2 SELECCIONA ESCRITURA EN EL SEGUNDO RENGLON C0H

Para escribir en el LCD, debe de seguirse la siguiente secuencia en la


programación:

*con RS=0, se mandan comandos de inicialización al display LCD.Los comandos


típicos son los mostrados en la tabla. Para enviar un comando,se escribe su
código en los 8 bits RB0 ...RB7 y luego se da un pulso bajo de al menos 10
milisegundos de duración a la señal EN (RA2). EN es una señal que debe de estar
normalmente ALTA.Es importante esperar unos 10 milisegundos a que los datos
estén estables antes de aplicar el pulso. 

* con RS=1, se escribe los datos en código ASCII en las 8 líneas RB0 a RB7, con
el mismo procedimiento señalado arriba. Los caracteres van apareciendo en el
mismo orden en el que se mandan. Para un LCD de dos renglones, cada renglón
debe de manejarse con un comando independiente. Para escribir en el primer
renglón, debe previamente de enviarse el comando 80H y para el segundo
renglón, un C0H

* Las señales de control RS y EN, se manejan por medio de los pines RA1 y RA2
del 16F84.

Conexión:
Existen, entre otros, dos tipos de displays LCD:

LCD 16 X 2 con dos renglones de 16 caracteres cada uno. Cada renglón se


maneja en forma independiente. Para seleccionar escribir en el inicio del renglón,
debe de enviarse antes el comando correspondiente: 80H (renglón 1) ó C0H
(renglón 2). Además, cada celda tiene una dirección. Por ejemplo si queremos
escribir en la tercera celda del segundo renglón, entonces enviamos antes el
comando C3H.

LCD 16 X 1 es un dispositivo LCD con un solo renglón de 16 caracteres, pero


electrónicamente está dividido en dos secciones de 8 caracteres. Cada una de
estas secciones se maneja como si fuese un renglón de 8 caracteres, es decir, si
se desea escribir en la primera sección el comando es 80H y para escribir en la
segunda sección, C0H.

CONEXIÓN DEL LCD AL SISTEMA EDUPIC: para conectar un LCD a su sistema,


por favor conecte cada pin en el conector de EDUPIC con su correspondiente en
el LCD, del 1 al 14.

NOTA IMPORTANTE: En el sistema EDU-PIC, las señales de control


correspondientes a RA1 y RA2 están compartidas por el puerto del LCD y los
microswitches A1 y A2. Entonces es muy importante que, al operar el LCD, los
SWITCHES A1 y A2 estén en OFF, ABIERTOS, es decir, en su posición más
cercana al puerto serial. De lo contrario, el LCD no funcionará, debido a que sus
señales de control estarán bloqueadas por los microswitches.

Firmware:

En seguida se listan 3 programas de prueba para almacenarse en la memoria


FLASH del circuito 16F84. Se proporcionan los archivos fuente, .ASM, los cuales
deben de ser previamente ensamblados para obtener el archivo .HEX que habrá
de enviarse finalmente al sistema 16F84, usando el programa WINPIC.

-para manejar un display de 16 x 2: lcd2.asm

; ARCHIVO LCD2.ASM
; CODIGO FUENTE PARA EL MICROCONTROLADOR EDUPIC-16F84

; ESCRIBE EN EL LCD EL MENSAJE "EDUPIC 16F84", "PUNTO FLOTANTE"


; VERSION PARA OSCILADOR CRISTAL 4 MHZ

; CPU configuration
; (It's a 16F84, XT OSCILADOR
; watchdog timer off, power-up timer on)
;PA1 se usa como señal de control RS comando=0, datos=1
;PA2 se usa como señal de control EN pulso de 50 ms.
;PB0..PB7 se usan como señales de datos.

processor 16f84
include <p16f84.inc>
__config _XT_OSC & _WDT_OFF & _PWRTE_ON

eight equ H'38' ;comando interfaz 8 bits, dos renglones


clear equ H'01' ;limpia display
home equ H'03' ;posiciona el cursor en inicio
cursor equ H'0F' ;parpadea cursor
renglon1 equ H'80' ;elige primer rengón
renglon2 equ H'C0' ;elige segundo renglón
J equ H'1F' ;localidad para subrutina de retardo
K equ H'1E' ;localidad para subrutina de retardo
valor equ H'1D' ;localidad guardar valor offset en tabla

org 0
lcd: movlw H'00'
bsf STATUS,RP0 ;BANCO 1
movwf TRISB ;bits de puerto B, salidas
movwf TRISA ;bits de puerto A, salidas
bcf STATUS,RP0 ;BANCO 0
call comand ;incializa LCD. envía 4 comandos
movlw D'15' ;16 caracteres
movwf valor
call primer ;escribe primer renglón
movlw D'15'
movwf valor
call segund ;escribe segundo renglón
loop: goto loop
primer: movlw renglon1
call puco ;envía comando de renglón 1
malla1: movfw valor
call tabla1 ;regresa con dato de tabla en W.
call puda ;escribe caracter en LCD
decfsz valor,f
goto malla1
return
segund: movlw renglon2
call puco ;envía comando de renglón 2
malla2: movfw valor
call tabla2 ;regresa con dato de tabla en W.
call puda ;escribe caracter en LCD
decfsz valor,f
goto malla2
return
comand: movlw eight ;envía 4 comandos
call puco
movlw clear
call puco
movlw home
call puco
movlw cursor
call puco
return
puco: movwf PORTB ;escribe comando en puertoB
call delay ;50 milisegundos
movlw H'04' ;RS=0, EN=1
movwf PORTA
call delay
movlw H'00' ;RS=0, EN=0
movwf PORTA
call delay
movlw H'04'
movwf PORTA
call delay
return
puda: movwf PORTB ;escribe dato en puertoB
call delay ;50 milisegundos
movlw H'06' ;RS=1, EN=1
movwf PORTA
call delay
movlw H'02' ;RS=1, EN=0
movwf PORTA
call delay
movlw H'06'
movwf PORTA
call delay
return
delay: movlw D'100' ;50 milisegundos
movwf K
mallaK: movwf J
mallaJ: decfsz J,f
goto mallaJ
decfsz K,f
goto mallaK
return
tabla1: addwf PCL,f
retlw ''
retlw ''
retlw '4'
retlw '8'
retlw 'F'
retlw '6'
retlw '1'
retlw ''
retlw 'C'
retlw 'I'
retlw 'P'
retlw 'U'
retlw 'D'
retlw 'E'
retlw ''
retlw ''
tabla2: addwf PCL,f
retlw ''
retlw 'E'
retlw 'T'
retlw 'N'
retlw 'A'
retlw 'T'
retlw 'O'
retlw 'L'
retlw 'F'
retlw ''
retlw 'O'
retlw 'T'
retlw 'N'
retlw 'U'
retlw 'P'
retlw ''
end
Indice

1. Objetivos
2. Introducción
3. Diversidad de algunos módulos LCD
4. Identificación de los pines de conexión de un modulo LCD no matricial
5. Interpretación del significado de los Pines del Modulo LCD
6. Tiempos mínimos requeridos para que una instrucción o un dato
puedan ser ejecutados.
7. Bus de Datos de 4 y 8 Bits de Longitud
8. Inicialización del modulo LCD
9. Conjunto de Instrucciones básicas de un modulo LCD:
10. Conexión de un modulo LCD a un Microcontrolador PIC16F84.
11. El programa
12. Archivo .LST
13. Conclusiones

Objetivos

 Aprender a configurar un módulo LCD como un receptor de 4 u 8 líneas de


datos.
 Aprender a manejar un módulo LCD a través de la ayuda de un PIC.
 Comprender el conjunto de órdenes que se pueden enviar a un módulo
LCD
 Establecer la diferencia entre los diferentes módulos LCD existentes en el
mercado regional.
 Comprender los tiempos de retardo de un módulo LCD.

Introducción

Antes de aparecer los módulos LCD, nuestros diseños electrónicos utilizaban los
Displays de siete segmentos para poder mostrar la información, además de su
gran limitación de poder mostrar los caracteres alfa numéricos y símbolos
especiales, también consumían demasiada corriente y ocupaban demasiado
espacio físico. Posteriormente aparecieron otros tipos de displays mas complejos
que podían mostrar algunos caracteres y símbolos; pero tenían de igual manera
mucho consumo de corriente y espacio físico desperdiciado.

Finalmente aparecieron los módulos LCD o pantallas de cristal liquido (ver grafico)
la cual tiene la capacidad de mostrar cualquier carácter alfa numérico. Estos
dispositivos ya vienen con su pantalla y toda la lógica de control pre-programada
en la fabrica y lo mejor de todo es que el consumo de corriente es mínimo y no se
tendrán que organizar tablas especiales como se hacia anteriormente con los
displays de siete segmentos.
Las aplicaciones de los módulos LCD son infinitas ya que podrán ser aplicados en
la informática, comunicaciones, telefonía, instrumentación, robótica, automóviles,
equipos industriales, etc. Todo queda a su imaginación la gran cantidad de
aplicaciones que tiene un modulo LCD.

Grafico 1. Módulo LCD

Diversidad de algunos módulos LCD

En la actualidad los módulos LCD existen una gran variedad de versiones


clasificados en dos grupos. El primer grupo esta referido a los módulos LCD de
caracteres ( solamente se podrán presentar caracteres y símbolos especiales en
las líneas predefinidas en el modulo LCD) y el segundo grupo esta referido a los
módulos LCD matriciales ( Se podrán presentar caracteres, símbolos especiales y
gráficos). Los módulos LCD varían su tamaño físico dependiendo de la marca; por
lo tanto en la actualidad no existe un tamaño estándar para los módulos LCD.

La siguiente imagen muestra las dimensiones de una configuración típica de un


modulo LCD de dos líneas por 16 caracteres por cada línea incluyendo los detalles
de la matriz de como esta conformado un carácter

Gráfico 2. Dimensiones de configuración


Otro patrón importante es el tamaño de los caracteres donde las dimensiones de la matriz
que forma los caracteres tienen longitudes diferentes. La siguiente imagen muestra la
matriz utilizada para poder representar un símbolo o un carácter alfa numérico en un
modulo LCD. Esta matriz define algunos aspectos importantes del carácter o el símbolo que
están mostrando. Los aspectos que define esta matriz son:

Matriz de punto para Aspectos importantes que define la


un solo carácter en un matriz de puntos para un solo carácter
modulo LCD en un modulo LCD
1-. Altura del carácter definida por dos
variables: Alto de cada punto que
conforma la matriz y longitud de
separación entre cada punto que
conforma la matriz.

2-. Ancho del Carácter definido por dos


variables: Ancho de cada punto que
conforma la matriz y longitud de
separación entre cada punto que
conforma la matriz.

3-. Calidad gráfica del carácter (a mayor


cantidad de puntos dentro de la matriz,
mayor será la calidad visual del carácter
presentado por el modulo LCD.

Los primeros módulos LCD tenían los caracteres de color negro y el fondo de la
pantalla era de color verdoso claro. Posteriormente se crearon otros colores en
donde los caracteres eran de color plata y así sucesivamente fueron variando los
colores en el fondo y en los caracteres incluyendo una luz posterior para los
módulos LCD denominada Back Light diseñada especialmente para mejorar la
visualización de la pantalla sobre todo en lugares muy oscuros.

Identificación de los pines de conexión de un modulo LCD no matricial

Los pines de conexión de un modulo LCD han sido estandarizados por lo cual en
la mayoría de ellos son exactamente iguales siempre y cuando la línea de
caracteres no sobrepase los ochenta caracteres por línea. Por otro lado es de
suma importancia localizar exactamente cual es el pin Numero 1 ya que en
algunos módulos se encuentra hacia la izquierda y en otros módulos se encuentra
a la derecha.
Pin N-. Sismología Nivel I/O Función

1 VSS - - 0 Vlts. Tierra ( GND ).

2 VCC - - + 5 Vlts. DC.

3 Vee = Vc - - Ajuste del Contraste.

4 RS 0/1 I 0= Escribir en el modulo LCD /


1= Leer del modulo LCD

5 R/W 0/1 I 0= Entrada de una Instrucción /


1= Entrada de un dato.

6 E 1 I Habilitación del modulo LCD

7 DB0 0/1 I/O BUS DE DATO LINEA 1


( LSB ).

8 DB1 0/1 I/O BUS DE DATO LINEA 2

9 DB2 0/1 I/O BUS DE DATO LINEA 3

10 DB3 0/1 I/O BUS DE DATO LINEA 4

11 DB4 0/1 I/O BUS DE DATO LINEA 5

12 DB5 0/1 I/O BUS DE DATO LINEA 6

13 DB6 0/1 I/O BUS DE DATO LINEA 7

14 DB7 0/1 I/O BUS DE DATO LINEA 8


(MSB).

15 A - - LED (+) Back Light

16 K - - LED (-) Back Light.

Interpretación del significado de los Pines del Modulo LCD


El Pin numero 1 y 2 están destinados para conectarle los 5 Voltios que requiere
el modulo para su funcionamiento y el Pin numero 3 es utilizado para ajustar el
contraste de la pantalla; es decir colocar los caracteres mas oscuros o mas claros
para poderse observar mejor.

Observe la siguiente imagen de cómo deben estar conectados los tres primeros
pines. La resistencia representada como R3 es un potenciómetro variable que
puede oscilar entre 10 K y 20 K indiferentemente.

Gráfico 3. Configuración de pines del módulo LCD

El Pin numero 4: denominado "RS" trabaja paralelamente al Bus de datos del


modulo LCD ( Bus de datos son los Pines del 7 al 14 ). Este bus es utilizado de
dos maneras, ya que usted podrá colocar un dato que representa una instrucción
o podrá colocar un dato que tan solo representa un símbolo o un carácter alfa
numérico; pero para que el modulo LCD pueda entender la diferencia entre un
dato o una instrucción se utiliza el Pin Numero 4 para tal fin.

Si el Pin numero 4 = 0 le dirá al modulo LCD que esta presente en el bus de datos
una instrucción, por el contrario, si el Pin numero 4 = 1 le dirá al modulo LCD que
esta presente un símbolo o un carácter alfa numérico.

El Pin numero 5: denominado "R/W" trabaja paralelamente al Bus de datos del


modulo LCD ( Bus de datos son los Pines del 7 al 14 ). También es utilizado de
dos maneras, ya que usted podrá decirle al modulo LCD que escriba en pantalla el
dato que esta presente en el Bus; por otro lado también podrá leer que dato esta
presente en el Bus.
Si el Pin numero 5 = 0 el modulo LCD escribe en pantalla el dato que esta
presente el Bus; pero si el Pin numero 5 = 1 significa que usted necesita leer el
dato que esta presente el bus del modulo LCD.

El Pin numero 6: denominado "E" que significa habilitación del modulo LCD tiene
una finalidad básica: conectar y desconectar el modulo. Esta desconexión no
estará referida al voltaje que le suministra la corriente al modulo; la desconexión
significa tan solo que se hará caso omiso a todo lo que este presente en el bus de
datos de dicho modulo LCD.

En la mayoría de los circuitos electrónicos modernos que incluyan elementos


electrónicos como Microcontroladores, Memorias y Módulos LCD, utilizan el
mismo bus de datos. Esto es para no tener un bus de datos independientemente
por cada elemento electrónico, esto implicaría que los circuitos electrónicos sean
mucho mas grandes por la cantidad de conexiones necesaria a cada uno de los
elementos.

Ahora como los Microcontroladores, memorias y módulos LCD utilizan el mismo


bus de datos, deberá existir en cada uno de ellos un Pin de habilitación "E" que
permita desconectar y conectar cuando sea necesario. Por ejemplo si usted
necesita trabajar con la memoria RAM para obtener o escribir cierta información,
será necesario que deshabilite el modulo LCD para que no presente basura en la
pantalla, o se ejecuten instrucciones no deseadas.

Los Pines desde el numero 7 hasta el numero 14 representan 8 líneas que se


utilizan para colocar el dato que representa una instrucción para el modulo LCD o
un carácter alfa numérico. El Bus de datos es de 8 Bits de longitud y el Bit menos
significativo esta representado en el Pin numero 7, el Pin mas significativo esta
representado en el Pin numero 14

Los Pines 15 y 16: estarán destinados para suministrar la corriente al Back Light.
Es importante conocer que no todos los módulos LCD disponen del Back Light
aunque tenga los pines de conexión en el circuito impreso.

Tiempos mínimos requeridos para que una instrucción o un dato puedan ser
ejecutados.

Los Pines de control ( E, RS y E/W ) están estrechamente relacionados ya que por


medio de ellos podemos especificar si queremos ejecutar una instrucción o leer /
escribir un dato en la pantalla o la memoria RAM; sin embargo existe una
condición importante que deberá tomarse en cuenta referida directamente al
tiempo necesario que se necesita para cambiar de un estado a otro en los pines
de control. ( E, RS y R/W ). En el caso de que este tiempo sea mas pequeño que
el tiempo mínimo requerido, entonces el modulo LCD no tendrá el tiempo
suficiente para responder a las instrucciones solicitadas por el usuario y por
consecuencia se perderán los datos o instrucciones según sea el caso.
En otras palabras, las personas suelen cometer un error común cuando se esta
intentando hacer funcionar un modulo LCD en el cual no consideran la velocidad
de proceso del microprocesador o el microcontrolador específicamente en los
pines de control ( E, RS y R/W ), esto quiere decir que si usted tuviera conectado
un modulo LCD a un microcontrolador que tiene una velocidad de proceso
demasiado alta en los pines de control, cuando se ejecuta una solicitud de
cualquier tipo ( escritura / lectura e Instrucción. ), el modulo LCD no tendrá la
capacidad de entender la solicitud hecha por el microcontrolador ya que esta se
ejecuto demasiado rápida. Para ello los programas o los circuitos electrónicos que
manejan un modulo LCD deberán respetar los siguientes diagramas de tiempo:

Diagrama de tiempo para una Instrucción:

Para enviarle una instrucción al modulo, primero hay que colocar la instrucción en
el bus de datos ( Pines del 7 al 14 ). Una vez que esta presente la instrucción en el
bus de datos se procede a ejecutar el diagrama de tiempo requerido para una
instrucción en los pines de control. Este diagrama de tiempo es muy sencillo de
entender, tan solo usted deberá colocar el Pin RS = 0, el Pin R/W = 0 y el Pin E =
0; Una vez colocados los pines con las tensiones mencionadas, proceda a
cambiar el estado del Pin E = 1. El nuevo estado de este Pin "E" deberá
permanecer por lo menos 450 ns antes de volver a cambiar de estado para que la
pantalla pueda entender la instrucción.
Gráfico 4. Diagrama de tiempos para una instrucción.

Diagrama de tiempo para escribir un dato:

Para escribir un dato en el modulo LCD, primero hay que colocar el dato en el bus
( Pines del 7 al 14 ). Una vez que esta presente el dato en el bus se procede a
ejecutar el diagrama de tiempo requerido para escribir un dato en los pines de
control. Este diagrama de tiempo es muy sencillo de entender, tan solo usted
deberá colocar el Pin RS = 1, el Pin R/W = 0 y el Pin E = 0; Una vez colocados los
pines con las tensiones mencionadas, proceda a cambiar el estado del Pin E = 1.
El nuevo estado de este Pin "E" deberá permanecer por lo menos 450 ns antes de
volver a cambiar de estado para que la pantalla pueda entender la instrucción.

Gráfico 5. Diagrama de tiempos para escribir un dato

Diagrama de tiempo para leer un dato

Para leer un dato de la pantalla o la memoria RAM en el modulo LCD, los pines de
control deberán estar colocados como sigue: Pin RS = 1, Pin R/W = 1 y el Pin E =
0. Una vez colocados los pines con las tensiones mencionadas, proceda a
cambiar el estado del Pin E =1. El nuevo estado de este Pin "E" deberá
permanecer por lo menos 450 ns antes de volver a cambiar de estado para que la
pantalla pueda entender la instrucción.
Gráfico 6. Diagrama de tiempo para leer un dato

Nota importante:

Nótese que en los tres diagramas de tiempos el Pin denominado como "E" tiene
que estar previamente en el estado lógico "CERO", posteriormente se cambia el
estado lógico a "UNO" la cual permanecerá por lo menos unos 450 nano
segundos y finalmente vuelve al estado lógico" CERO ", en el preciso momento
que el Pin "E" del modulo LCD tiene el flanco de bajada, es cuando se ejecuta la
instrucción o el dato presente en el bus de control.

Bus de Datos de 4 y 8 Bits de Longitud

El Bus de datos de un modulo LCD puede ser configurado para trabajar con 4 Bits
y con 8 Bits. Para los diseños electrónicos que están limitados por la cantidad de
líneas utilizadas en el Bus de datos, podrán utilizar un bus de datos con una
longitud de 4 Bits; sin embargo si este no fuera su caso, podrá utilizar el bus de
datos completo de 8 Bits. Las señales de control ( RS - R/W - E ) y los diagramas
de tiempo explicados anteriormente, trabajan igual sea para un bus de datos de 4
Bits o de 8 Bits. Sin embargo, si usted esta interesado en trabajar el bus de datos
con una longitud de 8 Bits, deberá saber que cuando se enciende el modulo LCD
la configuración para 8 Bits entra por defecto; es decir que no necesitara
programarse, pero la configuración del bus de datos con una longitud de 4 Bits
requiere una secuencia cuidadosa de instrucciones previas inmediatamente
después de encender el modulo LCD.

La longitud escogida para trabajar el bus de datos deberá hacerse en el principio


de la programación del modulo LCD. En la siguiente imagen se puede observar la
inicialización de un modulo LCD para trabajar con un bus de datos de 8 (izquierda)
y 4 Bits (Derecha).
Gráfico 7. Inicializaciones para bus de datos de 4 u 8 bits

Inicialización del modulo LCD

Todo modulo LCD deberá inicializarse, esta inicialización indicara como deberá
operar la pantalla. La inicialización representa las instrucciones que deberán ser
ejecutadas por el modulo LCD antes de su funcionamiento normal. Las
instrucciones que están dentro de la inicialización solamente se ejecuta después
que se enciende el modulo LCD y no podrán ser cambiadas posteriormente. Por
ejemplo tenemos algunos parámetros que pueden ser ejecutados en la
inicialización antes de comenzar a funcionar nuestro modulo LCD:

Selección de la longitud del bus de datos ( 4 Bits / 8 Bits ).

Activar el numero de líneas que se visualizaran el el modulo LCD.

Encender el Modulo LCD.

Las siguientes instrucciones también podrán ser colocadas en la inicialización, con


la diferencia que podrán ser cambiadas en cualquier parte del programa.

Mantener el mensaje fijo y desplazar el cursor.


Desplazar el mensaje y mantener el cursor fijo.

Hacer que el carácter señalado parpadee o no.

Conjunto de Instrucciones básicas de un modulo LCD:

La siguiente tabla representa el conjunto de instrucciones de un modulo LCD, en


ella se muestran toda la información necesaria que se requiere para cada
instrucción, pero posteriormente se da una explicación mas amplia de algunas de
ellas.

TABLA N-. 1: INSTRUCCIONES BASICAS

CODIGO Tiempo
Instrucción. Descripción de
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 ejecución

Borra la
pantalla y
Borrar retorna el
0 0 0 0 0 0 0 0 0 1 1.64 mS.
Pantalla cursor a la
dirección 0
( Home )

Retorna el
cursor al
Cursor
0 0 0 0 0 0 0 0 1 * inicio 1.64 mS.
Home
( Dirección
o)

Modo de 0 0 0 0 0 0 0 1 I/D S Donde I/D=0 40 uS.


entrada de Decremente
caracteres la posición
del cursor,
I/D=1
incrementa
la posición
del cursor,.
S=0 El texto
de la
pantalla no
se desplaza,
S=1 El texto
de la
pantalla se
desplaza en
el momento
que se
escribe un
carácter

Donde D=0
Pantalla
apagada,
D=1 Pantalla
encendida,
C=0 Cursor
apagado,
Apagado y
C=1 Cursor
encendido
0 0 0 0 0 0 1 D C B encendido, 40 uS..
de la
B=0
pantalla.
Intermitencia
del cursor
apagado,
B=1
Intermitencia
del cursor
encendido.

Cursor and
Display 0 0 0 0 0 1 S/C R/L * *   40 uS.
Shift

Funtion Set 0 0 0 0 1 DL N F * *   40 uS.

Set CG
RAM 0 0 0 1 ACG   40 uS.
address

Set DD
RAM 0 0 1 ADD   40 uS.
address
Ready busy
flag &0 1 BF AC   1 uS.
address

Write data
to CG or 1 0 Escribir el Dato   120 uS.
DD RAM

Read data
to CG or 1 1 Leer el Dato   40 uS.
DD RAM

La tabla número dos, esta referida a las nomenclaturas utilizadas en la tabla


numero uno

Tabla 2: NOMENCLATURAS

Nomenclatura Variable = 1 Variable = 0

I/D=1 Incrementa el I/D=0 Decrementa el Cursor


I/D
Cursor en una posición en una posición.

D D=1 Pantalla Encendida D=0 Pantalla Apagada.

C C=1 Cursor Encendido. C=0 Cursor Apagado.

B=1 Intermitencia del B=0 Intermitencia del cursor


B
cursor encendida. apagado

S/C=1 Mover todo el


S/C S/C=0 Mover el cursor.
texto.

R/L=1 Mover todo el texto R/L=1 Mover todo el texto a


R/L
a la izquierda. la derecha.

DL=1 Bus de datos de 8


DL DL=0 Bus de datos de 4 Bits.
Bits.

S=1 Desplazamiento del S=0 No desplazamiento del


S
texto. texto
BF=1 Operación Interna BF=0 No puede aceptar
BF
en progreso. instrucción

F=1 Matriz para el F=0 Matriz del carácter de 5


F
carácter de 5 X 10 dots x 7 Dost

N=1 Activación de dos


N N=0 Activación de 1 línea
líneas.

La tabla número tres, esta referida a las abreviaturas utilizadas en la tabla numero
uno

Tabla 3: ABREVIATURAS

Abreviatura  

DD RAM Display Data RAM

CG RAM Generador de Caracteres RAM

Conexión de un modulo LCD a un Microcontrolador PIC16F84.

En la actualidad los microcontroladores son los elementos electrónicos de mayor


utilidad y ahora describimos en detalle como utilizar un modulo LCD con un
microcontrolador de la empresa Microchip modelo PIC16F84.

La conexión entre un módulo LCD y un microcontrolador PIC16F84 debe


realizarse como se ilustra en la siguiente gráfica:
Gráfico 8. Esquema del circuito

Para ilustrar el uso del módulo LCD hemos desarrollado un programa que pasa un
aviso deslizante en la pantalla de cristal liquido. Para ello hemos utilizado el
paquete de software MPLAB.
Gráfico 9. Paquete MPLAB

El programa

El código fuente del programa en ensamblador es el siguiente:

;practica numero 4 del laboratorio

;manejo de un modulo LCD

list p=16f84

indf equ 0h

tmro equ 1

pc equ 2

status equ 3

fsr equ 4

ptoa equ 5

ptob equ 6

r0c equ 0ch

r0d equ 0dh

r13 equ 13h

z equ 2h

c equ 0h

w equ 0h

r equ 1h

e equ 1h

rs equ 0h

org 0
goto inicio

org 05

retardo movlw 0ffh

movwf r13

decre decfsz r13,r

goto decre

retlw 0

control bcf ptoa,rs

goto dato2

dato bsf ptoa,rs

dato2 bsf ptoa,e

movwf ptob

call retardo

bcf ptoa,e

call retardo

retlw 0

tabla2 addwf pc,r

retlw "c"

retlw "u"

retlw "r"

retlw "s"

retlw "o"

retlw " "


retlw "d"

retlw "e"

retlw " "

retlw "m"

retlw "i"

retlw "c"

retlw "r"

retlw "o"

retlw "c"

retlw "o"

retlw "n"

retlw "t"

retlw "r"

retlw "o"

retlw "l"

retlw "a"

retlw "d"

retlw "o"

retlw "r"

retlw "e"

retlw "s"

retlw " "

retlw "p"
retlw "i"

retlw "c"

retlw " "

retlw " "

retlw " "

retlw " "

retlw " "

retlw 0

inicio movlw 0fch

tris ptoa

movlw 00

tris ptob

begin movlw 30h

call control

movlw 07h

call control

movlw 0ch

call control

muestra movlw 0

movwf r0c

ciclo movf r0c,w

call tabla2

call dato
movlw 09fh

movwf r0d

reta1 call retardo

call retardo

decfsz r0d,r

goto reta1

incf r0c,r

movlw 28h

xorwf r0c,w

btfss status,z

goto ciclo

goto muestra

end

Archivo .LST

El archivo .LST generado al ensamblar el código fuente es:

LOC OBJECT CODE LINE SOURCE TEXT

VALUE

00001 ;practica numero 4 del laboratorio

00002 ;manejo de un modulo LCD

00003 list p=16f84

00004

00000000 00005 indf equ 0h

00000001 00006 tmro equ 1


00000002 00007 pc equ 2

00000003 00008 status equ 3

00000004 00009 fsr equ 4

00000005 00010 ptoa equ 5

00000006 00011 ptob equ 6

0000000C 00012 r0c equ 0ch

0000000D 00013 r0d equ 0dh

00000013 00014 r13 equ 13h

00000002 00015 z equ 2h

00000000 00016 c equ 0h

00000000 00017 w equ 0h

00000001 00018 r equ 1h

00000001 00019 e equ 1h

00000000 00020 rs equ 0h

00021

0000 00022 org 0

0000 2839 00023 goto inicio

0005 00024 org 05

00025

0005 30FF 00026 retardo movlw 0ffh

0006 0093 00027 movwf r13

00028

0007 0B93 00029 decre decfsz r13,r


0008 2807 00030 goto decre

0009 3400 00031 retlw 0

00032

000A 1005 00033 control bcf ptoa,rs

000B 280D 00034 goto dato2

00035

000C 1405 00036 dato bsf ptoa,rs

00037

000D 1485 00038 dato2 bsf ptoa,e

000E 0086 00039 movwf ptob

000F 2005 00040 call retardo

0010 1085 00041 bcf ptoa,e

0011 2005 00042 call retardo

0012 3400 00043 retlw 0

00044

0013 0782 00045 tabla2 addwf pc,r

0014 3463 00046 retlw "c"

0015 3475 00047 retlw "u"

0016 3472 00048 retlw "r"

0017 3473 00049 retlw "s"

0018 346F 00050 retlw "o"

0019 3420 00051 retlw " "

001A 3464 00052 retlw "d"


001B 3465 00053 retlw "e"

001C 3420 00054 retlw " "

001D 346D 00055 retlw "m"

001E 3469 00056 retlw "i"

001F 3463 00057 retlw "c"

0020 3472 00058 retlw "r"

0021 346F 00059 retlw "o"

0022 3463 00060 retlw "c"

0023 346F 00061 retlw "o"

0024 346E 00062 retlw "n"

0025 3474 00063 retlw "t"

0026 3472 00064 retlw "r"

0027 346F 00065 retlw "o"

0028 346C 00066 retlw "l"

0029 3461 00067 retlw "a"

002A 3464 00068 retlw "d"

002B 346F 00069 retlw "o"

002C 3472 00070 retlw "r"

002D 3465 00071 retlw "e"

002E 3473 00072 retlw "s"

002F 3420 00073 retlw " "

0030 3470 00074 retlw "p"

0031 3469 00075 retlw "i"


0032 3463 00076 retlw "c"

0033 3420 00077 retlw " "

0034 3420 00078 retlw " "

0035 3420 00079 retlw " "

0036 3420 00080 retlw " "

0037 3420 00081 retlw " "

0038 3400 00082 retlw 0

00083

0039 30FC 00084 inicio movlw 0fch

003A 0065 00085 tris ptoa

003B 3000 00086 movlw 00

003C 0066 00087 tris ptob

00088

003D 3030 00089 begin movlw 30h

003E 200A 00090 call control

003F 3007 00091 movlw 07h

0040 200A 00092 call control

0041 300C 00093 movlw 0ch

0042 200A 00094 call control

00095

0043 3000 00096 muestra movlw 0

0044 008C 00097 movwf r0c

00098
0045 080C 00099 ciclo movf r0c,w

0046 2013 00100 call tabla2

0047 200C 00101 call dato

0048 309F 00102 movlw 09fh

0049 008D 00103 movwf r0d

00104

004A 2005 00105 reta1 call retardo

004B 2005 00106 call retardo

004C 0B8D 00107 decfsz r0d,r

004D 284A 00108 goto reta1

004E 0A8C 00109 incf r0c,r

004F 3028 00110 movlw 28h

0050 060C 00111 xorwf r0c,w

0051 1D03 00112 btfss status,z

0052 2845 00113 goto ciclo

0053 2843 00114 goto muestra

00115

00116 end

SYMBOL TABLE

LABEL VALUE

__16F84A 00000001

begin 0000003D

c 00000000
ciclo 00000045

control 0000000A

dato 0000000C

dato2 0000000D

decre 00000007

e 00000001

fsr 00000004

indf 00000000

inicio 00000039

muestra 00000043

pc 00000002

ptoa 00000005

ptob 00000006

r 00000001

r0c 0000000C

r0d 0000000D

r13 00000013

reta1 0000004A

retardo 00000005

rs 00000000

status 00000003

tabla2 00000013

tmro 00000001
w 00000000

z 00000002

Conclusiones

 Al trabajar con un módulo LCD, debemos configurar su bus de datos como


de 4 u 8 bits.
 El módulo LCD posee puertos para la entrada de datos y a través de ellos
se pueden ingresar caracteres a la pantalla (R/W=0) o se puede leer de él
(R/W=1).
 Un módulo LCD posee dentro de sí mismo un microcontrolador.
 Se pueden enviar a la pantalla del móculo LCD la mayoría de los caracteres
de una tabla ASCII.

Autor:

Mauricio Alberto Orozco Salguero

Descripción: La pantalla de cristal


liquido o LCD (Liquid Crystal Display)
es un dispositivo µControlado de
visualización grafico para la
presentación de caracteres, símbolos
o incluso dibujos (en algunos
modelos), es este caso 
dispone de 2 filas de 16 caracteres cada una y cada carácter dispone de una
matriz de 5x7 puntos (pixels), aunque los hay de otro número de filas y caracteres.
Este dispositivo esta gobernado internamente por un microcontrolador Hitachi
44780 y regula todos los parámetros de presentación, este modelo es el mas comúnmente
usado y esta información se basará en el manejo de este u otro LCD compatible.

Caracteristicas principales:
-Pantalla de caracteres ASCII, además de los caracteres Kanji y Griegos.
-Desplazamiento de los caracteres hacia la izquierda o la derecha.
-Proporciona la dirección de la posición absoluta o relativa del caracter.
-Memoria de 40 caracteres por línea de pantalla.
-Movimiento del cursor y cambio de su aspecto.
-Permite que el usuario pueda programar 8 caracteres.
-Conexión a un procesador usando un interfaz de 4 u 8 bits

Funcionamiento: Para comunicarse con la pantalla LCD podemos hacerlo por


medio de sus patitas de entrada de dos maneras posibles, con bus de 4 bits o con
bus de 8 bits, este ultimo es el que explicare y la rutina también será para este. En
la siguiente figura vemos las dos maneras posibles de conexionar el LCD con un
pic16F84.

Conexionado con bus de 4 bits

Conexionado con bus de 8 bits

Como puede apreciarse el control de contraste se realiza al dividir la alimentación


de 5V con una resistencia variable de 10K.
Las líneas de datos son triestado, esto indica que cuando el LCD no esta
habilitado sus entradas y salidas pasan a alta impedancia.

Descripción de pines:

PIN Nº SIMBOLO DESCRIPCION


1 Vss Tierra de alimentación GND
2 Vdd Alimentación de +5V CC
3 Vo Contraste del cristal liquido. ( 0 a +5V )
Selección del registro de control/registro de datos: 
4 RS          RS=0 Selección registro de control
         RS=1 Selección registro de datos
Señal de lectura/escritura:
5 R/W          R/W=0 Escritura (Write)
         R/W=1 Lectura (Read)
Habilitación del modulo:
6 E          E=0 Módulo desconectado
         E=1 Módulo conectado
7-14 D0-D7 Bus de datos bidireccional.
 
JUEGOS DE INSTRUCCIONES:
Estas son las instrucciones para el control del modulo LCD 
Hitachi 44780 o compatible.
 CLEAR DISPLAY                                                                               
Borra el módulo LCD y coloca el cursor en la primera posición 
(dirección 0). Pone el bit I/D a 1 por defecto.
 
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 0 0 1
Tiempo de ejecución: 1.64mS
 
 HOME                                                                                               
Coloca el cursor en la posición de inicio (dirección 0) y hace que el display
comience a desplazarse desde la posición original. El contenido de la memoria
RAM de datos de visualización (DD RAM) permanece invariable. La dirección de
la memoria RAM de datos para la visualización (DD RAM) es puesta a 0.
 
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 0 1 X
Tiempo de ejecución: 1.64mS
 
 ENTRY MODE SET                                                                            
Establece la dirección de movimiento del cursor y especifica si la visualización se
va desplazando a la siguiente posición de la pantalla o no. Estas operaciones se
ejecutan durante la lectura o escritura de la DD RAM o CG RAM. Para visualizar
normalmente poner el bit S=0.
 
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 1 I/D S
Tiempo de ejecución: 40µS
 
 DISPLAY ON/OFF CONTROL                                                             
Activa o desactiva poniendo en ON/OFF tanto al display (D) como al cursor (C) y
se establece si este último debe o no parpadear (B).
 
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 1 D C B
Tiempo de ejecución: 40µS
 
 CURSOR OR DISPLAY SHIFT                                                            
Mueve el cursor y desplaza el display sin cambiar el contenido de la memoria de
datos de visualización DD RAM.
 
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 1 S/C R/L X X
Tiempo de ejecución: 40µS
 
 FUNCTION SET                                                                                 
Establece el tamaño de interfase con el bus de datos (DL), número de líneas del
display (N) y tipo de carácter (F)
 
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 1 DL N F X X
Tiempo de ejecución: 40µS
 
 SET THE CG RAM ADDRESS                                                             
El módulo LCD además de tener definidos todo el conjunto de caracteres ASCII,
permite al usuario definir 4 u 8 caracteres gráficos. La composición de estos
caracteres se va guardando en una memoria llamada CG RAM con capacidad
para 64 bytes. Cada carácter gráfico definido por el usuario se compone de 16 u 8
bytes que se almacenan en sucesivas posiciones de la CG RAM.
 
Mediante esta instrucción se establece la dirección de memoria CG RAM a partir
de la cual se irán almacenando los bytes que definen un carácter gráfico.
Ejecutando este comando todos los datos que se lean o escriban posteriormente,
lo hacen desde esta memoria CG RAM.
 
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 1
Dirección de la CG RAM
Tiempo de ejecución: 40µS
 
 SET THE DD RAM ADDRESS                                                             
Los caracteres o datos que se van visualizando, se van almacenando en una
memoria llamada DD RAM para de aquí pasar a la pantalla.
 
Mediante esta instrucción se establece la dirección de la memoria 
DD RAM a partir de la cual se irán almacenando los datos a visualizar. Ejecutando
este comando, todos los datos que se escriban o lean posteriormente lo harán
desde esta memoria DD RAM. Las direcciones de la 80h a la 8Fh corresponden
con los 16 caracteres del primer renglón y de la C0h a la CFh con los 16
caracteres del segundo renglón, para este modelo de LCD.
 
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 Dirección de la DD RAM
Tiempo de ejecución: 40µS
 
 READ BUSY FLAG & ADDRESS                                                         
Cuando el modulo LCD esta ejecutando cualquiera de estas instrucciones, tarda
un cierto tiempo de ejecución en el que no se debe mandar ninguna instrucción.
Para ello dispone de un flag llamado BUSY (ocupado) que indica que se está
ejecutando una instrucción previa.
 
Esta instrucción de lectura informa del estado de dicho flag además de
proporcionar el valor del contador de direcciones de la CG RAM o de la DD RAM
según la última que se haya empleado.
 
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 1 BF Dirección de la CG RAM o  DD RAM
Tiempo de ejecución: 40µS
 
 WRITE DATA TO GG OR DD RAM                                                      
Mediante este comando se escribe en la memoria DD RAM los datos que se
quieren presentar en pantalla y que serán los diferentes códigos ASCII de los
caracteres a visualizar.
 
Igualmente se escribe en la memoria CG RAM los diferentes bytes que permiten
confeccionar caracteres gráficos a gusto del usuario.
 
El escribir en uno u otro tipo de memoria depende de si se ha empleado
previamente la instrucción de direccionamiento DD RAM o la de direccionamiento
CG RAM.
 
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 0 Código ASCII o byte del carácter gráfico
Tiempo de ejecución: 40µS
 
 READ DATA FROM CG RAM OR DD RAM                                           
Mediante este comando se lee de la memoria DD RAM los datos que haya
almacenados y que serán los códigos ASCII de los caracteres almacenados.
 
Igualmente se lee de la memoria CG RAM los diferentes bytes con los que se ha
confeccionado un determinado carácter gráfico.
 
El leer de uno u otro tipo de memoria depende de si se ha empleado previamente
la instrucción de direccionamiento de la DD RAM o la de direccionamiento CG
RAM.
 
 
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 1 Código ASCII o byte del carácter gráfico
Tiempo de ejecución: 40µS
 

 
ABREVIATURAS
Abreviaturas empleadas en los códigos anteriores:
 
1 - Desplaza la visualización cada vez que se escribe un dato
S
0 - Modo normal
1 - Incremento del cursor
I/D
0 - Decremento del cursor
1 - Desplaza el display
S/C
0 - Mueve el cursor
1 - Desplazamiento a la derecha
R/L
0 - Desplazamiento a la izquierda
1 - Módulo ocupado
BF
0 - Módulo disponible
1 - Bus de datos de 8 bits
DL
0 - Bus de datos de 4 bits
1 - LCD de dos líneas
N
0 - LCD de una línea
1 - Carácter de 5 x 10 puntos
F
0 - Carácter de 5 x 7 puntos
1 - Parpadeo del cursor ON
B
0 - Parpadeo del cursor OFF
1 - Cursor ON
C
0 - Cursor OFF
1 - Display ON
D
0 - Display OFF
X Indeterminado
 
 
Juego de caracteres:

Descripción: La siguiente librería básica de rutinas es para controlar un LCD


Hitachi 44780 o compatible.

Los datos o comandos a enviar al LCD los meteremos en el acumulador W antes


de hacer la llamada a cualquiera de las rutinas siguientes. 

 
Genera un pulso de 1µS por PORTB,2 patita 6
(Enable) del LCD. Si se usa una velocidad de
LCD_E
micro diferente de 4MHz habrá que ajustar
este tiempo.
Chequea si el LCD esta ocupado (BUSY) y
LCD_BUSY
retorna de la rutina cuando ya no lo este.
Pone al LCD en modo de recibir comandos ,
LCD_REG
espera a que no este ocupado y va a LCD_E.
Pone el LCD en modo datos y manda el byte
LCD_DATOS
presente en W que será mostrado en pantalla.
LCD_INI Inicializacion del modulo LCD segun los
tiempo marcados por el fabricante. Bus de 8
bits, 2 lineas de visualizacion y caracteres de
5 x 7 puntos.
Configura los puertos del PIC para ser usados
LCD_PORT
con el LCD.
 

Rutina
LCD.lib
LCD 2x16

Ejemplo: El siguiente ejemplo muestra lo fácil que es manejar un LCD. Lo que


hace básicamente es configurar el LCD, los puertos del PIC y luego mandar los
datos según los va cogiendo de la tabla de datos, para mostrar en el LCD la típica
frase "HOLA MUNDO".

;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>

INICIO      CLRF         Digito             ;Pone a 0 la variable digito 


               CALL         LCD_PORT    ;Puertos en modo LCD 
               BCF           RA,0              ;Desactiva RS del modulo LCD
               BCF           RA,2              ;Desactiva E del modulo LCD 
START    CALL        LCD_INI          ;Inicia LCD (CFG puertos...) 
               MOVLW    b'00000001'   ;Borrar LCD y Home 
               CALL        LCD_REG 
               MOVLW    b'00000110'  
               CALL        LCD_REG 
               MOVLW    b'00001100'   ;LCD On, cursor Off,Parpadeo Off 
               CALL        LCD_REG 
               MOVLW   0x80               ;Direccion caracter
               CALL        LCD_REG 

REPETIR  MOVF      Digito,w          ;W=Digito


               CALL       DATO_1          ;Coge el caracter 
               IORLW     0                      ;Compara 
               BTFSC     STATUS,2       ;Es el ultimo? 
               GOTO      acabar            ;Si 
               CALL       LCD_DATOS   ;Visualiza caracter 
               INCF        Digito,f             ;Incrementa numero de Digito
               GOTO     REPETIR           ;Vuelve a escribir

acabar   nop
              goto        acabar              ;Buclee infinito

;<<<<<<---------------------- TABLA DE DATOS ------------------------->>>>>>> 


DATO_1 ADDWF  PCL,1 
               RETLW  'H' 
               RETLW  'O'
               RETLW  'L' 
               RETLW  'A' 
               RETLW  ' ' 
               RETLW  'M' 
               RETLW  'U' 
               RETLW  'N' 
               RETLW  'D' 
               RETLW  'O' 
               RETLW 0x00 

PROGRAMA : LCD.LIB
; Funcion : Libreria de funciones para controlar un display
; LCD de 2x16 lineas complatible con Hitachi.
;
; Revision : 1.0 Programa para : PIC16F84
; CPU Clock : 4 MHz Reloj instruccion : 1 us
; WDT : Deshabilitado Tipo de reloj : XT
; Code Prot : OFF
;****************************************** http://www.x-robotics.com *******

LCD_E BSF RA,2 ;Activa señal E


NOP ;Espera 1uS
BCF RA,2 ;Desactiva señal E
RETURN

LCD_BUSY BSF RA,1 ;Pone el LCD en modo lectura


BSF STATUS,5 ;Selecciona el Banco 1
MOVLW 0xFF
MOVWF TRISB ;Puerta B act£a de entrada
BCF STATUS,5 ;Selecciona el Banco 0
BSF RA,2 ;Activa el LCD (Señal E)
NOP
L_BUSY BTFSC RB,7 ;Chequea el bit BUSY
GOTO L_BUSY ;Est  a "1" (Ocupado)
BCF RA,2 ;Desactiva el LCD (Se¤al E)
BSF STATUS,5 ;Selecciona el Banco 1
CLRF TRISB ;Puerta B actua como salida
BCF STATUS,5 ;Selecciona el Banco 0
BCF RA,1 ;Pone el LCD en modo escritura
RETURN

LCD_REG BCF RA,0 ;Desactiva RS (Modo instruccion)


MOVWF RB ;Saca el codigo de instruccion
CALL LCD_BUSY ;Espera a que se libere el LCD
GOTO LCD_E ;Genera pulso en señal E

LCD_DATOS BCF RA,0 ;Desactiva RS (Modo instrucci¢n)


MOVWF RB ;Valor ASCII a sacar por RB
CALL LCD_BUSY ;Espera a que se libere el LCD
BSF RA,0 ;Activa RS (Modo dato)
GOTO LCD_E ;Genera pulso en señal E

LCD_INI MOVLW b'00111000'


CALL LCD_REG ;Codigo de instruccion
CALL DELAY_5MS ;Temporiza 5 mS.
MOVLW b'00111000'
CALL LCD_REG ;Codigo de instruccion
CALL DELAY_5MS ;Temporiza 5 mS.
MOVLW b'00111000'
CALL LCD_REG ;Codigo de instruccion
CALL DELAY_5MS ;Temporiza 5 mS.
RETURN

LCD_PORT BSF STATUS,5 ;Selecciona el banco 1 de datos


CLRF TRISB ;RB se programa como salida
MOVLW b'00011000' ;RA<4:3> se programan como entradas
MOVWF TRISA ;RA<2:0> se programan como salidas
BCF STATUS,5 ;Selecciona el banco 0 de datos

;MOVLW b'00000000'
;MOVWF INTCON ;Desactiva interrupciones
BCF RA,0 ;Desactiva RS del modulo LCD
BCF RA,2 ;Desactiva E del modulo LCD

;****************************************************************************
;DELAY_5MS genera una temporizacion de 5mS necesario para la secuencia de
;inicio del LCD

DELAY_5MS movlw 0x1a


movwf DATO_B
clrf DATO_A
DELAY_1 decfsz DATO_A,1
goto DELAY_1
decfsz DATO_B,1
goto DELAY_1
return

S-ar putea să vă placă și