#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
*/
/*
* LCDTRISEN define el bit TRIS para el pin EN
* LCDTRISRS define el bit TRIS para el pin RS
* LCDTRISRW 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
*/
/*
* En caso de utilizar el pin RW, hay que definir
* USE_RW
*/
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 20000000
#endif
#define LCDEN PORTBbits.RB0
#define LCDRS PORTBbits.RB1
#define LCDRW PORTBbits.RB2
#define LCDTRISEN TRISBbits.TRISB0
#define LCDTRISRS TRISBbits.TRISB1
#define LCDTRISRW TRISBbits.TRISB2
#define LCDDATA PORTB
#define LCDTRIS TRISB
#define PROTOCOL4BIT
#define UPPER
#define USE_RW
/******************************************************************************
* Definicion de valores para lcd_setdisplay *
******************************************************************************/
/*
* Los valores se pueden combinar utilizando el operador |
*/
#define DISPLAY_OFF 0b00001000
#define DISPLAY_ON 0b00001100
#define CURSOR_OFF 0b00001100
#define CURSOR_ON 0b00001110
#define BLINK_OFF 0b00001100
#define BLINK_ON 0b00001101
/******************************************************************************
* Definicion de valores para lcd_shift *
******************************************************************************/
/*
* Los valores se pueden combinar utilizando el operador |
*/
#define SHIFT_DISPLAY 0b00011000
#define SHIFT_CURSOR 0b00010000
#define SHIFT_LEFT 0b00010000
#define SHIFT_RIGHT 0b00010100
/******************************************************************************
* Definicion de valores para lcd_entrymode *
******************************************************************************/
/*
* Los valores se pueden combinar utilizando el operador |
*/
#define INCREMENT 0b00000110
#define DECREMENT 0b00000100
#define SHIFT_ON 0b00000101
#define SHIFT_OFF 0b00000100
/******************************************************************************
* 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 */