El módulo LCD es la unidad de salida más común en una placa de microcontrolador. Es muy efectivo ya que puede mostrar mensajes, valores, reloj, etc. Se utilizan tipos especiales de controladores LCD para controlar la pantalla LCD. Dos o más controladores IC de este tipo, junto con la pantalla LCD, forman módulos LCD que se encuentran en los sistemas integrados. Los caracteres que se muestran en los módulos LCD en realidad se almacenan en las ubicaciones de la memoria interna de estos controladores. Se almacenan de una manera que se parece exactamente a la tabla ASCII. Siempre que los microcontroladores envían un valor ASCII, los controladores LCD muestran el carácter ASCII que se ha almacenado correspondiente a ese valor.
Los módulos LCD pueden mostrar no sólo caracteres ASCII sino también caracteres personalizados. El usuario puede almacenar la matriz de píxeles correspondiente al carácter personalizado en un módulo LCD. El carácter personalizado almacenado se puede mostrar enviando el valor correspondiente al módulo LCD.
El módulo LCD tiene dos o más circuitos integrados de controlador de pantalla que almacenan el patrón de caracteres que se mostrará. Siempre que se envía un valor ASCII al módulo LCD, el controlador carga la matriz de caracteres correspondiente y la muestra en la pantalla LCD. Para mostrar cada carácter, la pantalla LCD utiliza una matriz de 8*5 píxeles en la pantalla. En la memoria interna, todos los píxeles que se activarán para un carácter determinado se almacenan como 1 y el resto se mantienen como 0. En la siguiente imagen se muestra un ejemplo de un carácter almacenado en la memoria EPROM interna del controlador LCD común HD44780;
Fig. 2: Patrón de caracteres almacenado en la memoria EPROM del controlador LCD HD44780
La imagen que se muestra arriba es el patrón de caracteres almacenado en la memoria interna del controlador LCD. El valor ASCII para la letra 'b' en binario es 0b01100010 y, por lo tanto, el patrón se almacena en la ubicación de la memoria con la misma dirección. Por lo tanto, cuando el microcontrolador envía el valor ASCII del carácter 'b', el controlador LCD carga el patrón de caracteres desde la misma ubicación con la dirección igual a ese valor ASCII. La memoria donde se almacenan los caracteres estándar se llama ROM generador de caracteres (CGROM). El usuario no puede escribir en estas ubicaciones ya que es una memoria de solo lectura (ROM). El controlador LCD tiene otro bloque de memoria que es una memoria de lectura y escritura con 64 bytes (8*8) de almacenamiento por ubicación donde el usuario puede almacenar sus caracteres personalizados. El usuario puede escribir 64 caracteres personalizados en esta memoria, conocida como RAM generadora de caracteres (CGRAM).
En este proyecto se utiliza la placa Arduino pro-mini, que luego se programa con la ayuda de Arduino IDE versión 1.0.3 en el sistema operativo Windows. A continuación se muestra la imagen de la placa Arduino pro-mini y el IDE de Arduino;
Fig. 3: Placa típica Arduino Pro-Mini
Fig. 4: Ventana del software Arduino IDE
Otro hardware que puede realizar la conversión de USB a TTL se utiliza para cargar el programa en la placa Arduino.
5: Placa convertidora externa de USB a TTL para programación Arduino y comunicación en serie
Se supone que el lector ha leído el proyecto sobre cómo empezar con Arduino y ha hecho todo lo que se comenta en él. Debe averiguar el carácter personalizado que debe mostrarse en la pantalla LCD. Los caracteres personalizados que se muestran en este proyecto se muestran en la siguiente imagen y la siguiente sección explica cómo encontrar el patrón de caracteres requerido para cada carácter personalizado.
Fig. 6: Caracteres personalizados creados en el proyecto en la pantalla LCD usando la configuración del circuito Arduino en el tablero
La pantalla LCD utiliza un bloque de 8*8 píxeles para mostrar cada carácter, por lo que debe tomar una matriz de 8*5, dibujar el carácter personalizado requerido y encontrar el patrón de bits requerido. Se puede trabajar con la ayuda de una matriz de píxeles y una matriz binaria como se muestra en la siguiente imagen.
Fig. 7: Matriz binaria y de 8*5 píxeles para medio ciclo positivo para caracteres personalizados
Hay ocho filas R0 a R7 y ocho columnas C0 a C7. Los valores en todas las filas y columnas ahora son cero ya que todos los píxeles están desactivados. A todos los píxeles que deben activarse se les debe dar el valor 1 y el resto debe mantenerse como 0. Ahora lea el patrón binario y escriba lo mismo en CGRAM para generar el carácter personalizado. Es recomendable almacenar el patrón de caracteres en una matriz de caracteres para que sea fácil de usar con código C. La matriz de píxeles y la matriz binaria del primer carácter personalizado que se muestra en el proyecto se muestran en la siguiente imagen;
Fig. 8: 8*5 píxeles y matriz binaria para el primer carácter personalizado
La matriz de caracteres de 8 bytes para el carácter personalizado que se muestra arriba se puede definir en el código como se indica a continuación;
{
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b11111
};
La matriz de píxeles y la matriz binaria del segundo carácter personalizado que se muestra en el proyecto se muestran en la siguiente imagen;
Fig. 9: 8*5 píxeles y matriz binaria para el segundo carácter personalizado usando Arduino
La matriz de caracteres de 8 bytes para el carácter personalizado que se muestra arriba se puede definir en el código como se indica a continuación;
{
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b11111,
0b11111
};
La matriz de píxeles y la matriz binaria del tercer carácter personalizado que se muestra en el proyecto se muestran en la siguiente imagen;
Fig. 10: Matriz binaria y de píxeles para el tercer carácter personalizado usando Arduino
La matriz de caracteres de 8 bytes para el carácter personalizado que se muestra arriba se puede definir en el código como se indica a continuación;
{
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b11111,
0b11111,
0b11111
};
La matriz de píxeles y la matriz binaria del cuarto carácter personalizado que se muestra en el proyecto se muestran en la siguiente imagen;
Fig. 11: Matriz binaria y de píxeles para el cuarto carácter personalizado
La matriz de caracteres de 8 bytes para el carácter personalizado que se muestra arriba se puede definir en el código como se indica a continuación;
{
0b00000,
0b00000,
0b00000,
0b00000,
0b11111,
0b11111,
0b11111,
0b11111
};
La matriz de píxeles y la matriz binaria del quinto carácter personalizado que se muestra en el proyecto se muestran en la siguiente imagen;
Fig. 12: Matriz binaria y de píxeles para el quinto carácter personalizado
La matriz de caracteres de 8 bytes para el carácter personalizado que se muestra arriba se puede definir en el código como se indica a continuación;
{
0b00000,
0b00000,
0b00000,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111
};
La matriz de píxeles y la matriz binaria del sexto carácter personalizado que se muestra en el proyecto se muestran en la siguiente imagen;
Fig. 13: Matriz binaria y de píxeles para el sexto carácter personalizado
La matriz de caracteres de 8 bytes para el carácter personalizado que se muestra arriba se puede definir en el código como se indica a continuación;
{
0b00000,
0b00000,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111
};
La matriz de píxeles y la matriz binaria del séptimo carácter personalizado que se muestra en el proyecto se muestran en la siguiente imagen;
Fig. 14: Matriz binaria y de píxeles para el séptimo carácter personalizado usando Arduino
La matriz de caracteres de 8 bytes para el carácter personalizado que se muestra arriba se puede definir en el código como se indica a continuación;
{
0b00000,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111
};
La matriz de píxeles y la matriz binaria del octavo carácter personalizado que se muestra en el proyecto se muestran en la siguiente imagen;
Fig. 15: Matriz binaria y de píxeles para el octavo carácter personalizado usando Arduino
La matriz de caracteres de 8 bytes para el carácter personalizado que se muestra arriba se puede definir en el código como se indica a continuación;
{
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111
};
El IDE de Arduino tiene una biblioteca llamada
El código escrito para este proyecto tiene una función lcd.createChar que ayuda a crear caracteres personalizados en una pantalla LCD. Los detalles de la función lcd.createChar se analizan en la siguiente sección.
lcd.createChar
La función lcd.createChar se puede utilizar para escribir un carácter personalizado en la ubicación requerida en el CGRAM. La función tiene dos parámetros en los que el primer parámetro es la ubicación en la memoria CGRAM donde se debe almacenar la matriz de caracteres correspondiente al carácter personalizado y el segundo parámetro es la matriz de caracteres en sí. Por ejemplo, si hay una matriz de caracteres personalizada llamada 'cc' y debe almacenarse en la quinta ubicación del CGRAM, se puede usar la siguiente declaración;
lcd.createChar(5,cc);
La instrucción anterior escribe la matriz de caracteres en la quinta ubicación CGRAM del controlador LCD desde donde se puede mostrar llamando a la función lcd.write analizada en los proyectos sobre cómo conectar LCD a PC y cómo hacer una pantalla LCD con desplazamiento .
lcd.escribir(5);
Código fuente del proyecto
### /*================================= EG LABS ============= ============== =========================== Reciba un carácter a través del puerto serie de la PC y muestre el mismo carácter en una pantalla LCD de 16*2 en forma de desplazamiento junto con un LED iluminado cada vez El circuito: * LED conectado desde el pin 5 a tierra a través de una resistencia de 1K LCD: * Pin LCD RS a pin digital 12 * LCD habilita pin a pin digital 11 * LCD D4 pin a digital pin 5 * Pin LCD D5 a pin digital 4 * Pin LCD D6 a pin digital 3 * Pin LCD D7 a pin digital 2 * LCD R/W pin a tierra * Resistencia de 10K: * termina en +5V y tierra *limpiador al pin 3 del LCD * Ánodo LED conectado a la salida digital 6 * Cátodo LED conectado a tierra a través de una resistencia de 1K //================================= EG LABS ============= ============== ===========================*/ // incluye el código de la biblioteca: #incluir// inicializa la biblioteca con los números de los pines de la interfaz LCD de cristal líquido (12, 11, 5, 4, 3, 2); //----------------- almacena los caracteres personalizados en matrices ---------------------// byte cc1(8) = { 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111 }; byte cc2(8) = { 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111 }; byte cc3(8) = { 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111 }; byte cc4(8) = { 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111 }; byte cc5(8) = { 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 }; byte cc6(8) = { 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 }; byte cc7(8) = { 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 }; byte cc8(8) = { 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 }; //----------------- almacena los caracteres personalizados en matrices ---------------------// // le damos un nombre al pin LED: LED int = 6; configuración vacía { //---- crear caracteres personalizados ----// lcd.createChar(1, cc1); lcd.createChar(2, cc2); lcd.createChar(3, cc3); lcd.createChar(4, cc4); lcd.createChar(5, cc5); lcd.createChar(6, cc6); lcd.createChar(7, cc7); lcd.createChar(8, cc8); //---- crear caracteres personalizados ----// // inicializa el pin del led como salida. pinMode(led, SALIDA); // configura el número de columnas y filas de la pantalla LCD: lcd.comenzar(16, 2); } bucle vacío { lcd.print("EG LABORATORIOS "); lcd.escribir(1); // mostrar carácter personalizado //---- LED parpadeante -----// escritura digital (led, ALTA); retraso(1000); escritura digital (led, BAJO); retraso(1000); //---- LED parpadeante -----// lcd.escribir(2); // mostrar caracter personalizado //---- LED parpadeante -----// escritura digital (led, ALTA); retraso(1000); escritura digital (led, BAJO); retraso(1000); //---- LED parpadeante -----// lcd.escribir(3); // mostrar carácter personalizado //---- LED parpadeante -----// escritura digital (led, ALTA); retraso(1000); escritura digital (led, BAJO); retraso(1000); //---- LED parpadeante -----// lcd.escribir(4); // mostrar caracter personalizado //---- LED parpadeante -----// escritura digital (led, ALTA); retraso(1000); escritura digital (led, BAJO); retraso(1000); //---- LED parpadeante -----// lcd.escribir(5); // mostrar carácter personalizado //---- LED parpadeante -----// escritura digital (led, ALTA); retraso(1000); escritura digital (led, BAJO); retraso(1000); //---- LED parpadeante -----// lcd.escribir(6); // mostrar carácter personalizado //---- LED parpadeante -----// escritura digital (led, ALTA); retraso(1000); escritura digital (led, BAJO); retraso(1000); //---- LED parpadeante -----// lcd.escribir(7); //---- LED parpadeante -----// escritura digital (led, ALTA); retraso(1000); escritura digital (led, BAJO); retraso(1000); //---- LED parpadeante -----// lcd.escribir(8); // mostrar caracter personalizado //---- LED parpadeante -----// escritura digital (led, ALTA); retraso(1000); escritura digital (led, BAJO); retraso(1000); //---- LED parpadeante -----// lcd.claro; } ###
Diagramas de circuito
Diagrama de circuito-Creación de personajes personalizados-LCD-Usando-Arduino | ![]() |
Componentes del proyecto
- Arduino ProMini
- LCD
- CONDUJO
- Resistor
Vídeo del proyecto