Control Automático Educación

LCD con PIC

Hola controleros y controleras, en esta entrada vamos a aprender a utilizar un LCD con PIC de forma fácil usando el PIC C Compiler. Aquí trataremos los LCD más comunes como el LCD 16×2 o el LCD 20×4, sin embargo esto puede ser extendido a cualquier LCD que tengas.

Antes que nada te hago la invitación de que veas

👉👉👉 CURSO GRATIS DE MICROCONTROLADORES PIC

👉👉👉 TODOS LOS VIDEOS EN YOUTUBE

LCD con PIC

Existe en el compilador un driver para manejar un display de cristal líquido (LCD) de 2 líneas por 16 caracteres cada una.

El procedimiento para trabajar con el LCD 16×2 con PIC es parecido al procedimiento del teclado telefónico.

La conexión entre el LCD y el microcontrolador es la siguiente:

Conexión LCD con PIC

Los pasos que se deben seguir para manejar el LCD son:
1. Incluir en el encabezado del programa el driver para manejar el teclado.

#INCLUDE<LCD.C>

2. Por defecto el LCD se conecta al puerto D, si se desea conectar el LCD en el puerto B  se incluye esta línea en el encabezado:

#DEFINE USE_PORTB_LCD TRUE

3. En el programa principal se inicializa el driver

LCD_INIT();

4. Se usan las funciones del LCD que tiene implementadas el driver:

