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

CONTROL DE PANTALLAS LCD

Se acostumbra ha utilizar LCD del tipo HD44780, con un nmero de lneas variable y un nmero de caracteres por lnea tambin variable (por ejemplo, con 2 x 16 se trabaja con dos lneas de 16 caracteres cada una) (ver figura 1).

Figura 1. Patitas de una LCD tpica. El bus de datos es de 8 bits, aunque tambin existe la posibilidad de trabajar con 4 bits (con un menor nmero de caracteres). El compilador C incluye un fichero (driver) que permite trabajar con un LCD. El archivo es LCD2.C y debe llamarse como un #include. Este archivo dispone de varias funciones ya definidas: Figura 2. Disposicin de pines de los dos formatos bsicos de LCD. LCDInit(m, n), donde m es la cantidad de filas y n la cantidad de caracteres Es la primera funcin que debe ser llamada. Borra el LCD y la configura en el formato de 4 bits, con m lneas y con n caracteres de 5 x 8 puntos, en modo encendido, cursor encendido y parpadeando. Configura el LCD con un autoincremento del puntero de direcciones y sin desplazamiento del display real. Ejemplo: LCDInit(2, 16);

LCDCursorXY(x, y) Indica la posicin de acceso al LCD. Por ejemplo (1,1) indica la primera posicin de la primera lnea y (2, 1) indica la primera posicin de la segunda lnea. Ejemplo: LCDCursorXY(2,1);

LCD_Cmd (command) Esta funcin es utilizada por el usuario para enviar comandos hacia la LCD. Algunos comandos son: 0x01 Limpia la pantalla 0x02 Cursor a casa 0x0F Enciende pantalla, cursor subrayado y parpadea.

Binario Hex D6 D5 D4 D3 D2 D1 D0 Clear Display (Limpiar Pantalla) 0 0 0 0 0 0 1 01 Display & Cursor Home (Pantalla & Cursor a Casa) 0 0 0 0 0 1 x 02 03 Character Entry Mode (Modo de Entrada de Carcter) 0 0 0 0 1 I/D S 04 a 07 Display On/Off & Cursor (Pantalla ON/OFF & Cursor) 0 0 0 1 D U B 08 a 0F Display / Cursor Shift (Pantalla / Cambiar Cursor) 0 0 1 D/C R/L x x 10 a 1F Function Set (Establecer Funcin) 0 1 8/4 2/1 10/7 x x 20 a 3F Set CGRAM Address (Fijar Direccin de CGRAM) 1 A A A A A A 40 a 7F Set Display Address (Fijar Direccin de Pantalla) A A A A A A A 80 a FF I/D: 1 = Incrementar*, 0 = Decrementar R/L: 1 = Desplaza hacia la derecha, 0 = Desplaza hacia la izquierda S: 1 = Encender desplaza pantalla, 0 = Apagar desplaza pantalla* 8/4: 1 = interfase de 8 bits*, 0 = Interfase de 4 bits D: 1 = Encender Pantalla, 0 = Apagar Pantalla* 2/1: 1 = modo de 2 lneas, 0 = modo de una lnea* U: 1 = Cursor subrayado, 0 = Cursor no subrayado* 10/7: 1 = formato de 5 x 10, 0 = formato de 5 x 7 B: 1 = Cursor parpadea, 0 = Cursor no parpadea D/C: 1 = Desplaza pantalla, 0 = Mueve cursor x = no importa * = condiciones iniciales Comando D7 0 0 0 0 0 0 0 1

LCD_Out(car) car es una variable de tipo char (carcter). Esta funcin escribe la variable en la posicin correspondiente. Ejemplo: lcd_out('g'); // Muestra la letra g en la LCD (sin las comillas)

El compilador de C ofrece una funcin ms verstil para trabajar con la LCD: printf (string) printf (cstring, values...) printf (fname, cstring, values...) String es una cadena o un array de caracteres, values es una lista de variables separadas por comas y fname es una funcin. El formato es %nt, donde n es opcional y puede ser: 1-9: para indicar cuantos caracteres se deben especificar.

01-09: 1.1-9.9 t puede indicar: c s u D Lu Ld x X Lx LX f g e w

para indicar la cantidad de ceros a la izquierda. para coma flotante.

Carcter. Cadena o caracter. Entero sin signo. Entero con signo. Entero largo sin signo. Entero largo con signo. Entero hexadecimal (minsculas). Entero Hexadecimal (maysculas). Entero largo Hexadecimal (minsculas). Entero largo Hexadedmal (maysculas). Flotante con truncado. Flotante con redondeo. Flotante en formato exponencial. Entero sin signo con decimales insertados. La 1ra cifra indica el total, la 2da el nmero de decimales.

Ahora mostraremos una serie de ejemplos de aplicacin. //****************************************************************** #include <18F458.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=8000000) #include "LCD2.C" //Drivers de la LCD void main() { LCDInit(2,16); lcd_out('g');

// Inicializa tamao de la LCD // Muestra g

while (TRUE) { } } //****************************************************************** printf(LCD_Out, "Azuero"); //Muestra "Azuero" sin las comillas //****************************************************************** char car = "Azuero"; LCD_out(car); //Muestra la letra A en la LCD //****************************************************************** unsigned int8 tmp; tmp = 25; printf(LCD_Out, "n=%u", tmp); // Muestra: n=25 //****************************************************************** unsigned int8 tmp; tmp = 25; printf(LCD_Out, "n=%04u", tmp); // Muestra: n=0025 //****************************************************************** unsigned int8 tmp; tmp = -25; printf(LCD_Out, "n=%u", tmp); // Muestra: n=231 //****************************************************************** unsigned int8 tmp; tmp = -25; printf(LCD_Out, "n=%d", tmp); // Muestra: n=-25

CARACTERES PERSONALIZADOS El controlador LCD2.c permite trabajar con caracteres personalizados de una manera muy sencilla. Para esto se debe definir el carcter en base a los pixeles correspondientes y segn un formato de 5x8, ya que as est preestablecido en el controlador LCD2.C, hasta un mximo de ocho caracteres personalizados se pueden definir. En la figura 3 vemos por ejemplo el patrn de pixeles para el pacman abierto. En base a este patrn la definicin para este carcter personalizado sera: #define pacmanopen 0x0E,0x07,0x03,0x01,0x01,0x03,0x07,0x0E

Figura 3 Pacman abierto

Figura 4. Pacman cerrado

Otro ejemplo se muestra en la Figura 4 donde tenemos el arreglo de pixeles para un pacman con la boca cerrada, en este caso la definicin quedara de la siguiente manera: #define pacmanshut 0x00,0x0F,0x1F,0x01,0x1F,0x0F,0x00,0x00 Una vez definido el formato de los pixeles se debe asignar un nmero a este carcter para que pueda ser enviado a la pantalla LCD mediante la instruccin lcd_out. El comando (o instruccin) en lenguaje C y su debido formato se muestran a continuacin: LCDDefSymbol(0,pacmanopen); En las siguientes lneas mostraremos un programa completo en donde se puede apreciar la verdadera versatilidad de estas pantallas. #include <18F458.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=8000000) #include "LCD2.C" //Drivers de la LCD

#define pacmanope2 0x0E,0x07,0x03,0x01,0x01,0x03,0x07,0x0E #define pacmanshut 0x00,0x0F,0x1F,0x01,0x1F,0x0F,0x00,0x00 void main() { LCDInit(2,16); // Inicializa tamao de la LCD LCDDefSymbol(0,pacmanope2); LCDDefSymbol(1,pacmanshut); While(1) { LCDCursorXY(2,10); lcd_out(0); delay_ms(500); LCDCursorXY(2,10); lcd_out(1); delay_ms(500);

//Ubica cursor en pos. (2, 10) //Muestra el smbolo del pacman

//Muestra otro smbolo de pacman

} }

GRFICAS DE BARRA El controlador LCD2.C tiene una funcin para producir barras horizontales en las pantallas LCD. Esta funcin queda definida por las dos instrucciones LCDBarGraphInit() y LCDBarGraph(n). Cada vez que se vaya a usar las barras de grfica se tiene que indicar primero que se van a utilizar dichas barras, esto se logra con la instruccin LCDBarGraphInit(). Luego entonces se puede utilizar la instruccin LCDBarGraph(n) para mostrar la barra que se quiera. En esta instruccin la n especifica la cantidad de lneas que tiene la barra horizontal la cual puede ir desde 0 hasta 80 (5 x 16 = 80). Un programa completo para mostrar una barra de 41lneas se muestra a continuacin.

#include <18F458.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=8000000) #include "LCD2.C" //Drivers de la LCD void main() { LCDInit(2,16); LCDBarGraphInit();

// Inicializa tamao de la LCD //Inicializa Grfica de barras horiz.

LCDCursorXY(1,1); LCDBarGraph(41); while (TRUE) { } }

//Ubica cursor en posic. deseada //Muestra la barra (mx. = 5 x 16 = 80)

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