top of page

How to Interface a 16×2 character LCD module with PIC 18F4550A Microcontroller using MPLAB X IDE and

Descripción:

EL uso de periféricos de salida, con la finalidad de interactuar con los microcontroladores PIC, permite una mayor interacción con el publico que es ajeno a las configuraciones internas del microcontroaldor, razon por cual explicaremos e interpretaremos el codigo del PIC18F4550

con la finalidad de enviar un mensaje por el LCD 16x2.

Pero que es un LCD?

Puesto que, en el mundo donde vivimos los LCD´s son piezas claves como por ejemplo: Maquinas tragamoneas, dispensadores,etc, que requieren de un interfaz para visualizar y que sea interactivo con el usuario. Según la definición de todo electrónica indica <<El LCD(Liquid Crystal Dysplay) o pantalla de cristal líquido es un dispositivo empleado para la visualización de contenidos o información de una forma gráfica, mediante caracteres.(...), un LCD de 16x2, esto quiere decir que dispone de 2 filas de 16 caracteres cada una.>> http://todoelectrodo.blogspot.pe/2013/02/lcd-16x2.html.

Por lo tanto, un LCD no es mas que un medio para que el usuario no familiarizado con el mundo de la electrónica pueda interactuar con el microcontrolar para entender su proposito, puesto que es mucho mas practico entender "TITANIC" que su representacion en Binario "0000001111010b".

Imagen 1.0 - Proyecto LCD & PIC 18F4550

Que se necesita para Programar una pantalla LCD 16x2 :

