******************************************** 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 500		    /* 500ミリ秒 */
#define PORT PORTC
#define ENABLE RA0
#define RS RA1
#define JIKAN1 1100
#define JIKAN2 500

lcd_position(unsigned char);
void putch(unsigned char moji);
lcd_init();
ioport();
int pos=0;

main()
{

//OSCCON=0x00;//INTCONにするときに必要で0は31Khz

ioport();
lcd_init();			/* LCDを初期化する */

	while(1){
			 
				//表示位置
				pos=0;
				lcd_position(pos);
				//通常表示
				printf("CQ CQ DE JA3RUA ");
				//表示位置
				pos=40;
				lcd_position(pos);
				printf("PSE K ");
				__delay_ms(JIKAN1);
				lcd_clear();
				__delay_ms(JIKAN1);

	}

}




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(80);
	PORT=nandemo;
	//0x30でENABLE=1,RS=1になる 書込みはEが1→0
	ENABLE=1;
	ENABLE=0;

}

//***************************************************************



******************************************** 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(30);//	__delay_ms(30)
	PORT=0x30;                /* 8bitモード */
	ENABLE=1;			/*(1)*/
	ENABLE=0;
	__delay_ms(10);//	__delay_ms(10)
	ENABLE=1;			/*(2)*/
	ENABLE=0;
	__delay_us(400);//	__delay_us(400)
	ENABLE=1;			/*(3)*/
	ENABLE=0;
				
/* function set */
	__delay_us(400);//	__delay_us(80)
	PORT=0x38;                
	ENABLE=1;			/*(4)*/
	ENABLE=0;

/* disp on/off control*/
	__delay_us(80);//	__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_us(80);//	__delay_us(80)
	PORT=0x01;
	ENABLE=1;			/*(6)*/
	ENABLE=0;

/*entry mode*/
	__delay_us(80);//	__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(80);
	PORT=(0x80+pos);

	ENABLE=1;
	ENABLE=0;

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

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



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