#pragma bit RS @ PORTA.2//RS=0 entrada de instruccion---RS=1 entrada dato (caracter)
#pragma bit RW @ PORTA.1// RW=0 escribe en el lcd ---RW=1 lee del modulo
#pragma bit EN @ PORTA.0//habilitacion del modulo
//-------------controles LCD--------------
#define DISP_ON 0b00001100 //ENCIENDE display
#define DISP_OFF 0b00001000 //APAGA display
#define CLR_DISP 0b00000001 //BORRA display
#define CUR_HOME 0b00000010 //CURSOR a Pos CERO
#define INC_CUR 0b00000110 //INCREMENTA CURSOR
#define CUR_DER 0b00010100 //kursor a la derecha
#define DD_RAM_ADDR 0b10000000 //
#define DD_RAM_ADDR2 0b11000000 //
#define CG_RAM_ADDR 0b01000000 //
#define Blink 0b00001101 //PARAPADEO DE DISPLAY
uns8 data;
void delay_ms(long x) //este delay_ms(1)=20.4 useg
{
long i;
do {
i = 7;
do{
i = i - 1;
}
while (i > 0);
}while (--x > 0);
}
void busy()
{
TRISA=0x00;
RS=1;
RW=1;
TRISD=0xff;
EN=1;
delay_ms(10);
X:
if(PORTD.7==1)
{
delay_ms(10);
nop();
goto X;
}
if(PORTD.7==0)
{
TRISD=0x00;
RS=0;
RW=0;
}EN=0;
}
void enable()
{
TRISA=0x00;
EN=1;
// delay_ms(1);
EN=0;
}
void LCD_inst(char i)
{
busy();
EN=0;
TRISA=0x00;//PORTA salida
RS=0; RW=0;//programa RS=0, R/W=0 ---modo instruccion--
//delay_ms(100);
EN=1;
data=i&0b11111111;
PORTD=data;
EN=0;
//enable();
}
void LCD_dato(char d)
{
busy();
EN=0;
TRISA=0x00;//PORTA salida
RS=1; RW=0;//programa RS=0, R/W=0 ---modo instruccion--
// delay_ms(100);
EN=1;
data=d&0b11111111;
PORTD=data;
LCD_inst(CUR_DER);
EN=0;
// enable();
}
/*void pos(char p)
{
EN=0;
RS=0;
RW=0;
LCD_inst(p);
// enviarLCD(0b0010000);
}*/
void iniport()
{
ADCON1=0x07;
TRISA=0x00;
PORTA=0;
PORTD=0;
}
void display(char a)//a=0 no parpadea--a=1 si parpadea
{
RS=0; RW=0;
if(a==0)
{
LCD_inst(0b00001110);
}
if(a==1)
{
LCD_inst(0x0f);
}
}
void iniLCD()
{
RS=0; RW=0;
delay_ms(900);//delay>ke 15ms
TRISD=0x00;//salida
PORTD=0b00110000;//
enable();
delay_ms(400);//delay>4.5ms
PORTD=0b00110000;//
enable();
delay_ms(7);//delay>100us
PORTD=0b00111000;//function set
enable();
LCD_inst(DISP_OFF);// PORTD=0b00001000;//display off
LCD_inst(DISP_ON);// PORTD=0b00000001;//display on
//LCD_inst(CLR_DISP);// PORTD=0b00000001;//display clear
LCD_inst(INC_CUR);// PORTD=0b00000110;//entry mode set
}
void main()
{
iniport();
iniLCD();
//LCD_inst(DISP_ON);
char x;
x=0;
do{
LCD_inst(CLR_DISP);
LCD_inst(0x80);
LCD_dato('H');
//LCD_inst(INC_CUR);
LCD_dato('O');
//LCD_inst(INC_CUR);
// busy();
//LCD_dato('A');
LCD_inst(INC_CUR);
// busy();
LCD_dato(' ');
//LCD_inst(INC_CUR);
// busy();
LCD_dato(' ');
//LCD_inst(INC_CUR);
// busy();
LCD_dato(':');
//LCD_inst(INC_CUR);
// busy();
LCD_dato('-');
// LCD_inst(INC_CUR);
// busy();
// delay_ms(100);
display(1);
LCD_dato('D');
// enable();
}
while(++x<3);}
/*
void main()
{
delay_ms(7);
}*/