Las pantallas de cristal líquido LCD 16x2 (display LCD 2x16) se han popularizado mucho en los últimos años, debido a su gran versatilidad para presentar mensajes de texto (fijos y en movimiento), valores numéricos y símbolos especiales, su precio reducido, su bajo consumo de potencia, el requerimiento de solo 6 pines del PIC para su conexión y su facilidad de programación en lenguajes de alto nivel (por ejemplo, lenguaje C). Desde todo punto de vista el empleo del display LCD 16x2 (LCD 2x16) debería considerarse como la primera opción a la hora de decidir por un dispositivo de presentación alfanumérica, excepto cuando las condiciones de iluminación ambiental no sean las más favorables. En este último caso se debería pensar en el empleo de displays de 7 segmentos, que aunque no tienen la misma versatilidad tienen la ventaja innegable de sus mejores características de visibilidad aún en los ambientes más desfavorables.


¡Descubre el mundo de los microcontroladores PIC y lleva tus habilidades de programación al siguiente nivel! Obtén nuestro eBook y disfruta aprendiendo paso a paso desde cero, podrás realizar proyectos prácticos, encontrar soluciones a problemas comunes y explorar una amplia cobertura de temas desde lo más básico a lo más avanzado. Incluye software y ejemplos resueltos. ¡Cómpralo ahora y libera el increíble potencial de esta poderosa tecnología hoy mismo!

Microcontroladores PIC en PDF: Curso completo


En la actualidad existen diversos modelos de display LCD, aunque los más comunes son los LCD 16x2 (16 caracteres x 2 filas), gobernados por el controlador Hitachi HD44780, que se ha convertido en el estándar de facto para las aplicaciones con microcontroladores PIC; este articulo hace referencia a ese tipo de LCD. Existen LCD 16x2 con diferentes combinaciones de colores de fondo y texto.

Pinout, pines o patillaje del LCD 16x2

El LCD 16x2 tiene en total 16 pines (tome en cuenta que la posición correcta del display es con los pines en la parte superior, aunque existen modelos en los que la posición correcta es con los pines en la parte inferior) . La datasheet (pdf) muestra 14 pines, los dos pines adicionales son el ánodo (15) y el cátodo (16) del LED de fondo. Debe notarse que el controlador Hitachi HD44780 se encuentra incorporado al circuito impreso del módulo LCD y sirve de interfaz entre la propia pantalla LCD (donde se muestran los caracteres) y el microcontrolador PIC. Por lo tanto, de todos los pines del HD44780 únicamente se tiene acceso a aquellos necesarios para la conexión al PIC y para el control de contraste. 

Pinout del Display lcd 16x2 (lcd 2x16) con HD44780
Pinout Display lcd 16x2 (lcd 2x16) con HD44780
La polarización del LED de fondo (backlight) se logra conectando una resistencia externa de 50 ohm-1/4 W con lo que se asegura el correcto encendido sin una corriente excesiva. El control de contraste se consigue con un potenciómetro de 10 k con el cual se ajusta el nivel de voltaje en el pin 3 (Vee ó VLC).
Conexión del Display lcd 16x2 (lcd 2x16) con HD44780

Conexión del LCD 16x2 al PIC

La conexión más recomendable del display LCD 16x2 requiere 4 pines para los datos (D7:D4), 1 pin para habilitar/deshabilitar el display (E) y 1 pin para los modos comando/carácter (RS). En la figura siguiente se indica la forma de conectar el display al PIC16F88 y al PIC16F628A.

LCD 16x2 con PIC

Librería LCD de mikroC PRO

mikroC PRO for PIC tiene una librería para comunicación con LCDs basados en el controlador HD44780 o compatibles, a través de un interfaz de 4 bits para datos. Para el trabajo con el módulo LCD se debe añadir la librería Lcd, que contiene las funciones listadas en la tabla 3.1. Para poder utilizar estas funciones se debe declarar previamente un total de 12 variables: 6 que definen los pines del PIC y otras 6 que permiten programar el sentido de circulación de datos (se detallarán en los ejemplos de este capítulo).

mikroC PRO para Display lcd 16x2 (lcd 2x16) con HD44780

Ejemplo en mikroC PRO con el PIC16F88

En el siguiente ejemplo se emplea la función ByteToStr de la librería Conversions de mikroC PRO, para convertir el contenido de la variable contador (un byte) en una cadena de caracteres (string) y así poderlo visualizar en el display con la función Lcd_Out. Es un ejemplo muy básico  tipo "Hola Mundo". 

Ejemplo-LCD1.c: Cada vez que presiona el pulsador conectado en RA4 se incrementa un contador que se visualiza en el centro de la segunda línea de la pantalla. Si la cuenta supera 100, el conteo se reinicia desde 0. En el centro de la primera línea se muestra la palabra Conteo:

//LCD1.c
//Declaración de las 12 variables necesarias para la conexión del LCD 2x16.
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;
// Fin de declaración de variables de conexión.

char contador=0,estado=1,texto1[]="Conteo:", texto2[4];

void main(){
OSCCON=0x40; //Oscilador interno a 1MHz.
while (OSCCON.IOFS==0);//Esperar mientras el oscilador está inestable.
ANSEL=0x00;  //Pines AN6:AN0 como E/S digital.
Lcd_Init();                //Inicializa el LCD.
Lcd_Cmd(_LCD_CLEAR);       //Borra el display.
Lcd_Cmd(_LCD_CURSOR_OFF);  //Apaga el cursor.
Lcd_Out(1,6,texto1);       //Escribe el texto1.
while (1)
{
  if (Button(&PORTA,4,1,0)) estado=0;    //Si se pulsa.
  if (estado==0 && Button(&PORTA,4,1,1)) //Si se pulsa y se libera.
  {
    contador++;  //"contador" contiene el número de pulsaciones.
    if (contador>100) contador=0;
    estado=1;
  }
  ByteToStr(contador,texto2); //Convierte a texto el contenido de la variable contador
  //y lo guarda en texto2.
  Lcd_Out(2,6,texto2);        //Muestra el texto2.
}
}