// Ejemplo de configuracion y utilizacion
#include <htc.h>
#include <stdlib.h>
#include "pic168xa.h"
__CONFIG(WDTDIS & HS & UNPROTECT);
#define _XTAL_FREQ 8000000 // Cristal 8MHz
#define LcdControlPort PORTB // Uso el puerto A para los bits de control
#define LcdRWBit 1 // El bit 0 del puerto A para RW
#define LcdRSBit 0 // El bit 0 del puerto A para RS
#define LcdENBit 2 // El bit 0 del puerto A para EN
#define LcdDataPort PORTB // Uso el puerto B para los datos
#define LcdD4 4 // Solo utilizar para protocolo de 4 Bits
#include "SuperLcd.C" // Incluimos nuestra libreria
#define TRUE 1
#define FALSE 0
/**************************************************************************************/
/* VARIABLES */
unsigned char Tecla;
unsigned char PuertoB;
/**************************************************************************************/
char const CharactersCGRAM[64]={0,0,0,0,0,0,0,0x1F,
0,0,0,0,0,0,0x1F,0x1F,
0,0,0,0,0,0x1F,0x1F,0x1F,
0,0,0,0,0x1F,0x1F,0x1F,0x1F,
0,0,0,0x1F,0x1F,0x1F,0x1F,0x1F,
0,0,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
0,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F};
/**************************************************************************************/
// Guarda en la CGRAM el caracter en el banco seleccionado.-
// <Caracter> es la dirección de la primer fila del caracter a enviar.-
void vLcdWriteCgram(unsigned char Bank,char Character){
unsigned char AddressBank,i;
AddressBank=0x40 + 0x08*Bank;
WriteByteLcd(AddressBank,0);
// Cargamos los 8 registros.-
for(i=0;i<8;i++){
WriteByteLcd(CharactersCGRAM[Character + i],1);
}
WriteByteLcd(0x80,0); // Se da por terminada la escritura.-
}
/**************************************************************************************/
// Incializa Memoria CGRAM.-
void vLcdInitCgram(void){
unsigned char j;
for(j=0;j<8;j++){
vLcdWriteCgram(j,j*8);
}
}
/**************************************************************************************/
unsigned char LeerTeclado(void){
}
/**************************************************************************************/
void EnableInterrupcionesGlobal(unsigned char a){
//a = true-->habilitadas. a = false-->desabilitadas.
GIE = a;
}
/**************************************************************************************/
void interrupt intsrv(void){
if(RBIF && RBIE){
Tecla --;//LeerTeclado();
RBIF = 0;//Borramos el flag de interrupcion.
PuertoB = PORTB;
}
}
/**************************************************************************************/
void ConfiguracionINTCON(void){
GIE = 0;
PEIE = 0;
T0IE = 0;
INTE = 0;
RBIE = 1;
T0IF = 0;
INTF = 0;
RBIF = 0;
}
/**************************************************************************************/
void main(void)
{
const char * pantalla = "Mundo";
char texto[10];
ConfiguracionINTCON();
EnableInterrupcionesGlobal(FALSE);
InitLcd();
GotoxyLcd (1,1);
WriteStrLcd ("Hola"); // escribe en la primer linea la palabra Hola
GotoxyLcd (1,2);
WriteStrLcd (pantalla); // escribe en la segunda linea la palabra apuntada por la variable pantalla
vLcdInitCgram();
GotoxyLcd (1,4);
WriteCharLcd(0);
WriteCharLcd(1);
WriteCharLcd(2);
WriteCharLcd(3);
WriteCharLcd(4);
WriteCharLcd(5);
WriteCharLcd(6);
WriteCharLcd(7);
do{
EnableInterrupcionesGlobal(FALSE);
TRISB = 0;
GotoxyLcd (1,3);
itoa(texto,Tecla,10);
WriteStrLcd(texto);
TRISB = 0b11111000;
PORTB = 0b11111000;
PuertoB = PORTB;
EnableInterrupcionesGlobal(TRUE);
__delay_ms(333);
}while(TRUE);
}
Justamente yo no comparto dicho pin, para evitar que se habilite el display erróneamente.