Arduino - LCD

En este tutorial de LCD para Arduino, aprenderemos cómo conectar una pantalla LCD (display de cristal líquido) a la placa Arduino. Las pantallas LCD son muy populares y ampliamente utilizadas en proyectos electrónicos para mostrar información. Hay muchos tipos de LCD. Este tutorial toma como ejemplo una pantalla LCD 16x2 (16 columnas y 2 filas). Las demás pantallas LCD son similares.

※ Nota:

Si quieres simplificar el cableado, puedes usar LCD I2C en su lugar. Consulta tutorial de LCD I2C.

Acerca de LCD 16x2

Disposición de pines

Pinout de la pantalla LCD

La pantalla LCD tiene hasta 16 pines. En los usos más comunes, no usamos todos los pines.

Con el apoyo de la biblioteca LiquidCrystal, incluso podemos usar LCD sin saber el significado de estos pines. Sin embargo, si tienes curiosidad o quieres conocerlos a fondo, veamos estos pines y su funcionalidad:

  • Pin GND: debe conectarse a GND (0V).
  • Pin VCC: la fuente de alimentación para la LCD, debe conectarse a VCC (5V).
  • Pin Vo (Contraste LCD): controla el contraste y el brillo de la LCD, puede conectarse a 5V (el mayor contraste y brillo), o conectarse a un potenciómetro (para ajustar el contraste y el brillo)
    • Si queremos enviar el comando para controlar la LCD, necesitamos colocar el pin RS en LOW (por ejemplo, fijar el cursor en una ubicación específica, borrar la pantalla ...).
    • Si queremos enviar los datos para mostrar en la LCD, necesitamos colocar el pin RS en HIGH.
  • Pin R/W (Lectura/Escritura): sirve para seleccionar el modo LECTURA o ESCRITURA.
    • Si queremos leer datos de la LCD, este pin debe ponerse en HIGH.
    • Si queremos enviar datos a la LCD, este pin debe ponerse en LOW. Como solo estamos usando esta LCD como un dispositivo de salida, vamos a dejarlo en LOW.
  • Pin EN (Enable): se usa para activar la LCD. HIGH para activar la LCD, LOW para desactivar la LCD.
  • D0-D7 (Bus de datos): transportan datos y comandos entre Arduino y LCD. Hay dos modos para enviar datos: modo de 4 bits y modo de 8 bits.
  • A-K (Ánodo y Cátodo): se utilizan para alimentar la retroiluminación de la LCD. El pin A debe conectarse a VCC. El pin K debe conectarse a GND.

Modo de 4 bits y modo de 8 bits

  • Modo de 8 bits: 8 bits de un byte se envían al mismo tiempo en los pines D0 a D7.
  • Modo de 4 bits: 8 bits de un byte se envían dos veces, cada vez 4 bits en los pines D4 a D7.

El modo de 8 bits es más rápido que el modo de 4 bits, pero utiliza más pines que el modo de 4 bits. La selección del modo se realiza durante el proceso de inicialización enviando un comando a la pantalla LCD.

Este tutorial utiliza el modo de 4 bits, que es el más utilizado.

En este modo, los pines del LCD:

  • 6 pines (RS, EN, D4, D5, D6 y D7) están conectados al pin de Arduino.
  • 4 pines (D0, D1, D2 y D3) NO están conectados.
  • Los 6 pines restantes están conectados a GND/VCC o a un potenciómetro.

Tabla de pines del LCD en modo de 4 bits

LCD PINCONNECTED TO
01GNDGND
02VCC5V
03Vo5V or potentiometer's pin
04RSAn Arduino's pin
05R/WGND
06ENAn Arduino's pin
07D0NOT connected
08D1NOT connected
09D2NOT connected
10D3NOT connected
11D4An Arduino's pin
12D5An Arduino's pin
13D6An Arduino's pin
14D7An Arduino's pin
15A5V
16KGND

Coordenada LCD

LCD 16x2 incluye 16 columnas y 2 filas. Las columnas y filas están indexadas desde 0.

Coordenada de la pantalla LCD de Arduino

Cómo funciona

Esta sección se dedica al conocimiento profundo. NO se preocupe si no lo entiende. Omita esta sección si lo abruma y vuelva otro día. Continúe leyendo con las siguientes secciones.

El proceso de enviar datos (que deben mostrarse) a la pantalla LCD:

  1. Arduino pone el pin RS en ALTO (para seleccionar el registro de datos)
  2. Arduino escribe datos en los pines D4 a D7 (bus de datos).
  3. La pantalla LCD recibe los datos en el bus de datos.
  4. La pantalla LCD guarda los datos recibidos en el resistor de datos ya que el pin RS está en ALTO. Luego, la pantalla LCD muestra los datos en la pantalla

El proceso de enviar comandos (para controlar) a la pantalla LCD (por ejemplo, hacer parpadear la pantalla LCD, colocar el cursor en una ubicación específica, borrar la pantalla ...):

  1. Arduino pone el pin RS en nivel bajo (para seleccionar el registro de comandos).
  2. Arduino escribe el comando en los pines D4 a D7 (bus de datos).
  3. La pantalla LCD recibe los datos a través del bus de datos.
  4. La pantalla LCD almacena los datos recibidos en el registro de comandos, ya que el pin RS está en nivel bajo. Luego, la pantalla LCD ejecuta la acción en función del valor del comando.

