#include <p18f67j60.h>
#include <pconfig.h>
#include <delays.h>
#include <i2c.h>
#include <string.h>

#define contrast 0x3D          // for 3.3V
#define slave_address 0x7C         // I2C address
#define moji1 "Hellow World!!"

#pragma config XINST=OFF
#pragma config WDT=OFF, FOSC2=ON, FOSC=HSPLL, ETHLED=ON

unsigned char str1(void);//charを使うにはこいつがないとダメ！！

void I2C_data(char *data){
  WriteI2C(data);  
  IdleI2C();       
  Delay10TCYx(32);  // 50usec
}



//-------- 
void LCD_dat(unsigned char *data1){
	StartI2C();
	while(SSPCON2bits.SEN);
	I2C_data(slave_address);
	I2C_data(0b01000000);
	I2C_data(data1);
	StopI2C();
	while(SSPCON2bits.PEN);		
}

//----------
void LCD_puts(unsigned char *s)
{
	while(*s){
	LCD_dat(*s);
	*s++;
	}
}



//-------- 
void LCD_cmd(char cmd){
        EEByteWrite(0x7C, 0x00, cmd);
        if(cmd & 0xFC)   
                Delay10TCYx(32);  // 50usec
        else
                Delay1KTCYx(13);   // 2msec
}

//--------$B!)(B@$B!)!)!)!)!)!)(B
void LCD_init(void){
LCD_cmd(0x38);//0b00111000 Function set
LCD_cmd(0x39);//0b00111001 Function set
LCD_cmd(0x14);//0b00010100 Internal OSC frequency
LCD_cmd(0x70 + (contrast & 0x0F));//Contrast set
LCD_cmd(0x5C + (contrast >> 4));//contast High/icon/power
LCD_cmd(0x6B); // follower control
Delay10KTCYx(100);
Delay10KTCYx(100);
LCD_cmd(0x38); // function set
LCD_cmd(0x0C); // Display On
LCD_cmd(0x01); // Clear Display
Delay10KTCYx(1000);	 // Clear Display
}



void main(void)

{
	unsigned char str1[]=moji1";
    PORTA = 0x00;
	TRISA = 0x00; 

	TRISCbits.TRISC3 = 1; // input SDA line   
    TRISCbits.TRISC4 = 1; // input SCK line   
    
    OpenI2C(MASTER, SLEW_ON);       //
	SSPADD = 61.5; //100kHz Baud clock @25MHz

	Delay10KTCYx(1000);
	
    PORTA = 0x0f; 	
    SSPCON2 = 0b00000000;   
 	Delay10KTCYx(1000);       
	//LCD module 

	LCD_init();		//LCD初期化
	Delay10KTCYx(1000);
	LCD_puts(str1);


	Delay10KTCYx(1000);
	Delay10KTCYx(10000);
	LCD_cmd(0b11000000);//2行目
	LCD_puts(str1);
	Delay10KTCYx(10000);
	Delay10KTCYx(10000);

    while(1){
	Delay10KTCYx(1000);	 
	}

}


