En este tutorial se verá como crear una interfaz para una pantalla LCD utilizando un PIC16F877A en el lenguaje de programación MikroC.
Los materiales que se utilizarán son los siguientes:
- 1 PIC16F877A
- 1 Sistema mínimo
- 1 Pantalla LCD 16X2
- 1 Potenciómetro 2K
- 1 Protoboard
- Cables para protoboard
- 1 módulo programador de PIC
- 1 Fuente de alimentación de 5V
Al utilizar el PIC16F877A se debe tomar en cuenta que al contar con puertos analógicos y digitales, no es necesario realizar alguna conversión utilizando los registros ADCON0 y ADCON1. Únicamente inicializar el puerto del PIC que se vaya a utilizar para la pantalla.
El código en MikroC para un Hola Mundo es el siguiente:
sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; //Aquí termina la configuración del puerto del PIC, en este caso el B y los pines de la pantalla. void main() { Lcd_init(); // Inicialización del LCD Lcd_Cmd(_LCD_CLEAR); // Borra la pantalla Lcd_Cmd(_LCD_CURSOR_OFF); // Desactiva el cursor Lcd_Out(1,1,"Hola mundo"); //Salida de texto en columna 1 Lcd_Out(2,1,"Hello World"); //Salida de texto en columna 2 }
Ese es el código más básico para mostrar mensajes en la pantalla LCD. Si se quieren mostrar efectos para las palabras, se pueden hacer arreglos con ciclos for.
Un ejemplo de esto es el siguiente código:
sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; // End LCD module connections char txt1[] = "Masterhacks"; char txt2[] = "Tutoriales"; char txt3[] = "Microcontrolador"; char txt4[] = "PIC16F877A"; char i; // Variable para el ciclo void Move_Delay() { // Función para el efecto de movimiento Delay_ms(500); // Velocidad de movimiento } void main(){ Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Out(1,1,txt3); Lcd_Out(2,2,txt4); Delay_ms(2000); Lcd_Cmd(_LCD_CLEAR); Lcd_Out(1,1,txt1); Lcd_Out(2,2,txt2); Delay_ms(2000); // Efectos de movimiento for(i=0; i<4; i++) { // Mueve el texto hacia la derecha Lcd_Cmd(_LCD_SHIFT_RIGHT); Move_Delay(); } while(1) { for(i=0; i<4; i++) { // Mueve el texto hacia la izquierda Lcd_Cmd(_LCD_SHIFT_LEFT); Move_Delay(); } for(i=0; i<4; i++) { Lcd_Cmd(_LCD_SHIFT_RIGHT); Move_Delay(); } } }
El circuito físico es el siguiente:
Puedes ver un video demostrativo aquí: