E/S 33 3.3 LCD Alfanumérica Las pantallas de cristal líquido o LCD (Liquid Crystal Display) alfanuméricas permiten mostrar mensajes y con esto podemos dotar a nuestros circuitos de una interface más llamativa para el usuario. La LCD comúnmente usada debido a su bajo costo y disponibilidad es la pantalla alfanumérica de 16 caracteres por 2 renglones mostrada en la Figura 3-3. Figura 3-3. LCD 16x2 El funcionamiento de esta pantalla puede revisarlo en su hoja de datos o recomiendo el libro Microcontrolador PIC16F84 Desarrollo de proyectos de Enrique Palacios para una explicación mas detallada. El lenguaje C18 aporta una librería llamada xlcd.h la cual permite controlar este tipo de LCD. Sin embargo esta librería tiene unas deficiencias y por medio de unas modificaciones el autor creó la librería lcd.h la cual puede descargar de la página. Dicha librería consta de 2 archivos llamados lcd.c y lcd.h, ambos archivos deben agregarse al proyecto. El siguiente ejemplo demuestra el uso de la librería lcd.h con el circuito mostrado en la Figura 3-4. Ing. Juan Ramon Terven Salinas E/S 34 Ejemplo 3-3. Uso de LCD 16x2 Arme el circuito de la Figura 3-4 y pruebe el ejemplo siguiente. Figura 3-4. Diagrama para ejemplo LCD Para que el programa compile sin errores, debe agregar los archivos lcd.c y lcd.h al proyecto como se muestra en la figura siguiente. Figura 3-5. Archivos de librería Ing. Juan Ramon Terven Salinas E/S 35 Programa 3-3. Ejemplo uso de LCD 16x2 /* DISPLAY LCD 16X4 * * Uso del Display LCD con la libreria lcd.h * PIC18 funcionando a 48MHz */ #include <p18cxxx.h> #include "lcd.h" extern void _startup (void); #pragma code REMAPPED_RESET_VECTOR = 0x1000 void _reset (void) { _asm goto _startup _endasm } #pragma code // Aquí inicia el programa void main() { char cadena[] = "Probando LCD"; char cadena2[] = "en linea 2"; ADCON1 |= 0x0f; // Configura pines como digitales // configura LCD OpenLCD( FOUR_BIT & LINES_5X7); //Envia cadena "Probando LCD" putsLCD(cadena); //Cambia al renglon 2 SetDDRamAddr(0x40); //Envia cadena2 al display putsLCD(cadena2); while(1) { } } Ing. Juan Ramon Terven Salinas E/S 36 PRÁCTICAS PARA EVALUAR Para cada una de las siguientes prácticas: a) Simular el funcionamiento en Proteus. b) Verificar funcionamiento en su tablilla de pruebas. PRÁCTICA 1. Contador en LCD Mostrar un contador en el LCD que se incremente cada vez que se pulsa un botón en RA0. Use la función itoa de la librería stdlib.h para convertir el contador a cadena y poderlo mostrar en el display. El contador debe ser tipo int. La función itoa se usa de la siguiente manera: char strCont[6]; //se declara una cadena de 6 caracteres itoa(contador,strCont); //convierte contador a cadena //y se guarda en strCont PRÁCTICA 2. Mensajes Desplazables Mostrar un texto desplazándose por el primer renglón de izquierda a derecha y otro texto desplazándose por el segundo renglón de derecha a izquierda. PRÁCTICA 3. Cronómetro con retardos Diseñe un cronómetro de la forma HH:MM:SS:d en el LCD, donde: HH = horas(00 a 59) MM = minutos(00 a 59) SS = segundos(00 a 59) d = décimas de segundo(0 a 9) En el primer renglón deberá decir “CRONOMETRO” En el segundo renglón debe mostrar el cronómentro inicialmente en 00:00:00:00:0 Al pulsar el botón en RA0 el cronómetro inicia. Si el cronómetro está iniciado con este mismo botón se pausa y se reanuda el funcionamiento. Al pulsar un botón en RA1 el cronómetro se resetea sólo si el cronómetro se encuentra pausado, de lo contrario no se permite el reseteo. Ing. Juan Ramon Terven Salinas