Вы находитесь на странице: 1из 10

2.

7 MDULO LCD
Los mdulos LCD son muy tiles para ver cualquier tipo de informacin. La
pantalla de cristal lquido est conformada por una, dos o cuatro lneas de 8, 16, 20, 24
40 caracteres de 5x7 pixels c/u. Los ms comunes son los mdulos LCD de 16x2,
16x4, con y sin backlight). La figura 2.10 a, muestra una vista de mdulo LCD 16 x2 de
16 pines (los pines 15 y 16 corresponden al backlight, control de luz de fondo). Las
conexiones para controlar el contraste y el backlight del LCD se indican en la figura
2.10 b. Dependiendo el puerto que se utilice los dems pines se conectan al
microcontrolador como veremos ms adelante.

a. Imagen de un mdulo LCD tpico.

b. Conexiones de las seales de contraste y backlight para LCD que disponen


de esos terminales.
Figura 2.10. Mdulo LCD.

El compilador CCS incluye un archivo (driver) lcd.c. El driver lcd.c est


configurado para trabajar con el puerto d. Modificando este fichero es posible usarlo
para cualquier puerto. El fichero se llama con #include <lcd.c> y algunas funciones
que presenta son:
Las instrucciones bsicas para manejar el LCD son las siguientes:
lcd_init();
Es la primera funcin que debe ser llamada. Borra el LCD y lo configura en
formato de 4 bits con dos lneas y con caracteres de 5x8 puntos, en modo encendido,
cursor apagado y sin parpadeo. Configura el LCD con un autoincremento del puntero de
direcciones y sin desplazamiento del display real.
lcd_gotoxy(byte x, byte y);
Indica la posicin de acceso al LCD. Por ejemplo (1,2) indica la primera
posicin de la segunda lnea; (2,1) segunda posicin de la primera lnea (El LCD
tratado tiene 16 posiciones en cada lnea).
lcd_getc (byte x, byte y);
Lee el carcter de la posicin (x,y).
lcd_putc (char s);
Escribe la variable en la posicin correspondiente, s es una variable tipo char.
Adems se puede incluir:
\f se limpia el LCD.
\n el cursor cambia de lnea.
\b el cursor retrocede una posicin.
Existe la funcin printf que es ms verstil para trabajar en el LCD.
printf (string)
printf (cstring, valores,,)
printf(fname, cstring, valores,,)
string es una cadena o array de caracteres, valores es una lista de variables
separadas por comas, y fname es una funcin.
El formato es %nt,

Dnde:
n es opcional y puede ser:
1-9 especifica el nmero de caracteres.
01-09 indica la cantidad de ceros a la izquierda.
1.1-9.9 para punto flotante.
t puede indicar un: carcter c, cadena o caracteres, entero sin signo u, entero con
signo d, entero largo sin signo Lu, Entero largo con signo Ld, entero hexadecimal
(minsculas) x, entero hexadecimal (maysculas) X, entero largo hexadecimal
(minsculas) Lx, entero largo hexadecimal (maysculas) LX, flotante con truncado f,
flotante con redondeo g, flotante el forma exponencial e, entero sin signo con decimales
insertados w.

2.7.1 Manejo del mdulo LCD usando Puerto D


El siguiente programa enva el conocido mensaje "HOLA MUNDO" al LCD.
Abran el archivo C:\Archivos de programa\PICC\Drivers\lcd.c, y ah les muestra la
forma de conectar el LDC a los pines del puerto D, como se indica en la figura 2.11. Se
debe aclarar que el archivo utilizado corresponde al CCS versin v4.084.

Figura 2.11. Conexin de pines del PIC con el LCD


Ejercicio 2.12. Manejo del mdulo LCD por el Puerto D.
Algunos aspectos importantes para manejar el LCD son:

Incluir la librera que maneja el LCD: #include <lcd.c>


Inicializar el LCD: lcd_init(); esta instruccin arranca el LCD.
Situar el cursor en la posicin columna y fila desde donde se visualice los
caracteres: lcd_gotoxy(4,1); en este caso est indicando que empiece en la
columna 4 fila 1.

Escribir el mensaje: lcd_putc("HOLA MUNDO!!\n LCD en CCS"). En la


instruccin el argumento \n. Por tanto, en la primera fila a partir de la
columna 4 en el LCD se indicar la palabra HOLA MUNDO!!, y en la
segunda fila a partir de la columna 4 se mostrar LCD en CCS. Cada espacio
en blanco que separa los caracteres o leras (\n LCD) ocupan una posicin
en las columnas del LCD.

PROGRAMA:
#include <18f4550.h>
//Librera para usar el PIC18F4550.
#fuses HS, NOPROTECT, NOWRT, NOPUT, NOWDT //Configuracin de fusibles.
#use delay (clock=12000000) // FOSC =12MHz.
#include <lcd.c>
//Librera lcd.c
set_tris_d(0x00);
//Identificador para el puerto d como salida.
void main(void)
//Funcin principal main.
{
lcd_init();
// Inicializa el LCD.
lcd_gotoxy(4,1);
//Sita el cursor en columna 4, fila 1.
lcd_putc("HOLA MUNDO!!\n LCD en CCS"); // Escribe en el LCD.
}