Arduino - Pantalla LCD

Controlar la pantalla LCD es una tarea bastante complicada. Afortunadamente, gracias a la biblioteca LiquidCrystal, esta biblioteca facilita el proceso de controlar la pantalla LCD para ti, de modo que no necesitas conocer las instrucciones de bajo nivel. Solo necesitas conectar Arduino a la pantalla LCD y usar las funciones de la biblioteca. Usar la pantalla LCD es pan comido.

Diagrama de Cableado

Diagrama de cableado de Arduino LCD

This image is created using Fritzing. Click to enlarge image

Cómo Programar para LCD

  • Incluir la biblioteca:
#include <LiquidCrystal.h>
  • Define qué pin de Arduino está conectado a los seis pines del LCD: RS, EN, D4, D4, D6, D7.
const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5;

Una de las ventajas de la biblioteca es que el pin de Arduino conectado al LCD se puede configurar. Esto lo hace flexible cuando conectas Arduino al LCD y a otros sensores y actuadores.

  • Declarar un objeto LiquidCrystal:
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
  • Configura el número de columnas y filas del LCD.
lcd.begin(16, 2);
  • Mover el cursor a la posición deseada (column_index, row_index)
lcd.setCursor(column_index, row_index);
  • Imprime un mensaje en la pantalla LCD.
lcd.print("Hello World!");

Hay muchas cosas más que podemos hacer con LCD (ver la parte Haz más con LCD)

※ Nota:

Puedes elegir cualquiera de los seis pines de Arduino para conectar al LCD, siempre que especifiques el pin conectado en el código de Arduino.

Código de Arduino

#include <LiquidCrystal.h> // LCD pins <--> Arduino pins const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); void setup() { lcd.begin(16, 2); // set up number of columns and rows lcd.setCursor(0, 0); // move cursor to (0, 0) lcd.print("Arduino"); // print message at (0, 0) lcd.setCursor(2, 1); // move cursor to (2, 1) lcd.print("GetStarted.com"); // print message at (2, 1) } void loop() { }

Pasos R\u00e1pidos

  • Copie el código anterior y ábralo con Arduino IDE
  • Haga clic en el botón Subir en Arduino IDE para cargar el código en Arduino
  • Vea el resultado en la pantalla LCD
Arduino muestra texto en la pantalla LCD
  • Intenta modificar el texto y la posición

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

Personaje personalizado

lcd.print() función solo admite caracteres ASCII. Si quieres mostrar un carácter o símbolo especial (p. ej. un corazón, un pájaro enojado), debes usar el generador de caracteres que se muestra a continuación.

LCD 16x2 puede mostrar 32 caracteres (2 filas y 16 columnas). Cada carácter está compuesto por 40 píxeles (8 filas y 5 columnas).

Arduino LCD 16x2 píxeles

El generador de caracteres representa un carácter (40 píxeles). Solo necesitas seguir los siguientes pasos:

Click on each pixel to select/deselect


Copy below custom character code
Replace the customChar[8] in the below code
#include <LiquidCrystal.h> // LCD pins <--> Arduino pins const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; void setup() { lcd.begin(16, 2); // set up number of columns and rows lcd.createChar(0, customChar); // create a new custom character lcd.setCursor(2, 0); // move cursor to (2, 0) lcd.write((byte)0); // print the custom char at (2, 0) } void loop() { }

Resultado en la pantalla LCD:

carácter LCD personalizado

Múltiples caracteres personalizados

Podemos crear hasta 8 caracteres personalizados (con índices de 0 a 7). El siguiente ejemplo crea y muestra tres caracteres.

#include <LiquidCrystal.h> // LCD pins <--> Arduino pins const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); byte customChar0[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; byte customChar1[8] = { 0b00100, 0b01110, 0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100 }; byte customChar2[8] = { 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b11111, 0b01110, 0b00100 }; void setup() { lcd.begin(16, 2); // set up number of columns and rows lcd.createChar(0, customChar0); // create a new custom character (index 0) lcd.createChar(1, customChar1); // create a new custom character (index 1) lcd.createChar(2, customChar2); // create a new custom character (index 2) lcd.setCursor(2, 0); // move cursor to (2, 0) lcd.write((byte)0); // print the custom char 0 at (2, 0) lcd.setCursor(4, 0); // move cursor to (4, 0) lcd.write((byte)1); // print the custom char 1 at (4, 0) lcd.setCursor(6, 0); // move cursor to (6, 0) lcd.write((byte)2); // print the custom char 2 at (6, 0) } void loop() { }

Resultado en la pantalla LCD:

LCD con múltiples caracteres personalizados

Resumen: cómo usar un carácter personalizado en la pantalla LCD

  • Utiliza el generador de caracteres anterior para crear código binario para el carácter personalizado.
  • Declara el código binario del carácter personalizado (copiar del paso anterior)
byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };
  • Crear un carácter personalizado y asignarlo a un valor de índice (de 0 a 7) en la función setup()
lcd.createChar(index, customChar);
  • Imprimir el carácter personalizado en la pantalla LCD en cualquier momento y en cualquier lugar (en las funciones setup() o loop())
lcd.setCursor(column, row); // move cursor to a desired position lcd.write((byte)index); // print the custom char at the desired position

Desafíate a ti mismo

Utiliza una pantalla LCD para realizar alguno de los siguientes proyectos:

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!