Electronica, Microcontroladores y Psicología
  Uitlizando LCD 16x2
 


En nuestros proyectos algunas veces necesitaremos no solamente desplegar cantidades alfanuméricas, sino que tendremos que mostrar mensajes en diferentes formatos, para lo cual los display 7 segmentos no serían la mejor opción; en estos casos es mejor utilizar los LCD o pantallas de cristal líquido, su costo y facilidad de uso los hace una excelente alternativa.

 
Básicamente estos LCD reciben la información del PIC en forma de caracteres ASCII y la presentan en pantalla, si se le envían los datos en forma de números binarios o hexadecimales no se mostrará la información adecuada, por esto es necesario convertir éstos números correctamente a la nomenclatura ASCII para que se pueda ver en el LCD; en ASSEMBLER esto tomaría una subrutina completa hacer esta operación, sin embargo en C utilizaremos una instrucción que se explicará más adelante para poder mostrar los datos sin mayor inconveniente.
 
Por ahora les mostraré cómo es un LCD y la forma de concertarlo al PIC:

 

 



Esta no es la única manera, sin embargo es la que utilizaremos para los ejemplos. A continuación coloco una breve descripción de los pines del LCD:

 

·        VSS                Tierra

·        VDD               Alimentacion

·        VEE                Contraste

·        RS                   Register Select

·        RW                 Read/Write

·        E                     Enable

·        D0…D7          Datos

 

Nota: En el pin de Contraste (VEE) se coloca un potenciómetro, generalmente de 10K, que permite ajustar el contraste de las letras.

 

No es objetivo de este tutorial explicar el proceso detallado paso por paso de cómo se deben enviar las instrucciones al LCD para que este muestre los caracteres, para esto recomiendo algunos tutoriales más especializados. Por ahora me interesa describir las instrucciones que se utilizaran, dichas instrucciones se encuentran en una librería llamada LCD.C, los que no la posean pueden escribir a mi correo y yo se las enviaré.

 

Las instrucciones son:

 

Lcd_init();                                           Esta instrucción se utiliza para inicializar el LCD y siempre va antes que las otras.

 

Lcd_gotoxy(X,Y);                               Esta instrucción permite que nos ubiquemos en alguna posición del LCD para escribir en él algún caracter.

 

Lcd_putc();                                         Con esta instrucción podremos enviar un carácter o cadenas de caracteres al LCD.

 

Printf([funcion], string, [valores]);         Esta instrucción si bien no se encuentra especificada dentro de la librería se puede utilizar para mostrar de forma rápida en el LCD variables sin necesidad de convertirlas primero en formato ASCII. Mostraré un ejemplo más adelante.

 

Con estas instrucciones se podrá manejar sin ningún problema el LCD, ahora vamos con el primer programa:

 

 

#include <16f84.h>

#use delay (clock=4000000, RESTART_WDT)

#include <LCD_2.C>                          // En mi caso mi librería se llama LCD_2.C

 

main()                                                  // Programa principal   

{

set_tris_a(0x00);                                 // PortA como salidas

set_tris_b(0x00);                                 // PortB como salidas

output_a(0x00);                                   // Todas las Salidas

output_b(0x00);                                  // a cero          

 

lcd_init();                                             // Inicializa el LCD

lcd_gotoxy(3,1);                                  // Coloca el cursor en el espacio 3 de la fila 1

lcd_putc("LCD PICMIND");               // Envia el mensaje al LCD

}

 

 

Así se debe ver en la simulación:

 

Bueno esto es todo, ya podemos mostrar mensajes en el lcd.

Ahora bien si queremos mostrar datos numéricos tenemos dos opciones, una es convertir esos números en caracteres ASCII, lo cual toma algo de tiempo ya que se debe diseñar una subrutina o una función para tal fin; la otra opción y la que considero más cómoda es utilizar la instrucción PRINTF. Esta instrucción como lo mencioné anteriormente nos permite mostrar en diferentes formatos el valor de una variable sin necesidad de convertirla primero en ASCII.

 

Para utilizar dicha instrucción debemos tener en cuenta los diferentes formatos que puede manejar:

 

C          Carácter

U          Entero sin signo

x          Entero en Hex (en minúsculas)

X          Entero en Hex (en mayúsculas)

D          Entero con signo

%e       Real en formato exponencial (notación científica)

%f        Real (Float)

Lx        Entero largo en Hex (en minúsculas)

LX        Entero largo en Hex (en mayúsculas)

Lu        Decimal largo sin signo

Ld        Decimal largo con signo

 

La estructura de la instrucción es la siguiente:

 

 

Printf([funcion], string, [valores]);

 

Donde function será lcd_putc; string será el mensaje y valores serán las variables que mostraremos. Tenemos entonces que si queremos mostrar en el LCD el valor de la variable X como un entero sin signo lo colocaríamos así:

 

Printf(lcd_putc, "X= %U",X);

 

Nótese que en el lugar en el que va a aparecer el valor de la variable se coloca un % para indicar que ahí se mostrará. Después se debe indicar cuál será la variable que se quiere visualizar.  

 

Ahora les muestro un ejemplo de un programa en el que visualizará el valor de un contador en el LCD. El contador se incrementará cada vez que se active un pulsador conectado a RA3.

 

#include <16f84.h>

#use delay(clock=4000000)

#include <LCD_F84.C>

#bit RA3=5.3

 

int x=0;

 

main()

{

set_tris_a(0b01000);                                       //Configura PORTA

set_tris_b(0x00);                                             //PORTB como salidas

lcd_init();                                                         //Inicializa el LCD

 

while(1)                                                           //Entra en un ciclo infinito

{

lcd_gotoxy(1,1);                                              //coloca el curso en la posición 1,1

printf (lcd_putc,"Contador=%02U", x);           //Escribe el mensaje en el LCD

while(RA3==0){}                              

if(RA3==1)                                                     //Si RA3 se activa aumenta

{x++;                                                              //la variable "x"

delay_ms(150);}                                             //Espera un tiempo mientras se suelta el pulsador

}

}                                                                     //Cierre del programa principal

 

 

Si se fijan he colocado antes del % un 02 esto le indica al compilador que quiero que se muestre el numero con ceros a la izquierda.

 

La imagen de la simulación en la siguiente:

 

 

 



Espero que el tutorial sea claro y que les sea de utilidad la informacion, cualquier duda, comentario o corrección enviarlas al correo en la zona de contacto
 
   
 
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis