******************************************** main ここから*********************************************



#include <pic.h>
#include <htc.h>
#include <stdio.h>
#include <string.h>

//__CONFIG(PWRTEN & WDTDIS  & MCLREN & INTIO);/*内部発振*/
__CONFIG(PWRTEN & WDTDIS  & MCLREN & HS);/*水晶発振*/

#define _XTAL_FREQ 20000000
//#define _XTAL_FREQ 4000000 /* 4MkHz */
//#define _XTAL_FREQ 31000	/* 31kHz */
#define JIKAN 100		    /* 500ミリ秒 */
#define PORT PORTC
#define ENABLE RA0
#define RS RA1
#define JIKAN1 1000
#define JIKAN2 500
lcd_position(unsigned char);
void putch(unsigned char moji);

//WRITE No.1(0-143)
__EEPROM_DATA('C','Q',' ','C','Q',' ','D','E'); /* 0-7    00-07 CQ CQ*/
__EEPROM_DATA(' ','J','A','3','R','U','A',' ');	/* 8-15   08-0F */
__EEPROM_DATA('Q','T','H',' ','M','O','R','I');	/* 16-23  10-17 */
__EEPROM_DATA('G','U','C','H','I',' ','K','.');	/* 24-31  18-1F */

__EEPROM_DATA('W','X','Y','Z','0','1','2','3');	/* 32-39  20-27 */
__EEPROM_DATA('4','5','6','7','8','9','A','/');	/* 40-47  28-2F */
__EEPROM_DATA(0x55,0x52,0x20,0x35,0x39,0x39,0x25,0xFF);	/* 48-55  30-37 UR 599*/
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 56-63  38-3F */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 64-71  40-47 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 72-79  48-4F */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 80-87  50-57 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 88-95  58-5F */
__EEPROM_DATA(0x54,0x4E,0x58,0x20,0x51,0x53,0x4F,0x25);	/* 96-103   60-67 TNX QSO*/
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 104-111  68-6F */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 112-119  70-77 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 120-127  78-7F */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 128-135  80-8F */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 136-143  90-97 */


lcd_init();
lcd_cgram();
ioport();
cgdisp();


int pos=0;
int cgdata;
int rommoji;
int romcnt=0;
int rom_sadd=0;
main()
{

//OSCCON=0x00;//INTCONにするときに必要で0x00は31Khz
ioport();
lcd_init();			/* LCDを初期化する */


	while(1){

//// キャラクタパターン表示
//		cgdisp();
//		++romcnt;
//		if(romcnt==27){
//				romcnt=0;
//			__delay_ms(JIKAN2);
//				lcd_clear();
//			__delay_ms(JIKAN2);
//		}

// EEPROM内容の表示
		rommoji=eeprom_read(romcnt);
		lcd_position(pos+rom_sadd);
		printf("%c",rommoji);//文字列ではないのでprintf(rommoji);では表示しない。左のように、1文字表示の記述をすること
		++pos;
		++romcnt;
		
		__delay_ms(JIKAN);
		if(romcnt==16){
			rom_sadd=64;
			pos=0;
		}
		if(romcnt==32){
			pos=0;
			romcnt=0;
			rom_sadd=0;
			__delay_ms(JIKAN1);
			lcd_clear();	
			__delay_ms(JIKAN2);
		}

	}//while end

}//main end




ioport()
{

ANSEL=0; 
ANSELH=0;
TRISA=0x38;	/*RA0-2ピンを出力に、RA3,4,5ピンを入力設定*/
TRISB=0;	/*PORTB全ピンを出力に設定*/
TRISC=0;	/*PORTC全ピンを出力に設定*/
//PORTA=0xFF;	/*PORTA全ピンをHに設定 16進*/
//PORTB=0xFF; /*PORTB全ピンをHに設定 16進*/
PORTC=0x00; /*PORTC全ピンをLに設定 16進*/
PORTA=0x00; /*PORTA全ピンをLに設定 16進*/
//PORTA=0b01010101; /*PORTAピンをLHLHLHLHに設定 2進*/
//PORTB=0b10101010; /*PORTBピンをHLHLHLHLに設定 2進*/
//PORTC=0b01010101; /*PORTCピンをLHLHLHLHに設定 2進*/

}

//***************************************************************
void putch(unsigned char nandemo) 	/* PUTCH */
{
	/* RS=1 data input */
	RS=1;
	__delay_us(500);//80
	PORT=nandemo;
	//0x30でENABLE=1,RS=1になる 書込みはEが1→0
	ENABLE=1;
	ENABLE=0;

}

//***************************************************************
lcd_cgram()			           /* lcd_cgram キャラクタ表示*/
{							   /* cgram/ddram data write */
	RS=1;
	__delay_us(500);//80
	PORT=cgdata;
	ENABLE=1;
	ENABLE=0;
	__delay_ms(4);
}

//***************************************************************
cgdisp()
{
	pos=0x00;
	lcd_position(pos);
	cgdata=0xC0;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xC0;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xDE;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xB2;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xCF;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0x43;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0x47;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xB0;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0x52;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0x41;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0x4D;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xC3;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xDE;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xB0;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xC0;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xA6;
	lcd_cgram();			/* cgdata表示 */
	pos=0x40;
	lcd_position(pos);
	cgdata=0xCB;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xAE;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xB3;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xBC;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xDE;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xBC;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xC3;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xB2;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xCF;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xBD;
	lcd_cgram();			/* cgdata表示 */
	cgdata=0xA1;
	lcd_cgram();			/* cgdata表示 */
}


******************************************** main ここまで*********************************************

******************************************** init ここから*********************************************

/////////////////////////////////////////////////////////////////////////////////////////////////////////
//     イニシャライズ手順 インターフェースデータ長8bit(データシートから)
//
//		電源ONして15ms以上待つ 
//	  RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
//(1) 0  0   0   0   1   1   0   0   0   0
//			4.1ms以上待つ
//(2) 0  0   0   0   1   1   0   0   0   0
//			100μs以上待つ
//(3) 0  0   0   0   1   1   0   0   0   0 

//(4) 0  0   0   0   1   1   1   0   0   0 function set	(DB4)DL=1で8bit (DB3)N=1で2行 (DB2)F=0で5×8dot
				                                     
//(5) 0  0   0   0   0   0   1   1   0   0 disp on/off control (DB2)D=1で表示オン (DB1)C=0でカーソル表示しない (DB0)B=0でブリンクしない

//(6) 0  0   0   0   0   0   0   0   0   1 clear disp		

//(7) 0  0   0   0   0   0   0   1   1   0 entry mode (DB1)I/D=1でアドレスを+1カーソルが右に動く(DB0)S=0表示シフトさせない 
//
// lcd_init()での__delay_msは、色々値を変化させて見た結果現在の値がベストである。
// 初期の値(各値横のコメントの数字)では発振数を上げたりすると電源オン時の表示が不安定なった(オン後は安定)
// INTIO、水晶(4MHz,20MHz)でも電源オン後から表示は安定している。
/////////////////////////////////////////////////////////////////////////////////////////////////////////



#include <htc.h>

#define _XTAL_FREQ 20000000
//#define _XTAL_FREQ 4000000
//#define _XTAL_FREQ 31000	/* 31kHz */
lcd_init();
lcd_position(unsigned char);
lcd_clear();
void putch(unsigned char);
//lcd_cgram();

//他のI/Oピン使用する時に変更
#define PORT PORTC
#define ENABLE RA0
#define RS RA1

//int cgdata=0x04;

lcd_init()		/* LCDモジュール初期化  PIC:PIC16F689 確認LCD:SD1602 HUOB-XA */
{                       /* RA1:RS RA0:ENABLE */

	RS=0;				/*RS=0 instruction input RS=1 data input */
	ENABLE=0;
	__delay_ms(15);//	__delay_ms(30)
	PORT=0x30;                /* 8bitモード */
	ENABLE=1;			/*(1)*/
	ENABLE=0;
	__delay_ms(5);//	__delay_ms(10)
	ENABLE=1;			/*(2)*/
	ENABLE=0;
	__delay_ms(5);//	__delay_us(400)
	ENABLE=1;			/*(3)*/
	ENABLE=0;
				
/* function set */
	__delay_ms(5);//	__delay_us(80)
	PORT=0x38;                
	ENABLE=1;			/*(4)*/
	ENABLE=0;

/* disp on/off control*/
	__delay_ms(5);//	__delay_us(80)
	PORT=0x0C; 			/* 1,D:1,C:0,B:0 D(disp:on) C(cursor:off) B(blink:off)*/
	ENABLE=1;			/*(5)*/
	ENABLE=0;

/*clear disp*/
	__delay_ms(5);//	__delay_us(80)
	PORT=0x01;
	ENABLE=1;			/*(6)*/
	ENABLE=0;

/*entry mode*/
	__delay_ms(5);//	__delay_us(80)
	PORT=0x06;          /* 0,1,I/D:1,S:0 I/D(increment:+1) S(shift:NO increment*/
	ENABLE=1;			/*(7)*/
	ENABLE=0;

}
//***************************************************************

//***************************************************************
lcd_position(unsigned char pos)		/* 文字の位置を指定 */
{									/* dd ram address set */
	RS=0;
//	lcd_write_RS0(0x80+pos);


	__delay_us(500);//80
	PORT=(0x80+pos);

	ENABLE=1;
	ENABLE=0;

}
//***************************************************************

//***************************************************************
lcd_clear()			           /* 画面をクリア */
{							   /* clear display */
	RS=0;
	__delay_us(500);//80
	PORT=0x01;
	ENABLE=1;
	ENABLE=0;
	__delay_ms(4);
}
//***************************************************************



******************************************** init ここまで*********************************************