Librería LCD para PIC 16F876A en el PORTB. PICC

Ésta es una librería modificada para que el LCD funcione completamente en el PORTB. La mayoría de las librerías que andan dando vueltas necesitan conectar unos pines del LCD en el PORTA y otros en el PORTB, lo cual, es poco practico a la hora de hacer una placa.

Esta hecha para el compilador PICC,  el LCD usado en el codigo de ejemplo es de 16×2.

Estas son las funciones que tiene:

/*
* Libreria para controlar un LCD con el PIC16F876A PORTB
*/


/* Escribe un byte en el LCD en modo de 4bits */
extern void lcd_write(unsigned char);

/* Limpia la pantalla y vuelve al inicio el cursor */
extern void lcd_clear(void);

/* Escribe un string de caracteres */
extern void lcd_puts(const char * s);

/* Mueve el cursor a la ubicacion especifica */
extern void lcd_goto(unsigned char pos);

/* Inicializa el LCD - (Llamar al principio) */
extern void lcd_init(void);

/* Escribe un caracter */
extern void lcd_putch(char);

Para descargar la librería completa click aquí.

Modo de uso:

En el main.c, deberias tener algo asi:

//INLCUDES

#include "pic.h"
#include "stdio.h"

//definicion del cristal
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 20e6
#endif

//definiciones del PORT B para el LCD
#define LCD_RS RB4
#define LCD_RW RB6
#define LCD_EN RB5
#define LCD_DATA PORTB

//incluyo la librería del LCD
#include "lcd.h"

void main (void){
TRISB=0B00000000;

lcd_init();
lcd_goto(0x00);
lcd_puts("Inicializando...");
lcd_goto(0x40); //segunda linea

__delay_ms(1300);

lcd_puts("HOLA MUNDO!!!");

}

Tambien puedes usar el LCD con el printf, pero no es muy recomendable, porque desperdicias mucho espacio.

Ej: printf(“Temp=%2.1fºC”,TEMPERATURA);

 Conexiones:

Pic16f876 LCD 16x2

Si te sirvió, comenta.

Saludos!

Diego Sucaria

Software & Hardware Developer, Network Administrator, SysAdmin. Estudiante de Ingeniería en Computación de la Universidad Católica de Córdoba

8 Comments

  1. MAI   •  

    Lo vi bien la libreria pero a mi no me funciona…no se si me puedes dar una mano

  2. MAI   •  

    void lcd_puts(const char *s);
    aqui me aparece q fala un identificador en todos los lugares donde haya *s

    • Lordblacksuca   •     Author

      Que compilador estas usando? Yo uso HI-Tech Picc con MPLAB.

  3. MAI   •  

    Yo uso el compilador pic C, primero lo realizo en pCW

  4. Lordblacksuca   •     Author

    Nunca lo he usado. Lo mas probable es que no soporte char pointers. Proba con el mplab con el Hi-Tech.

    • diego   •  

      Hola gente

      Como se hace para que me tome el LCD_DATA los pines del micro RB7,RB6,RB5,RB4 y el RS(RB1) y EN(RB2), porque así como esta en el ejemplo toma 11110000 yo estaría necesitando 00001111, se puede hacer ese cambio ? y que significa el simbolo(^)? el micro que estoy usando es el pic16f874A.

      La idea es usar todos los puertos B para el manejo del LCD , pero que los datos pasen por los puertos desde RB4 al RB7.

      Saludos

      Diego

      • Lordblacksuca   •     Author

        Si, se puede cambiar eso, fijate en el codigo que están declarados los pines. El simbolo ^, da vuelta un bit, si era 1 lo hace 0, y al revez.

  5. Diego   •  

    Como se hace para que me tome el LCD_DATA los pines del micro RB7,RB6,RB5,RB4 y el RS(RB1) y EN(RB2), porque si como esta en el ejemplo toma 11110000 y yo estaría necesitando 00001111, se puede hacer ese cambio ? y que significa el simbolo(^)? el micro que estoy usando es el pic16f874A.

    Saludos

    Diego

Leave a Reply

Your email address will not be published. Required fields are marked *