Este es nuestro sexto tutorial en nuestra serie de tutoriales PIC, en este tutorial aprendemos Interfaz de LCD 16x2 con microcontrolador PIC. En nuestros tutoriales anteriores, hemos aprendido los conceptos básicos de PIC utilizando algunos programas de LED parpadeantes y también hemos aprendido cómo usar los temporizadores en el microcontrolador PIC. Puede consultar aquí todos los tutoriales sobre el aprendizaje de microcontroladores PIC utilizando el compilador MPLABX y XC8.
Este tutorial será interesante porque aprenderemos cómo interconectar LCD 16 × 2 con PIC16F877A, verifique el video detallado al final de este tutorial. Atrás quedaron los viejos tiempos en los que usábamos LED para las indicaciones del usuario. Veamos cómo podemos hacer que nuestros proyectos se vean más interesantes y útiles utilizando pantallas LCD. Consulte también nuestros artículos anteriores sobre Interfaz de LCD con 8051, con Arduino, con Raspberry Pi, con AVR.
Funciones para interconectar LCD con microcontrolador PIC:
Para facilitar las cosas, hemos creado una pequeña biblioteca que podría facilitar las cosas al usar esta pantalla LCD con nuestro PIC16F877A. El archivo de encabezado "MyLCD.h" se proporciona aquí para su descarga, que contiene todas las funciones necesarias para controlar la pantalla LCD utilizando PIC MCU. El código de la biblioteca está bien explicado por líneas de comentarios, pero si aún tiene dudas, comuníquese con nosotros a través de la sección de comentarios. Consulte también este artículo para conocer el funcionamiento básico de LCD y sus pines.
Nota: Siempre se recomienda saber qué está sucediendo realmente dentro de su archivo de encabezado porque lo ayudará a depurar o al cambiar la MCU.
Ahora, hay dos formas de agregar este código a su programa. Puede copiar todas las líneas de código anteriores en MyLCD.h y pegarlas antes del void main (). O puede descargar el archivo de encabezado usando el enlace y agregarlo al archivo de encabezado de su proyecto ( #include "MyLCD.h "; ). Esto se puede hacer haciendo clic derecho en el archivo de encabezado y seleccionando Agregar elemento existente y buscando este archivo de encabezado.
Aquí he copiado y pegado el código del archivo de encabezado en mi archivo C principal. Entonces, si está usando nuestro código, entonces no necesita descargar y agregar el archivo de encabezado a su programa, solo use el Código completo que se proporciona al final de este Tutorial. También tenga en cuenta que esta biblioteca solo es compatible con el microcontrolador PIC de la serie PIC16F.
Aquí estoy explicando cada función dentro de nuestro archivo de encabezado a continuación:
void Lcd_Start (): Esta función debería ser la primera función que deba llamarse para comenzar a trabajar con nuestra LCD. Deberíamos llamar a esta función solo una vez para evitar retrasos en el programa.
anular Lcd_Start () {Lcd_SetBit (0x00); para (int i = 1065244; i <= 0; i--) NOP (); Lcd_Cmd (0x03); __delay_ms (5); Lcd_Cmd (0x03); __delay_ms (11); Lcd_Cmd (0x03); Lcd_Cmd (0x02); // 02H se usa para Volver a casa -> Borra la RAM e inicializa la pantalla LCD Lcd_Cmd (0x02); // 02H se usa para Volver a casa -> Limpia la RAM e inicializa la pantalla LCD Lcd_Cmd (0x08); // Seleccione Fila 1 Lcd_Cmd (0x00); // Limpiar la pantalla de la fila 1 Lcd_Cmd (0x0C); // Seleccione Fila 2 Lcd_Cmd (0x00); // Limpiar la pantalla de la fila 2 Lcd_Cmd (0x06); }
Lcd_Clear (): esta función borra la pantalla LCD y se puede utilizar dentro de los bucles para borrar la apariencia de los datos anteriores.
Lcd_Clear () {Lcd_Cmd (0); // Limpiar la pantalla LCD Lcd_Cmd (1); // Mueve el cursor a la primera posición}
void Lcd_Set_Cursor (x pos, y pos): una vez iniciado, nuestro LCD está listo para recibir comandos, podemos indicarle al LCD que coloque el cursor en su ubicación preferida utilizando esta función. Supongamos que si necesitamos el cursor en el quinto carácter de la primera fila. Entonces la función será nula Lcd_Set_Cursor (1, 5)
void Lcd_Set_Cursor (char a, char b) {char temp, z, y; si (a == 1) {temp = 0x80 + b - 1; // 80H se usa para mover el cursor z = temp >> 4; // Bajar 8 bits y = temp & 0x0F; // Superior de 8 bits Lcd_Cmd (z); // Establecer Fila Lcd_Cmd (y); // Establecer columna} else if (a == 2) {temp = 0xC0 + b - 1; z = temp >> 4; // Bajar 8 bits y = temp & 0x0F; // Superior de 8 bits Lcd_Cmd (z); // Establecer Fila Lcd_Cmd (y); // Establecer columna}}
void Lcd_Print_Char (char data): Una vez que el cursor está configurado podemos escribir un carácter en su posición simplemente llamando a esta función.
void Lcd_Print_Char (datos de caracteres) // Enviar 8 bits a modo de 4 bits {char Lower_Nibble, Upper_Nibble; Lower_Nibble = datos & 0x0F; Upper_Nibble = datos & 0xF0; RS = 1; // => RS = 1 Lcd_SetBit (Upper_Nibble >> 4); // Enviar la mitad superior desplazando 4 EN = 1; para (int i = 2130483; i <= 0; i--) NOP (); EN = 0; Lcd_SetBit (Lower_Nibble); // Enviar la mitad inferior EN = 1; para (int i = 2130483; i <= 0; i--) NOP (); EN = 0; }
void Lcd_Print_String (char * a): si se va a mostrar un grupo de caracteres, se puede utilizar la función de cadena.
void Lcd_Print_String (char * a) {int i; para (i = 0; a! = '\ 0'; i ++) Lcd_Print_Char (a); // Divide la cadena usando punteros y llama a la función Char}
Cada vez que se llama a Lcd_Print_Char (datos de caracteres) , sus valores de caracteres respectivos se envían a las líneas de datos de la pantalla LCD. Estos caracteres llegan al HD44780U en forma de bits. Ahora, este IC relaciona los bits con el carácter que se mostrará utilizando su memoria ROM como se muestra en la siguiente tabla. Puede encontrar bits para todos los caracteres en la hoja de datos del controlador LCD HD44780U.
Ahora, como estamos satisfechos con nuestro archivo de encabezado, construyamos el circuito y probemos el programa. También verifique el archivo de encabezado completo que se proporciona en el enlace anterior.
Diagrama de circuito y pruebas:
A continuación se muestra el diagrama de circuito para interconectar LCD 16x2 con microcontrolador PIC.
No he mostrado la fuente de alimentación o la conexión ICSP en el circuito anterior, ya que estamos usando la misma placa que usamos en el tutorial anterior, verifique aquí.
Una cosa importante a tener en cuenta en el programa son las definiciones de pines de LCD:
#define RS RD2 #define EN RD3 #define D4 RD4 #define D5 RD5 #define D6 RD6 #define D7 RD7
Estas definiciones de pines se pueden cambiar de acuerdo con la configuración del hardware del programador. Recuerde cambiar la configuración de puerto respetada en la función principal si cambia aquí.
El hardware para este proyecto es muy simple. Vamos a reutilizar el mismo módulo PIC que usamos la última vez y conectaremos el módulo LCD a nuestro PIC usando cables de puente.
La conexión se puede entender en la siguiente tabla:
Pin LCD No. |
Nombre del pin LCD |
Nombre de pin de MCU |
Pin de MCU No. |
1 |
Suelo |
Suelo |
12 |
2 |
VCC |
+ 5V |
11 |
3 |
VEE |
Suelo |
12 |
4 |
Registrarse Seleccionar |
RD2 |
21 |
5 |
Leer escribir |
Suelo |
12 |
6 |
Habilitar |
RD3 |
22 |
7 |
Bit de datos 0 |
CAROLINA DEL NORTE |
- |
8 |
Bit de datos 1 |
CAROLINA DEL NORTE |
- |
9 |
Bit de datos 2 |
CAROLINA DEL NORTE |
- |
10 |
Bit de datos 3 |
CAROLINA DEL NORTE |
- |
11 |
Bit de datos 4 |
RD4 |
27 |
12 |
Bit de datos 5 |
RD5 |
28 |
13 |
Bit de datos 6 |
RD6 |
29 |
14 |
Bit de datos 7 |
RD7 |
30 |
15 |
LED positivo |
+ 5V |
11 |
dieciséis |
LED negativo |
Suelo |
12 |
Ahora simplemente hagamos las conexiones, volquemos el código a nuestra MCU y verifiquemos la salida.
Si tiene algún problema o duda, utilice la sección de comentarios. También consulte el video de demostración que se muestra a continuación.