LCD_PUTC(c);// Muestra el caracter “C” en la próxima posición del LCD.
LCD_PUTC("/f”);//Borra todo lo que haya en el display.
LCD_PUTC(“/n”);// Va al inicio de la segunda línea.
LCD_PUTC(“/b”); //Se mueve una posición hacia atrás.
LCD_GOTOXY(x,y); //Ubica el cursor en la posición indicada por “X” y ”Y”.
                 //La posición de la esquina superior izquierda es (1,1).
LCD_GETC(x,y); //Retorna el carácter ubicado en la posición X,Y del LCD.

Un LCD 16×2 PIC (Mostrado en la figura al inicio) esta conformado por 16 columnas y 2 filas

Sin embargo también existen en el mercado otros tipos de LCDs como por ejemplo el LCD 20×4 PIC que tiene 20 columnas y 4 filas.

Quizas te pueda interesar ver como configurar una Pantalla LCD con Arduino.

LCD PIC – EJEMPLOS

A continuación se encuentran los 4 Ejemplos del video, donde podrás ver y descargar el código en lenguaje C y también los archivos de simulación del Proteus, para que puedas reproducirlos por ti mismo y practiques con el uso del LCD. Para tener acceso a todos estos códigos, debes compartir el contenido de este blog con cualquiera de los siguientes 3 botones, asi ayudas a que la pagina sea más conocida y contribuyes a que siga aportando mucho más contenido de interes,

Códigos

A continuación están disponibles los códigos de ejemplos vistos en los videos para descarga y reproducción de los mismos.

[sociallocker id=948]

>> DESCARGAR CÓDIGOS Y ESQUEMA EN PROTEUS <<

Ejemplo 1 – Mensaje en el LCD

#INCLUDE <16F887.H>
#USE DELAY(CLOCK=4000000)
#INCLUDE <LCD.C>
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP
void MAIN()
{
   LCD_INIT();       //Inicializa el LCD
   LCD_PUTC("\f");   //Borrar el contenido del LCD
   WHILE(TRUE)
   {
      LCD_GOTOXY(5,1);        //Se ubica En la columna 5 fila 1
      LCD_PUTC("Control");    //Muestre el mensaje “Control”
      LCD_GOTOXY(3,2);        //Ubicarse en la columna 3 fila 2
      LCD_PUTC("Automatico"); // Sacar el mensaje “Automatico”
   } //Cierra while true
}

Ejemplo 2 – Animación de Desplazamiento en LCD

#INCLUDE <16F887.H>
#fuses XT, NOPROTECT, NOWRT, NOPUT, NOWDT, NOLVP, NOCPD //Órdenes para el programador
#use delay (clock=4000000)
#include <lcd.c>  // Librería para el manejo del lcd              
const char mensaje[]= {"Control Automatico Educacion"};
///PROGRAMA
void main(void)
{
   char y=1; //índice fíla
   signed char x=16; //índice columnas (posiciones)
   lcd_init(); //inicializa lcd 
   while(TRUE){ //bucle...
      lcd_gotoxy(x,y) ; //ubica cursor para escribir mensaje
      lcd_putc(mensaje ) ; //muestra por pantalla el mensaje
      delay_ms(100);
      x--; //incremento indice de columnas
      if(x<-28)
      {
         //¿se ha mostrado mensaje entero en la primera fila?
         x=16; //SI, índice columna x=-16, para que inicie el último caracter en la primera posición
         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
   } //...infinito
}

Ejemplo 3 – LCD y Teclado en el mismo Puerto B

#INCLUDE <16F887.H>
#USE DELAY(CLOCK=4000000)
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP
//Definiciones para colocar el LCD y el teclado en el puerto B
#DEFINE USE_PORTB_LCD TRUE
#DEFINE USE_PORTB_KBD TRUE  
//Librerías del LCD y Teclado
#INCLUDE <LCD.C>
#INCLUDE <KBD.C>  
// Variables Globales
CHAR K;
INT DIR;
//Programa Principal
VOID MAIN()
{
   lcd_init(); //Inicializa el LCD
   kbd_init(); //Inicializa el Teclado
   //Configura las Resistencias PULL-UP del Puerto B
   port_b_pullups(0xFF); //PIC16F887
   //port_b_pullups(TRUE); //PIC16F877A
   LCD_PUTC("\f"); //Limpia el LCD
   
   //Ciclo infinito
   WHILE(1)
   {
      DIR=0;
      LCD_PUTC("\f");
      while (DIR<17)
      {
         k=kbd_getc();  //Llamar la función del teclado y almacenar el
                        //valor digitado en una variable tipo carácter. Si
                        //no se oprime ninguna tecla el teclado
                        //retornara el carácter nulo.*/
         WHILE( (k=='\0')) //si no se oprime ninguna tecla sigue llamando al teclado.
         {
            k=kbd_getc();
         }
         if( (k!='*')&&(k!='#'))
         {
            lcd_putc(k);
            DIR++;
         }
      }
   }
}

Ejemplo 4 – LCD con Teclado para Contraseña

#INCLUDE <16F887.H>
#USE DELAY(CLOCK=4000000)
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP
//Usadas para conectar el LCD y Teclado en el Puerto B
#DEFINE USE_PORTB_LCD TRUE
#DEFINE USE_PORTB_KBD TRUE
//Librerías del LCD y Teclado
#INCLUDE<KBD.C> 
#INCLUDE<LCD.C>
#BYTE PORTC=7
#DEFINE LED1 PORTC,7
#DEFINE LED2 PORTC,4
 //Variables Globales
CHAR K;
INT MIL,CEN,DEC,UNI,VAL;
//Función Teclado
VOID TECLADO()
{
   k=kbd_getc(); //Llamar la función del teclado y almacenar
   //el valor digitado en una variable tipo
   //carácter. Si no se oprime ninguna tecla el
   //teclado retornara el carácter nulo.*/
   WHILE(k=='\0') //si no se oprime ninguna tecla sigue llamando al teclado.
   {
      k=kbd_getc();
   }
   IF( (k!='\0'))
   {
      IF(K=='0')//Si K es igual a cero
         VAL=0;//Val es igual a cero
      IF(K=='1')
         VAL=1;
      IF(K=='2')
         VAL=2;
      IF(K=='3')
         VAL=3;
      IF(K=='4')
         VAL=4;
      IF(K=='5')
         VAL=5;
      IF(K=='6')
         VAL=6;
      IF(K=='7')
         VAL=7;
      IF(K=='8')
         VAL=8;
      IF(K=='9')
         VAL=9;
   }
}
VOID MAIN()
{
   LCD_INIT(); //Inicializa el LCD 
   KBD_INIT(); //Inicializa el Teclado 
   
   //Configura las Resistencias PULL-UP del Puerto B 
   PORT_B_PULLUPS(0xFF); //PIC16F887 
   //port_b_pullups(TRUE); //PIC16F877A
   
   //Configura el puerto C como Salida
   SET_TRIS_C(0);
   
   //Programa Principal
   WHILE(TRUE)
   {
      LCD_GOTOXY(1,1);
      LCD_PUTC(" BIENVENIDOS ");
      LCD_GOTOXY(1,2);
      LCD_PUTC(" DIGITE CLAVE ");
      DELAY_MS(1000);
      TECLADO();
      LCD_PUTC("\f");
      LCD_GOTOXY(1,1);
      IF((k!='#')&&(k!='*'))
      {
         lcd_putc('*');
         UNI=VAL;
      }
      TECLADO();
      IF((k!='#')&&(k!='*'))
      {
         lcd_putc('*');
         DEC=VAL;
      }
      TECLADO();
      IF((k!='#')&&(k!='*'))
      {
         lcd_putc('*');
         CEN=VAL;
      }
      TECLADO();
      IF((k!='#')&&(k!='*'))
      {
         lcd_putc('*');
         MIL=VAL;
      }
      TECLADO();
      WHILE((k!='#'))
      {
         TECLADO();
      }
      IF((UNI==1)&&(DEC==2)&&(CEN==3)&&(MIL==4)) //Aquí se compara si
      //los números digitados
      //están correctos.*/
      {
         LCD_PUTC("\f"); //Se borra LCD
         LCD_GOTOXY(1,1);//Se ubica en la posición 1,1
         LCD_PUTC(" CLAVE CORRECTA ");
         BIT_SET(LED1);
         DELAY_MS(2000);
         BIT_CLEAR(LED1);
      }
      ELSE
      {
         LCD_PUTC("\f");
         LCD_GOTOXY(1,2);
         LCD_PUTC(" CLAVE INVALIDA ");
         BIT_SET(LED2);
         DELAY_MS(4000);
         BIT_CLEAR(LED2);
      }
   }
}

[/sociallocker]

Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.

Citar este Artículo

📌 Selecciona el formato:
Giraldo, S. A. C. (2015). LCD con PIC. Control Automático Educación. https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/lcd-pic/
Salir de la versión móvil