Interfaz LCD con PIC16F877A con MikroC

Microcontroladores

Interfaz LCD con PIC16F877A con MikroC

Posted By Stepanenko

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:

 

masterhacks_interfaz_lcd_pic16f877a

 

 

Puedes ver un video demostrativo aquí:

Tagged , , , ,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *