- Funcionamiento de la pantalla LCD 16x2
- Diagrama de circuito para interfaz LCD con microcontrolador STM8
- Biblioteca LCD STM8 - Archivo de encabezado para STM8S103F3P6
- Programa LCD para microcontrolador STM8S
- STM8 con LCD - Funcionando
La pantalla LCD alfanumérica de 16x2 es la pantalla más utilizada por aficionados y entusiastas. La pantalla es muy útil cuando desea mostrar información básica al usuario y también puede ayudar a probar o depurar nuestro código. Este módulo LCD de 16x2 en particular está fácilmente disponible y ha sido popular durante mucho tiempo. Puede obtener más información sobre los conceptos básicos del módulo LCD de 16x2 en el artículo vinculado.
Para continuar con nuestra serie de tutoriales del microcontrolador STM8, en este tutorial, aprenderemos cómo conectar una pantalla LCD con el microcontrolador STM8. También hemos interconectado previamente LCD 16x2 con muchos otros microcontroladores, los tutoriales se enumeran a continuación y puede consultarlos si está interesado.
Si es nuevo en STM8, consulte el artículo Introducción al microcontrolador STM8 para comprender los conceptos básicos de la placa controladora y el entorno de programación. No cubriremos los conceptos básicos en este tutorial.
Funcionamiento de la pantalla LCD 16x2
Como sugiere el nombre, una pantalla LCD de 16x2 tendrá 16 columnas y 2 filas. Entonces, en total, podremos mostrar 32 caracteres en esta pantalla y estos caracteres pueden ser alfabetos o números o incluso símbolos. A continuación se muestra un simple pinout LCD de 16x2 que usamos en este tutorial:
Como puede ver, la pantalla tiene 16 pines y podemos dividirla en cinco categorías, pines de alimentación, pines de contraste, pines de control, pines de datos y pines de luz de fondo como se muestra en la siguiente tabla. Entraremos en los detalles de cada pin cuando analicemos el diagrama de circuito de este tutorial.
Categoría | PIN NO. | Nombre de PIN | Función |
Pines de potencia | 1 | VSS | Pin de tierra, conectado a tierra |
2 | VDD o Vcc | Pin de voltaje + 5V | |
Pin de contraste | 3 | V0 o VEE | Ajuste de contraste, conectado a Vcc a través de una resistencia variable. |
Pines de control | 4 | RS | Registro Seleccionar Pin, RS = 0 Modo de comando, RS = 1 Modo de datos |
5 | RW | Pin de lectura / escritura, RW = 0 Modo de escritura, RW = 1 Modo de lectura | |
6 | mi | Habilitar, un pulso alto a bajo necesita habilitar la pantalla LCD | |
Pines de datos | 7-14 | D0-D7 | Pines de datos, almacena los datos que se mostrarán en la pantalla LCD o las instrucciones de comando |
Pines de luz de fondo | 15 | LED + o A | Para alimentar la luz de fondo + 5V |
dieciséis | LED- o K | Tierra de luz de fondo |
En la parte posterior de la pantalla LCD, como se muestra en la imagen a continuación, encontrará dos puntos negros, dentro de los cuales tenemos el controlador de LCD HD44780 IC (rodeado en rojo). Nuestro microcontrolador debe comunicarse con este IC que a su vez controlará lo que se muestra en la pantalla LCD. Si tiene curiosidad por saber exactamente cómo funciona todo esto, debe verificar el funcionamiento de la pantalla LCD 16x2 donde ya hemos discutido cómo funciona la pantalla LCD en detalle.
En este tutorial, discutiremos el diagrama de circuito y el código para mostrar caracteres alfabéticos (alfabetos y números) en una pantalla LCD de 16x2 usando comandos simples LCD_print _char y LCD_print_string . Estos comandos se pueden usar directamente en el programa después de incluir nuestro archivo de encabezado. El archivo de encabezado se ocupa de la mayoría de las cosas para usted, por lo que no es obligatorio saber cómo funciona la pantalla o el controlador IC HD44780.
Diagrama de circuito para interfaz LCD con microcontrolador STM8
El circuito LCD STM8 completo se puede encontrar en la siguiente imagen. Como puede ver, la conexión para el controlador STM8S103F3P6 con LCD es muy simple, tenemos la pantalla LCD conectada directamente a nuestra placa y el ST-link también está conectado para programar la placa.
Los pines de alimentación Vss y Vcc están conectados al pin de 5V en la placa STM8S, tenga en cuenta que el voltaje de funcionamiento de la pantalla LCD es de 5V y está conectado para funcionar con 3.3V. Entonces, aunque el microcontrolador STM8S103F3P6 funciona con 3.3V, es obligatorio tener un suministro de 5V para la pantalla LCD, puede evitar esto usando un controlador de carga IC, pero no lo discutiremos en este tutorial.
A continuación, tenemos el pin de contraste que se usa para configurar el contraste de la LCD, lo hemos conectado al potenciómetro para que podamos controlar el contraste. Hemos usado un potenciómetro de 10k, pero también puede usar otros valores cercanos, el potenciómetro actúa como un divisor de potencial para proporcionar 0-5 V al pin de contraste, por lo general también puede usar una resistencia directamente para proporcionar alrededor de 2.2V para un contraste razonable valor. Luego tenemos los pines de reinicio (RS), lectura / escritura (RW) y habilitación (E). El pin de lectura-escritura está conectado a tierra porque no leeremos nada de la pantalla LCD, solo realizaremos operaciones de escritura. Los otros dos pines de control R y E están conectados a los pines PA1 y PA2 respectivamente.
Luego tenemos los pines de datos DB0 a DB7. El LCD de 16x2 puede operar en dos modos, uno es un modo de operación de 8 bits donde tenemos que usar todos los 8 pines de datos (DB0-DB7) en el LCD y el otro es el modo de operación de 4 bits donde solo necesitamos 4 pines de datos (DB4-DB7). El modo de 4 bits se usa comúnmente porque requiere menos pines GPIO del controlador, por lo que también hemos usado el modo de 4 bits en este tutorial y solo hemos conectado los pines DB4, DB5, DB6 y DB7 a los pines PD1, PD2, PD3 y PD4 respectivamente.
Los dos últimos pines BLA y BLK se utilizan para alimentar el LED de retroiluminación interna, hemos utilizado una resistencia de 560 ohmios como resistencia limitadora de corriente. El programador ST-Link está conectado como siempre como en nuestro tutorial anterior. Hice la conexión completa en el tablero y mi configuración se ve así como se muestra en la imagen de abajo.
Biblioteca LCD STM8 - Archivo de encabezado para STM8S103F3P6
Antes de continuar con el diagrama del circuito, obtengamos el archivo de encabezado LCD STM8 de GitHub usando el siguiente enlace:
Archivo de encabezado LCD STM8S 16x2
Puede descargar el repositorio completo y obtener el archivo stm8s103_LCD_16x2.h o simplemente el código del enlace anterior. Al configurar el proyecto, asegúrese de incluir todos los archivos de encabezado necesarios en el directorio inc junto con este archivo de encabezado.
Si no está seguro de cómo agregar los archivos de encabezado y compilar el programa, siga el video al final de esta página. Y si tiene curiosidad sobre cómo funciona el código dentro del archivo de encabezado, puede consultar el PIC con un tutorial de LCD. El archivo de encabezado utilizado en este proyecto es muy similar al que se explica allí, por lo que no entraremos en detalles al respecto.
Programa LCD para microcontrolador STM8S
Para la demostración, programaremos nuestro controlador STM8S para que muestre una cadena simple como "Circuit Digest" y luego incrementaremos un valor de "Prueba" por cada segundo en la segunda línea. El programa completo se puede encontrar al final de esta página. La explicación es la siguiente.
Comenzamos nuestro programa definiendo los pines y agregando los archivos de encabezado requeridos como siempre. En nuestro diagrama de circuito discutido anteriormente, hemos conectado LCD_RS a PA1, por lo que lo hemos definido como LCD_RS GPIOA, GPIO_PIN_1. Del mismo modo, también hemos hecho lo mismo con otros pines. Si siguen un circuito diferente, asegúrese de cambiar estos valores en consecuencia.
#define LCD_RS GPIOA, GPIO_PIN_1 #define LCD_EN GPIOA, GPIO_PIN_2 #define LCD_DB4 GPIOD, GPIO_PIN_1 #define LCD_DB5 GPIOD, GPIO_PIN_2 #define LCD_DB6 GPIOD, GPIO_PinePIN_4s #de7
A continuación, dentro de nuestro programa principal, hemos declarado las variables necesarias para este código de muestra. Tenemos una variable de prueba llamada test_var que se inicializa a cero, incrementaremos la variable y la mostraremos en la pantalla LCD. Los caracteres d1 a d4 representan los 4 dígitos de la variable de prueba porque nuestra pantalla LCD no puede mostrar el valor int directamente, tenemos que convertirlos a caracteres.
// Declaraciones de variables int test_var = 0; char d4, d3, d2, d1;
La función LCD_Begin () se utiliza para inicializar la pantalla LCD. Esta función inicializará todos los pines GPIO requeridos y también configurará la pantalla LCD en modo LCD 16x2. Luego tenemos la función LCD_Clear () que se usa para borrar todos los valores en la pantalla LCD, esto borrará todo en la pantalla LCD para que esté limpio para escribir nuevos valores. Luego tenemos la función LCD_Set_Cursor (x, y) donde xey son las posiciones en las que necesitamos escribir nuestro nuevo carácter. Por ejemplo, (1,1) significa primera fila y primera columna, de manera similar (2,12) significa segunda fila 12 columna, igualmente. Tenga en cuenta que tenemos 2 filas y 16 columnas aquí, como comentamos anteriormente.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Ahora, la pantalla LCD está configurada, borrada y el cursor está en el lugar. Lo siguiente es imprimir algo en la pantalla. Podemos usar LCD_Print_String ("Cadena de muestra") para imprimir una cadena en LCD y LCD_Print_Char (a) para imprimir un valor de carácter en la LCD. En nuestro programa aquí hemos impreso "STM8S103F3P3 LCD" y hemos creado un retraso de 5 segundos utilizando el siguiente código.
Lcd_Print_String ("STM8S103F3P3 LCD"); delay_ms (5000);
Después de la demora de 5 segundos, borramos la pantalla LCD nuevamente y mostramos “Resumen de circuito” en la primera fila y “Prueba:” I en la segunda fila.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Resumen de circuito"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Prueba:");
Dentro del tiempo de bucle, vamos a dividir el valor en la variable entera test_var en caracteres individuales de manera que se pueda mostrar en la pantalla LCD utilizando los operadores de división y módulo simples. También hemos agregado '0' para convertir el valor ASCII al carácter.
d4 = test_var% 10 + '0'; d3 = (var_prueba / 10)% 10 + '0'; d2 = (var_prueba / 100)% 10 + '0'; d1 = (var_prueba / 1000) + '0';
Luego, hemos puesto el cursor en (2,6) porque ya hemos escrito "Prueba:" en la segunda fila que tiene 6 caracteres. Si sobrescribimos, el carácter existente será reemplazado por un nuevo carácter en la pantalla LCD. También hemos agregado un retraso de 1 segundo e incrementamos la variable.
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); delay_ms (1000); test_var ++;
STM8 con LCD - Funcionando
Para probar nuestro programa, simplemente cargue el código en nuestro controlador y enciéndalo con el puerto micro-USB. Tenga en cuenta que la pantalla LCD requiere 5 V para funcionar, por lo que es obligatorio alimentar la placa desde el puerto USB. Lo hemos alimentado previamente directamente desde ST-link porque no necesitábamos el suministro de 5V.
Como puede ver, la pantalla LCD está funcionando como se esperaba con el valor de la variable de prueba incrementándose por cada segundo aproximadamente. Además, tenga en cuenta que no hemos usado temporizadores y solo hemos usado la función de retardo para crear este retardo, así que no espere que la duración del retardo sea precisa, usaremos temporizadores más adelante en otro tutorial para ese propósito.
El funcionamiento completo del proyecto se puede encontrar en el video vinculado a continuación. Espero que hayas disfrutado del tutorial y hayas aprendido algo útil. Si tiene alguna pregunta, déjela en la sección de comentarios o utilice nuestros foros para otras consultas técnicas.