Para cambiar el cursor de una lnea a otra o posicionar en una columna distinta
la instruccin lcd_gotoxy(x,y); es de mucha utilidad. En el presente ejercicio se tiene el
mismo resultado si se escribe el cdigo as:
lcd_gotoxy(4,1);
//Sita el cursor en columna 4, fila 1.
lcd_putc("HOLA MUNDO!! "); //Escribe en el LCD.
lcd_gotoxy(4,2);
//Sita el cursor en columna 4, fila 2.
lcd_putc(LCD en CCS");
// Escribe en el LCD.

Todo depender de las necesidades de diseo y habilidades del programador. El


diagrama de conexiones para realizar las pruebas de funcionamiento de los programas
del mdulo LCD conectado al puerto D, se muestra en la figura 2.12. No estn
consideradas las conexiones del control de contraste y el Bach light. Al implementar el
circuito fsico las conexiones mencionadas se indican en la figura 2.10 b.

Figura 2.12. Conexin del LCD en el puerto D.


Para indicar el valor de una variable se debe utilizar la funcin printf(lcd_putc,"
%d constante ",variable);
Ejercicio 2.13. Contador con visualizacin en LCD.
El ejercicio 2.13, muestra un contador ascendente de 0 a 9 con visualizacin de
datos en el LCD. Para mostrar el valor numrico se utiliza la instruccin
printf(lcd_putc," %d ",i). El argumento %d de la funcin printf indica que el valor de la
variable i es entero decimal.
PROGRAMA:
#include <18f4550.h>
//Librera para usar el PIC18F4550.
#fuses HS, NOPROTECT, NOWRT, NOWDT, NOLVP //Configuracin de fusibles.
#use delay (clock=12000000) //FOSC =12MHz.
#include <lcd.c>
//Librera lcd.c.
int i;
//Variable i.
void main(void)
{
lcd_init();
while (TRUE){
lcd_gotoxy(5,1);
lcd_putc("CONTADOR");

//Funcin principal main


// Inicializa el LCD.
//Inicio del bucle.
//Sita el cursor en 5 columna, 1 fila.
//Escribe CONTADOR.

for (i=0; i<=9;++i)


{
lcd_gotoxy(8,2);
printf(lcd_putc," %d ",i);
delay_ms(500);
}
}
}

//La variable empieza desde 0 hasta 9.


//Sita el cursor en 8 columna, 2 fila.
//Escribe en el LCD el valor actual de i.
//Retardo de 500 ms.
//Fin del bucle infinito.
// Fin del bucle main.

La figura 2.13, indica el resultado obtenido. Se ha capturado la pantalla cuando


el valor de la variable i = 2.

Figura 2.13. Vista parcial del resultado en el LCD.

2.7.2 Manejo del LCD por el puerto B


Para usar el LCD en el puerto B se debe modificar el fichero del lcd.c que se
encuentra en C:\Archivos de programa\PICC\Drivers\lcd.c.
Al abrir el archivo se encuentra la instruccin que est como comentario.
// Un-comment the following define to use port B
//#define use_portb_lcd TRUE
Habilitando est instruccin (quitar los //) y listo.
Si no se quiere modificar internamente el fichero lcd.c, desde el programa en C
se puede definir el puerto a utilizar. Por ejemplo para utilizar el puerto B se debe incluir
la instruccin:
#define use_portb_lcd TRUE

//Define uso del puerto B para manejar el LCD.

Para los puertos A y C puede modificar en las instrucciones del mismo archivo
como se indica:
#if defined use_portb_lcd
//#locate lcd = getenv("sfr:PORTB")
#define set_tris_lcd(x) set_tris_b(x)

#else
//#locate lcd = getenv("sfr:PORTD")
#define set_tris_lcd(x) set_tris_d(x)
Como ya se indic, para utilizar el puerto B se modific el fichero lcd.c y se
renombr por lcdb.c para no afectar al original para usar en este ejercicio. Para el puerto
B se deben conectar como se indica en la tabla 2.9.
PUERTO
BO
B1
B2
B3
B4
B5
B6
B7

LCD
ENABLE
RS
RW
NO UTILIZADO
D4
D5
D6
D7

Tabla 2.9. Conexin de pines entre el puerto B y el LCD.


Ejercicio 2.14. Mdulo LCD usando el puerto B.
PROGRAMA:
#include <18f4550.h>
//Librera para usar el PIC18F4550.
#fuses HS, NOPROTECT, NOPUT, NOWDT, NOLVP //Configuracin de fusibles.
#use delay (clock=12000000) //FOSC =12MHz.
#include <lcdb.c>
//Librera para el manejo del LCD.
void main(void)
//Funcin principal main.
{
lcd_init();
//Inicializa el LCD.
lcd_putc("HOLA MUNDO\n LCD en CCS");
// Escribe en el LCD.
}
// Fin de programa.

El mismo resultado se obtiene si se define el uso del puerto B desde el programa


como ya indic. La instruccin #define use_portb_lcd TRUE, define el uso del puerto B
para conectar al LCD.
#include <18f4550.h>
//Librera para usar el PIC18F4550.
#fuses HS, NOPROTECT, NOPUT, NOWDT, NOLVP //Configuracin de fusibles.
#use delay (clock=12000000) //FOSC =12MHz.
#include <lcd.c>
// Librera para el manejo del LCD.
#define use_portb_lcd TRUE //Define uso del puerto B para manejar el LCD.
void main(void)
//Funcin principal main.
{
lcd_init();
//Inicializa el LCD.
lcd_putc("HOLA MUNDO\n LCD en CCS");
// Escribe en el LCD.
}
// Fin de programa.

La figura 2.14, muestra las conexiones de un LCD usando el puerto B.

Figura 2.14. Conexin del LCD por el puerto B.


Movimiento de texto a la izquierda
En muchas ocasiones para mejorar presentacin o llamar la atencin, se necesita
que el mensaje se mueva. Dado la gran versatilidad del lenguaje C, se puede desarrollar
programas para estas situaciones. El siguiente programa el texto se desplaza a la
izquierda. El primer carcter aparece en la fila 1, columna 16, transcurrido un corto
tiempo (150 ms), se mueve a la columna 15 y aparece el segundo carcter. La secuencia
continua de esa forma hasta completar toda la palabra electromicrodigital. El
desplazamiento contina en la fila 2, repitindose el ciclo.
Ejercicio 2.15. Desplazamiento texto a la izquierda.
PROGRAMA:
//MOVIMIENTO DE TEXTO HACIA LA IZQUIERDA
#include <18f4550.h>
//Librera para usar el PIC18F4550.
#fuses HS, NOPROTECT, NOWRT, NOPUT, NOWDT //Configuracin de fusibles.
#use delay (clock=12000000) //FOSC = 12 MHz.
#include <lcd.c>
//Librera para el manejo del LCD.
const char mensaje[]= {"electromicrodigital"}; //Mensaje a desplegarse en el LCD.

void main(void)
{
char y=1;
signed char x=16;
lcd_init();

//Funcin principal main.


//ndice fila.
//ndice columnas (posiciones).
//Inicializa LCD.

while(TRUE){
//Bucle inicio.
lcd_gotoxy(x,y) ;
//Ubica cursor para escribir mensaje.
lcd_putc(mensaje ) ;
//Muestra por pantalla el mensaje.
delay_ms(150);
//Retardo 150 ms.
x++;
//Incremento ndice de columnas.
if(x>-16){ //Se ha mostrado mensaje entero en la primera fila?.
x=16;
//SI, ndice columna x=-16, para que inicie el ltimo carcter en la
// primera posicin.
y++;
//Incremento ndice fila (mostrar texto en segunda columna).
if(y>2) //Se ha mostrado mensaje por segunda fila?.
y=1;
//SI, restaurar ndice de fila.
}
lcd_putc("\f" ) ;
//Borra pantalla.
}
//Bucle infinito.
}
//Fin del main.

Figura 2.15. Captura parte del resultado del desplazamiento del texto a la izquierda.
Movimiento de texto a la derecha
Aunque el movimiento de texto a la derecha no es muy comn dejar escrito el
cdigo para realizar este desplazamiento. El lector puede realizar el anlisis del cdigo y
comprobar el funcionamiento ya sea en el simulador o armando el circuito con los
componentes reales.
Ejercicio 2.16. Desplazamiento del texto hacia la derecha.
PROGRAMA:
//MOVIMIENTO DE TEXTO HACIA LA DERECHA
#include <18f4550.h>
//Librera para usar el PIC18F4550.
#fuses HS,NOWDT,NOPROTECT,NOPUT, NOLVP //Configuracin de fusibles.
#use delay (clock=12000000) // FOSC = 12 MHz.
#include <lcd.c>
//Librera para el manejo del LCD.
const char mensaje[]= {"electromicrodigital"};
//Mensaje a desplegarse en el LCD.

void main(void)
{
char y=1;
signed char x=-16;
lcd_init();

//Funcin principal main.


//ndice fila.
//ndice columnas (posiciones).
//Inicializa LCD.

while(TRUE){
//Inicio del bucle.
lcd_gotoxy(x,y) ; //Ubica cursor para escribir mensaje.
lcd_putc(mensaje ); //Muestra por pantalla el mensaje.
delay_ms(150);
//Retardo de 150 ms.
x++;
//Incremento ndice de columnas.
if(x>16){
//se ha mostrado mensaje entero en la primera fila?
x=-16;
//SI, ndice columna x=-16, para que inicie el ltimo carcter en la
//primera posicin.
y++;
//incremento ndice fila (mostrar texto en segunda columna).
if(y>2)
//se ha mostrado mensaje por segunda fila?.
y=1;
//SI, restaurar ndice de fila.
}
lcd_putc("\f" ) ;
//Borra pantalla.
}
//Bucle infinito.
}
//Fin del bucle main.

Вам также может понравиться