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:

[cc lang=”c”]

/*
* 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);

[/cc]

Para descargar la librería completa click aquí.

Modo de uso:

En el main.c, deberias tener algo asi:

[cc lang=”c”]

//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!!!”);

}

[/cc]

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!

Solución a los ataques SQL-Injection y de etiquetas html, php etc.
11 December, 2010
Volviendo a Ubuntu 9.10 Karmic Koala
19 July, 2010
Vulnerabilidad en WordPress Superpuperdomain2.com
18 August, 2011
9 Comments
  • Reply
    MAI
    6 October, 2011 at 7:42 AM

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

  • Reply
    MAI
    6 October, 2011 at 7:44 AM

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

    • Reply
      Lordblacksuca
      6 October, 2011 at 9:34 AM

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

  • Reply
    MAI
    6 October, 2011 at 9:42 PM

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

  • Reply
    Lordblacksuca
    6 October, 2011 at 9:43 PM

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

    • Reply
      diego
      29 October, 2011 at 1:26 AM

      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

      • Reply
        Lordblacksuca
        6 November, 2011 at 8:45 AM

        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.

  • Reply
    Diego
    27 October, 2011 at 9:26 AM

    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

  • Reply
    Miguel
    7 January, 2017 at 7:58 PM

    La librería es imposible descargarla supongo que es porque esta página es vieja y esta desatendida, sale el siguiente mensaje:
    ERROR 403 – Forbidden!

Leave a Reply

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