Debemos conocer primeramente DataSHEET (https://electrosome.com/wp-content/uploads/2014/08/HD44780U.pdf) , ya que de aqui partimos para que podamos diseñar

nuestra libreria que denominaremos :

LIBRERIA LCD

Para usar adecuadamente esta librería debemos siempre de mantener el orden como se indica:

  • Lcd_Init() : Esta funcion inicializa el LCD definiendo los pines.

  • Lcd_Clear() : Permite Borrar mensajes de la pantalla.

  • Lcd_Set_Cursor(int row, int column) : Esta función se utiliza para establecer la fila y la columna del cursor en la pantalla LCD. Mediante el uso de esta función podemos cambiar la posición del carácter o cadena

  • Lcd_Write_Char(char) : Para escribir un carácter en LCD en la posición actual.

  • Lcd_Write_String(char *string) : Para escribir la cadena en la pantalla LCD en la posición actual.

  • Lcd_Shift_Right() : Para desplazar todo de la pantalla LCD Derecho una vez sin cambiar los datos en la RAM de la pantalla.

  • Lcd_Shift_Left() : Para desplazar todo el contenido de la pantalla LCD Izquierda una vez sin cambiar los datos en la RAM de la pantalla.

Nota: Los Pines a los que se conecta la pantalla LCD deben configurarse como Pines de Salida escribiendo en el Registro TRIS.

MPLAB XC8 Code

#include <xc.h> #include "lcd.h"; #include "CONFIGURO.h"; #include <stdio.h> #include "DELAY.h"

int main() // Programa Principal { unsigned int a; // variable de 16 bit a TRISD = 0x00; // configuracion PORT D como salida. Lcd_Init(); // Inicia el LCD while(1) // se crea un Bucle infinito. { Lcd_Clear(); // Borra la pantalla. Lcd_Set_Cursor(1,1); // Indico la posicion superior del cursor Lcd_Write_String("Curso PIC18F"); // Indico que se Visualice "CURSO PIC 18F" Lcd_Set_Cursor(2,1); // Indico la posición inferior al cursor. Lcd_Write_String("MICROTECSD"); // Indico que se Visualice "MICROTECSD" MsDelay(2000); // UN TIEMPO DE ESPERA.

Lcd_Clear(); // Borra la pantalla. Lcd_Set_Cursor(1,1); // Indico la posición superior del cursor Lcd_Write_String("HOLA"); // Indico que se Visualice "HOLA" Lcd_Set_Cursor(2,1); // Indico la posición inferior al cursor. Lcd_Write_String("MUNDO"); // Indico que se Visualice "MUNDO" MsDelay(2000); // UN TIEMPO DE ESPERA.

Lcd_Clear(); // Borra la pantalla. Lcd_Set_Cursor(1,1); // Indico la posición superior del cursor Lcd_Write_String("CONTACTO3DTEC"); // Indico que se Visualice "HOLA" Lcd_Set_Cursor(2,1); // Indico la posición inferior al cursor. Lcd_Write_String("@GMAIL.COM"); // Indico que se Visualice "MUNDO" MsDelay(2000); // UN TIEMPO DE ESPERA. // Indico que se Visualice "MUNDO" MsDelay(2000); // UN TIEMPO DE ESPERA. // UN TIEMPO DE ESPERA.

// MEDIANTE ESTE FOR, DESPLAZAREMOS A LA IZQUIERDA A UN RECUADRO

// POR VEZ EL ULTIMO TEXTO ALMACENADO EN LA RAM. for(a=0;a<15;a++) { MsDelay(300); // UN TIEMPO DE ESPERA. Lcd_Shift_Left(); }

// MEDIANTE ESTE FOR, DESPLAZAREMOS A LA DERECHA A UN RECUADRO

// POR VEZ EL ULTIMO TEXTO ALMACENADO EN LA RAM.

for(a=0;a<15;a++) { MsDelay(300); // UN TIEMPO DE ESPERA. Lcd_Shift_Right(); }

Lcd_Clear(); // Borra la pantalla. Lcd_Set_Cursor(1,1); // Indico la posición superior del cursor Lcd_Write_String("FRIEND"); // Indico que se Visualice "FRIEND" Lcd_Set_Cursor(2,1); // Ubico al cursor en la segunda linea. Lcd_Write_Char('O'); // Indico escribir solo 0. Lcd_Write_Char('K'); // Indico escribir solo K MsDelay(2000); // UN TIEMPO DE ESPERA. } return 0; }

Descarga el programa completo con la libreria LCD.h:

https://www.dropbox.com/sh/l742gy8q4r1r367/AADLUiO9pPUXb6T4GHe2A8pra?dl=0

VIDEO DEL FUNCIONAMIENTO EN LA PLACA WIFI KIT :

Video de Funcionamiento- LCD 16x2 & PIC 18F4550

FORMAS ESPECIALES :

Pero eso no es todo, aun ahy mas , existen formas especiales para enviar datos con decimales, muy utlizado en aplicaciones con ADC & DCA.

La forma genérica de formato es% nt. Donde n es opcional, que puede ser 1 - 9 para especificar el número de caracteres a ser emitidos o 01 - 09 para indicar ceros a la izquierda o 1,1 a 9,9 para los formatos de punto flotante y% w. T es el tipo que puede ser uno de los siguientes.

Recordemos siempre usar esta libreria propia del compilador XC8 : #include <stdio.h>

EJEMPLO :

void lcd flotante () { // PROGRAMA DE FORMAS ESPECIALES

Lcd_Clear(); // LIMPIA LA PANTALLA DEL LCD. float f = 1.414; // Indicamos la variable y su valor . int a = 56; // Indicamos que a es un valor de 16bit y vale 56. char s[20]; // Indicamos un Array S de 8 bits

sprintf(s, "Float = %f", f); // Invocamos a la funcion Sprntf y almacenamos en S. Lcd_Set_Cursor(1,1); // indicamos la posicion del cursor (superior). Lcd_Write_String(s); // ENVIAMOS AL LCD EL DATO.

sprintf(s, "Integer = %d", a); // Indicamos que la variable sera Integer (Numero Entero). Lcd_Set_Cursor(2,1); // Indicamos que cursor este en la parte inferior. Lcd_Write_String(s); // ENVIAMOS AL LCD EL DATO. * }

Para mayor información sobre formas especiales, recomiendo:

visita: http://www.cplusplus.com/reference/cstdio/printf/

Imagen 1.1- Proyecto LCD & PIC 18F4550


About Me.

I'm a paragraph. Click here to add your own text and edit me. I’m a great place for you to tell a story and let your users know a little more about you.

  • Black Facebook Icon
  • Black Instagram Icon
  • Black Twitter Icon
Never Miss a Post!
bottom of page