4.12 Ejemplo 10
Utilizar el visualizador LCD
Este ejemplo muestra cómo utilizar un visualizador LCD alfanumérico. Las librerías de funciones simplifican este programa, lo que significa que al final el esfuerzo para crear el software vale la pena.
Un mensaje escrito en dos líneas aparece en el visualizador:
mikroElektronika
LCD example
Dos segundos más tarde, el mensaje en la segunda línea cambia, y se visualiza el voltaje presente en la entrada del convertidor A/D (el pin RA2). Por ejemplo:
mikroElektronika
voltage:3.141V
En un dispositivo real se puede visualizar temperatura actual o algún otro valor medido en vez de voltaje.
Para que este ejemplo funcione apropiadamente, es necesario marcar las siguientes librerías en la ventana Library Manager antes de compilar el programa:
/*Cabecera*****************************************************/
// Conexiones del módulo LCD
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// Final de las conexiones del módulo LCD
// Declarar variables
unsigned char ch;
unsigned int adc_rd;
char *text;
long tlong;
void main() {
INTCON = 0; // Todas las interrupciones deshabilitadas
ANSEL = 0x04; // Pin RA2 se configura como una entrada analógica
TRISA = 0x04;
ANSELH = 0; // Los demás pines se configuran como digitales
Lcd_Init(); // Inicialización del visualizador LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // Comando LCD (apagar el cursor)
Lcd_Cmd(_LCD_CLEAR); // Comando LCD (borrar el LCD)
text = "mikroElektronika"; // Definir el primer mensaje
Lcd_Out(1,1,text); // Escribir el primer mensaje en la primera línea
text = "LCD example"; // Definir el segundo mensaje
Lcd_Out(2,1,text); // Definir el primer mensaje
ADCON1 = 0x82; // Voltaje de referencia para la conversión A/D es VCC
TRISA = 0xFF; // Todos los pines del puerto PORTA se configuran como entradas
Delay_ms(2000);
text = "voltage:"; // Definir el tercer mensaje
while (1) {
adc_rd = ADC_Read(2); // Conversión A/D. Pin RA2 es una entrada.
Lcd_Out(2,1,text); // Escribir el resultado en la segunda línea
tlong = (long)adc_rd * 5000; // Convertir el resultado en milivoltios
tlong = tlong / 1023; // 0..1023 -> 0-5000mV
ch = tlong / 1000; // Extraer voltios (miles de milivoltios)
// del resultado
Lcd_Chr(2,9,48+ch); // Escribir resultado en formato ASCII
Lcd_Chr_CP('.');
ch = (tlong / 100) % 10; // Extraer centenas de milivoltios
Lcd_Chr_CP(48+ch); // Escribir resultado en formato ASCII
ch = (tlong / 10) % 10; // Extraer decenas de milivoltios
Lcd_Chr_CP(48+ch); // Escribir resultado en formato ASCII
ch = tlong % 10; // Extraer unidades de milivoltios
Lcd_Chr_CP(48+ch); // Escribir resultado en formato ASCII
Lcd_Chr_CP('V');
Delay_ms(1);
}
}