Tutorial LCD, conectando tu arduino a un LCD1602 y LCD2004
En este artículos sabrás cómo utilizar la pantalla lcd 1602 y el módulo de comunicación I2C con arduino, para generar texto, desplazamiento (scroll text) y caracteres especiales.
Material Necesario:
Módulo I2C | ![]() |
LCD 1602 | ![]() |
Arduino UNO | ![]() |
Librería LiquidCrystal_I2C para Arduino | ![]() |
Cable varios | ![]() |
Módulo LCD 1602
La pantalla tiene una retroiluminación de LED y puede mostrar dos filas con hasta 16 caracteres en cada fila. Puede ver los rectángulos para cada carácter en la pantalla y los píxeles que componen cada carácter. La pantalla es está diseñada para mostrar texto.
En el emrcado también hay módulos 2004, lo que significa 20 columnas y 4 filas.
En este kit es necesario soldar el módulo adaptador I2C a display LED
¿Qué es el módulo I2C?
El módulo I2C o controlador I2C nos permite controlar una pantalla LCD a través del bus I2C utilizando únicamente 2 cables (SDA, SCL).
El LCD tiene una memoria interna en donde almacena todos sus caracteres alfanuméricos, los cuales podemos extender en ocho caracteres personalizados adicionales.
Los caracteres soportados por la mayoría de modelos de LCD se ilustran en la siguiente tabla:
Para la comunicación del LCD y un controlador utiliza un bus de 8 datos, pero se puede configurar para trabajar con un buz de 4 datos. También usa pines de control RS (chip select) RW (lectura/escritura) y E (enable).
Para controlar el contrastes usa una entrada analógica VEE el cual por lo general se usa un potenciómetro para poder variar el contraste, y los LCD q traen Backlight tiene dos pines al final Led+ (A) y Led- (K) los cuáles se pueden alimentar directamente a 5V o a través de una resistencia si se tratase de un LED, variando su resistencia se pude variar la intensidad de luz.
Preparación del display 1602 y el módulo I2C
Para preparar el módulo LCD (ya sea el 16×2 o 20×4) solo tenemos que soldar los pines de controlador IIC al display como se ve en la fotografía.
Diagrama para conectar el LCD 16×2 por I2C
A continuación, te mostramos como conectar el display con el módulo serial I2C a Arduino.
La configuración será de la siguiente manera:
SDA -> A4
SCL -> A5
Comandos de la librería I2C
LiquidCrystal_I2C() – Constructor de la clase, configura el hardware.
init() – Prepara el LCD para su uso.
clear() – Borra todos los caracteres de la pantalla LCD.
setCursor(col, row) – Permite mover el cursor a la posición indicada en sus parámetros.
print() – Imprime una variable o literal en la pantalla.
scrollDisplayLeft() y scrollDisplayRight() – Recorre el contenido de la pantalla a la izquierda o a la derecha.
backlight() y noBacklight() – Métodos para encender / apagar la iluminación de fondo
createChar(num, data) – Crear un carácter definido por el usuario en la memoria del controlador de pantalla.
Hola Mundo con LCD1602
De acuerdo a lo anterior estamos seguros que si revisas el siguiente código entenderás cada una de las líneas del programa:
/* * www.ProveedoraCano.com * Con este programa se desplegará texto * en cada una de las líneas del display */ #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // dirección 0x27 o 0x3F , también se configura el tipo de pantalla 16,2 o 20,4 void setup() { lcd.init(); // inicia LCD // Imprimomos mensaje lcd.backlight(); lcd.setCursor(3,0); // emepezará a escribir en la columna 4 y en la línea 1 lcd.print("Hola Mundo!"); lcd.setCursor(0,1); lcd.print("Proveedora Cano"); //emepezará a escribir en la columna 1 y en la línea 2 // lcd.setCursor(0,2); // lcd.print("Esta es la linea 3"); // lcd.setCursor(0,3); // lcd.print("escribe en la linea 4"); } void loop() { }
Desplazando el texto en el LCD
Desplazando todas las líneas
/* * ProveedoraCano.com * Este programa desplaza el texto de la línea #1 y #2 de derecha a izquierda */ #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display void setup() { lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); // Escribimos el Mensaje en el LCD en una posición central. lcd.setCursor(10, 0); lcd.print("www.ProveedoraCano.com"); lcd.setCursor(5, 1); lcd.print("SIGUENOS EN NUESTRAS REDES SOCIALES "); } void loop() { //desplazamos una posición a la izquierda lcd.scrollDisplayLeft(); delay(350); }
Una línea estática y desplazamiento una línea
/* * ProveedoraCano.com * Este programa mantiene el texto de la línea #1 estático * El texto de la línea #2 se desplaza */ #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display char * messagePadded = " Suscríbete y síguenos en nuestras redes sociales :) "; void setup() { lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Proveedora Cano "); } void loop() { for (int letter = 0; letter <= strlen(messagePadded) - 16; letter++) //De 0 a hasta n-16 caracteres suministrados a la siguiente función { showLetters(0, letter); } } void showLetters(int printStart, int startLetter) { lcd.setCursor(printStart, 1); for (int letter = startLetter; letter <= startLetter + 15; letter++) // Imprime solo 16 caractéres en la línea #2 empezando 'startLetter' { lcd.print(messagePadded[letter]); } lcd.print(" "); delay(350); }
Caracteres especiales o personalizados
La función createChar () nos sirve para que nosotros dibujemos nuestros propios caracteres.
Un carácter está formado por 5×8 pixeles los cuales se representan por 8 bytes, uno para cada fila, los 5 bits menos significativos representan los pixeles del carácter.
Para dibujar el carácter anterior la matriz quedaría:
B00001,
B00011,
B00101,
B11111,
B00101,
B00011,
B00001,
B00001
El programa es muy sencillo quedando de la siguiente forma:
/* * www.ProveedoraCano.com * programa para imprimir texto * y caracteres especiales */ #include <Wire.h> #include <LiquidCrystal_I2C.h> // CONFIGURAR LA DIRECCIÓN DE LA LCD: // CONFIGURAR 0x27 PARA PCF8574 NXP // CONFIGURAR 0x3F PARA PCF8574A Ti LiquidCrystal_I2C lcd(0x27, 16, 2); byte imagen1[] = { B00001, B00011, B00101, B11111, B00101, B00011, B00001, B00001 }; byte imagen2[] = { B01100, B10010, B10010, B01100, B00100, B00111, B00100, B00100 }; byte imagen3[] = { B01110, B10001, B10101, B10001, B01010, B00100, B00100, B00100 }; void setup() { lcd.init(); lcd.backlight(); // Escribimos el texto en el LCD lcd.createChar(0, imagen1); // asignamos el número de caracter (de 0 a 7) y la matriz lcd.createChar(1, imagen2); lcd.createChar(2, imagen3); lcd.home(); lcd.setCursor(1,0); // se indica que empiece a escribir en la columna 2 fila 1 lcd.print("Prueba especial"); lcd.setCursor(1, 1); // se indica que empiece a escribir en la columna 2 fila 2 lcd.write(0); lcd.write(1); lcd.write(2); } void loop() { }
El resultado es el siguiente: