#ifndef XCLCD_H
#define XCLCD_H
#ifndef _XC_H_
#include <xc.h>
#endif
/******************************************************************************
* Parametros configurables por el usuario *
******************************************************************************/
/*
* El valor de _XTAL_FREQ debe coincidir con el valor definido
* en el programa principal
*/
/*
* LCDEN define el pin EN para el lcd
* LCDRS define el pin RS para el lcd
* LCDRW define el pin RW para el lcd
* LCDDATA define el puerto de datos
*/
/*
* Si se utiliza un pic con resgistros LAT
* se pueden definir los pines utilizando LAT<x>bits.LAT<x><y>
* siendo <x> la letra del puerto correspondiente y <y> el bit
* Tambien se puede definir de la misma manera el puerto de datos
*/
/*
* TRISLCDEN define el bit TRIS para el pin EN
* TRISLCDRS define el bit TRIS para el pin RS
* TRISLCDRW define el bit TRIS para el pin RW
* LCDTRIS define el TRIS correspondiente al puerto de datos
*/
/*
* PROTOCOL4BIT define si se utiliza protocolo de 4 bits
* PROTOCOL8BIT define si se utiliza protocolo de 8 bits
*/
/*
* En caso de utilizar protocolo de 4 bits
* UPPER define si se utiliza el nibble alto del puerto
* LOWER define si se utiliza el nibble bajo del puerto
*/
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 20000000
#endif
#define LCDEN PORTBbits.RB0
#define LCDRS PORTBbits.RB1
#define LCDRW PORTBbits.RB2
#define TRISLCDEN TRISBbits.TRISB0
#define TRISLCDRS TRISBbits.TRISB1
#define TRISLCDRW TRISBbits.TRISB2
#define LCDDATA PORTB
#define LCDTRIS TRISB
#define PROTOCOL4BIT
#define UPPER
/******************************************************************************
* Definicion de valores para lcd_setdisplay *
******************************************************************************/
/*
* Los valores se pueden combinar utilizando el operador &
*/
#define displayoff 0b11110111
#define displayon 0b11110011
#define cursoroff 0b11110011
#define cursoron 0b11110001
#define blinkoff 0b11110011
#define blinkon 0b11110010
/******************************************************************************
* Definicion de valores para lcd_shift *
******************************************************************************/
/*
* Los valores se pueden combinar utilizando el operador &
*/
#define shiftdisplay 0b11100100
#define shiftcursor 0b11101100
#define shiftleft 0b11101100
#define shiftright 0b11101000
/******************************************************************************
* Definicion de valores para lcd_entrymode *
******************************************************************************/
/*
* Los valores se pueden combinar utilizando el operador &
*/
#define increment 0b11111001
#define decrement 0b11111010
#define shifton 0b11111000
#define shiftoff 0b11111001
/******************************************************************************
* Definicion de funciones *
******************************************************************************/
void lcd_init(void);
void lcd_put(unsigned char, unsigned char);
void lcd_puts(const unsigned char*);
void lcd_gotoxy(unsigned char, unsigned char);
bit lcd_busy(void);
void lcd_putini(unsigned char);
void lcd_createchar(unsigned char, const unsigned char*);
void lcd_setdisplay(unsigned char);
void lcd_shift(unsigned char);
void lcd_entrymode(unsigned char);
#define lcd_putch(x) lcd_put(x,1)
#define lcd_clear() lcd_put(0x01,0)
#define lcd_home() lcd_put(0x02,0)
#define lcd_off() lcd_put(0x08,0)
#define lcd_on() lcd_put(0x0C,0)
#endif /* XCLCD_H */