#include <16F877.h>
#use delay(clock=20000000)
#fuses XT,NOWDT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#define sclk_lcd pin_d3
#define rclk_lcd pin_d5
#define ser_lcd  pin_d4

void lcd_init();
void out_lcd(int8 d_lcd);
void lcd_command(int8 com);
void lcd_text(int8 text);
int8 temp,i;
char const s[10]={'0','1','2','3','4','5','6','7','8','9'};
BYTE CONST T[5]={0X41,0X51,0X61,0X71};
struct lcd_map{
                boolean enable;
                boolean rs;
                boolean rw;
                boolean unused;
                int     data : 4;
              } lcd;
void main() {

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(FALSE);
   setup_psp(PSP_DISABLED);
   setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
   setup_ccp1(CCP_OFF);
   setup_ccp2(CCP_OFF);
   lcd_init();
   lcd_command(0x80);
   delay_ms(2);
   lcd_text('w');
   lcd_text('w');
   lcd_text('w');
   lcd_text('.');
   lcd_text('b');
   lcd_text('p');
    lcd_text('c'); lcd_text('d'); lcd_text('.'); lcd_text('n');
     lcd_text('e'); lcd_text('t');
    
      lcd_command(0xc0);
   delay_ms(2);
      lcd_text('/');
   lcd_text('t');
   lcd_text('e');
   lcd_text('a');
   lcd_text('c');
   lcd_text('h');
    lcd_text('e'); lcd_text('r'); lcd_text('/'); lcd_text('e');
     lcd_text('l'); lcd_text('e');
   while(1)
   {

   }

}
void out_lcd(int8 d_lcd)
{int8 i;
 temp=d_lcd;

     for(i=0;i<8;++i)
     {
	  output_bit(ser_lcd,shift_left(&temp,1,0));
     output_high(sclk_lcd);
     delay_us(20);
     output_low(sclk_lcd);
     delay_us(20);
     }
     output_high(rclk_lcd);
     delay_us(50);
     output_low(rclk_lcd);
     //while(1);
}
void lcd_command(int8 com)
{
   int8 buff;
   buff = com & 0xf0;
   lcd.data=buff>>4;
   lcd.rs = 0;
   lcd.enable = 0;
   lcd.rw=0;
   i=lcd;
   out_lcd(i);
   delay_ms(10);
   //=================enable clock==========
   lcd.enable=1;
   i=lcd;
   out_lcd(i);
   delay_ms(10);
   lcd.enable=0;
   i=lcd;
   out_lcd(i);
   //==================sent 4bit lsb==========


   buff=com & 0x0f;
   lcd.data=buff;
   i=lcd;
   out_lcd(i);

   //=================enable clock==========
   lcd.enable=1;
   i=lcd;
   out_lcd(i);
   delay_ms(10);
   lcd.enable=0;
   i=lcd;
   out_lcd(i);


}
void lcd_text(int8 text)
{
   int8 buff;
   buff = text & 0xf0;
   lcd.data=buff>>4;
   lcd.rs = 1;
   lcd.enable = 0;
   lcd.rw=0;
   i=lcd;
   out_lcd(i);
   delay_ms(10);
   //=================enable clock==========
   lcd.enable=1;
   i=lcd;
   out_lcd(i);
   delay_ms(10);
   lcd.enable=0;
   i=lcd;
   out_lcd(i);
   //==================sent 4bit lsb==========


   buff=text & 0x0f;
   lcd.data=buff;
   i=lcd;
   out_lcd(i);

   //=================enable clock==========
   lcd.enable=1;
   i=lcd;
   out_lcd(i);
   delay_ms(10);
   lcd.enable=0;
   i=lcd;
   out_lcd(i);
}
void lcd_init()
{
  delay_ms(50);
  lcd_command(0x33);
 delay_ms(50);

 lcd_command(0x32);
 delay_ms(50);
 //===================function set==========
  lcd_command(0x28);
 delay_ms(50);
 //===================set display on/off=========
  lcd_command(0x0f);
}
