#include <pic18.h>
#include <delay.c>

__CONFIG(1,XINSTDIS & WDTDIS & DEBUGDIS & UNPROTECT);
__CONFIG(2,HSPLL & IESODIS );

#define RS	RD1			// LCD Control       
#define	EN	RD0			// LCD Enable 

void kurulum();	
void lcd_kurulum(unsigned char);
void lcd_reset(void);
void lcd_komut(void);
void lcd_data(unsigned char);
void lcd_mesaj(unsigned char,const char *); // Adres,"Bilgi"
void gotoxy(unsigned char);
void lcd_clear(void);
void main(void)           
{
	kurulum();
	lcd_kurulum(4);
	lcd_mesaj(0x40,"PIC18F67J60");
tekrar:		
	goto tekrar;
}

void kurulum()
{

	TRISE=0;
	TRISD=0;
	

}
void lcd_kurulum(unsigned char bn)
{

	if (bn==4)
	{
	lcd_reset();	
	
	lcd_data(0x02);			// Function Set
	lcd_komut();
	lcd_data(0x02);
	lcd_komut();
	lcd_data(0x08);			// 2 satýr 5x8 font
	lcd_komut();
	lcd_data(0);			// Display On
	lcd_komut();
	lcd_data(0x0E);			// Entry Mode
	lcd_komut();	
	lcd_data(0);
	lcd_komut();
	lcd_data(0x06);
	lcd_komut();
	lcd_clear();
	}
}

void lcd_reset(void)
{
	unsigned char i=3;
	while(i)
	{
	PORTE=0;
	lcd_komut();
	i--;
	}
	
}
void lcd_komut(void)
{
	DelayMs(2);
	RS=0;
	EN=1;				//
		DelayUs(100);	//		
	EN=0;				//

}
void lcd_data(unsigned char data)
{
		PORTE=data<<2;
		DelayUs(100);
}
void gotoxy(unsigned char add)
{

	add=0x80|add;
	lcd_data(add>>4);
	lcd_komut();
	lcd_data(add);
	lcd_komut();	
}
void lcd_clear(void)
{
	lcd_data(0x01);
	lcd_komut();
	lcd_data(0);
	lcd_komut();
}

void lcd_mesaj(unsigned char adres,const char *m)
{	
	gotoxy(adres);
	DelayUs(100);	
	RS=1;
	
	while (*m)
	{ 	
		lcd_data(*m>>4);	
		EN=1;				// --
		 DelayUs(20);		//	 \
		EN=0;				//    --
		lcd_data(*m);
		EN=1;				// --
		 DelayUs(20);		//	 \
		EN=0;				//	  --
	
	    *m++;
	}
}		





