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



////////////////////////////////////////////////////////////////////
//PCからモールス符号をPIC16F689に書き込む40文字/1パターンで6パターンまで可能
//書き込んだ文字はPIC単体で読み出せる、モールス符号送出スピードが可変可能
//PICからPCに送出符号を送出できるのでPCで確認できる
//赤SW:モールス符号読出し
//緑SW:読出しアドレス設定、10回押すと6パターンの内容を表示する
//白SW:モールス符号送出スピードの可変
//黒SW:リセット
//トグルSW:左側でPIC単体操作、右側でPCからの操作
//LCD:SC1602 20文字/1行の2行表示
///////////////////////////////////////////////////////////////////

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

//発振をINTIOからHSに変更するにはこの689l4er_a.cソースの(1)__CONFIG、(2)#define _XTAL_FREQ
//(3)OSCCON=0x60;をコメント、(4)のBRGH、SPBRGを変更
//(5)mojisend_a.cと(6)689int_a.cの#define _XTAL_FREQも変更


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


//WRITE No.1(0-39)
__EEPROM_DATA('C','Q',' ','C','Q',' ','D','E'); /* 0-7      00-07 */
__EEPROM_DATA(' ','J','A','3','R','U','A',' ');	/* 8-15     08-0F */
__EEPROM_DATA('P','S','E',' ','K','%',0xFF,0xFF);	/* 16-23    10-17 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 24-31    18-1F */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 32-39    20-27 */
//WRITE No.2(40-79)
__EEPROM_DATA('b','K',' ','G','M',' ','U','R');	/* 40-47    28-2F */
__EEPROM_DATA(' ','5','9','9',' ','b','K','%');	/* 48-55    30-37 */
__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 */
//WRITE No.3(80-119)
__EEPROM_DATA('b','K',' ','T','N','X',' ','F');	/* 80-87    50-57 */
__EEPROM_DATA('B',' ','R','P','T',' ','F','M');	/* 88-95    58-5F */
__EEPROM_DATA(' ','O','S','A','K','A',' ','b');	/* 96-103    60-67*/
__EEPROM_DATA('K','%',0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 104-111  68-6F */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 112-119  70-77 */
//WRITE No.4(120-159)
__EEPROM_DATA('b','K',' ','H','R',' ','Q','T');	/* 120-127  78-7F */
__EEPROM_DATA('H',' ','I','S',' ','M','O','R');	/* 128-135  80-87 */
__EEPROM_DATA('I','G','U','C','H','I',' ','C');	/* 136-143  88-8F */
__EEPROM_DATA('I','T','Y',' ','b','K','%',0xFF);	/* 144-151  90-97 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 152-159  98-9F */
//WRITE No.5(160-199)
__EEPROM_DATA('b','K',' ','H','R',' ','W','X');	/* 160-167  A0-A7 */
__EEPROM_DATA(' ','I','S',' ','V','Y',' ','F');	/* 168-175  A8-AF */
__EEPROM_DATA('I','N','E',' ','E','S',' ','T');	/* 176-183  B0-B7 */
__EEPROM_DATA('E','P',' ','I','S',' ','2','5');	/* 184-191  B8-BF */
__EEPROM_DATA('C',' ','b','K','%',0xFF,0xFF,0xFF);	/* 192-199  C0-C7 */
//WRITE No.6(200-239)
__EEPROM_DATA('b','K',' ','T','N','X',' ','F');	/* 200-207  C8-CF */
__EEPROM_DATA('B',' ','Q','S','O',' ','E','S');	/* 208-119  D0-D7 */
__EEPROM_DATA(' ','H','P','E',' ','C','U',' ');	/* 216-223  D8-DF */
__EEPROM_DATA('A','G','N',' ','7','3',' ','s');	/* 224-231  E0-E7 */
__EEPROM_DATA('K',' ','E',' ','E','#',0xFF,0xFF);	/* 232-239  E8-EF */

__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 240-247  F0-F7 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,'#');	/* 248-255  F8-FF */



//(2)
//#define _XTAL_FREQ 4000000	/* 4MHz */
#define _XTAL_FREQ 8000000	/* 8MHz */
//#define _XTAL_FREQ 10000000   /* 10MHz */
//#define _XTAL_FREQ 20000000	/* 20MHz */
#define JIKAN 500		    /* 500ミリ秒 */
#define PORT PORTC
#define ENABLE RA0
#define RS RA1
#define JIKAN1 1100
#define JIKAN2 500

char getch();
lcd_position(unsigned char);
void putch(unsigned char rxdata);
lcd_init();
ioport();
romread();
romread2();
flug1();
flug2();
flug3();
flug4();
rs232();
char rxdata;
char txdata;
int pos=0;
int sadd=0;
int cntmoji=0;
int flug_1=0;
int flug_2=0;
char rommoji;
int	cnt=0;
int romcnt=0;
int cnt_speed;
int speed=5;
int dcnt=0; ///////////////////////////////
main()
{

//(3)
//OSCCON=0x60;	/* 4000kHz */
OSCCON=0x70;	/* 8000kHz */
/*RCSTA,TXSTAの設定位置は	BRGH,SPBRGの前に書く、後に書いてもビルドもプログラムもエラーは出ないが、実動作しない*/
RCSTA=0x90;		/* USART非同期モード */
TXSTA=0x20;

//(4)
BRG16=0;
//4Mhz:1 8Mhz,10Mhz,20Mhz:0
BRGH=0;
//BRGH=1;
			
//SPBRG=103;	    /* 4Mhz  2400bps */
SPBRG=51;	    /* 8Mhz  2400bps */
//SPBRG=64;	    /* 10Mhz 2400bps */
//SPBRG=129;    /* 20Mhz 2400bps */

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

lcd_position(0x00);
printf("YYCW モールス ソウシュツ");
lcd_position(0x40);
printf("PIC16F689 Ver1.4");

	while(1){
//RC4→RB5 RA5→RC5
//読み出しスタート
			if(RB6==1 && RC4==0 && flug_1==0)flug1();
			if(RB6==1 && RC4==1 && flug_1==1)flug2();

//読み出しアドレス
			if(RB6==1 && RC5==0 && flug_2==0)flug3();
			if(RB6==1 && RC5==1 && flug_2==1)flug4();

//rs232通信での書き込み、読み出し
			if(RB6==0) rs232();
		
	
	}

}

flug1()
{
flug_1=1;
}

flug2()
{
flug_1=0;
romread();
}

flug3()
{
flug_2=1;
}

flug4()
{
flug_2=0;
++romcnt;
if(romcnt>=10){
	romcnt=0;
	romread2();
}	
if(romcnt==0)sadd=0;
if(romcnt==1)sadd=40;
if(romcnt==2)sadd=80;
if(romcnt==3)sadd=120;
if(romcnt==4)sadd=160;
if(romcnt==5)sadd=200;
}

rs232()
{
//YYRS232V2e(VB6で作成RS232C通信アプリ)から送られたrxdataの文字を調べる
//下の?からCに対応する処理がrxdata=getch();の下にある記述
//@6つのアドレスボタンにu,v,w,x,y,zが夫々設定してあり、押すと送出する
//A4つのモールススピードボタンに0x21,0x22,0x23,0x24が夫々設定してあり、押すと送出する
//Bメモリ読出しボタンを押すと ~(0x7E) が送出する
//C書込みボタンを押すと入力文字の末尾に%が追加されて送出する
//PCからの文字をゲットする

rxdata=getch();

//PCからの読出し開始メモリアドレスとモールススピードの設定
		switch(rxdata){
//@ 
				case 'u':
							cnt=0;
							sadd=0;		/*読出し開始メモリアドレス*/
							break;
				case 'v':
							cnt=0;
							sadd=40;	/*読出し開始メモリアドレス*/
							break;
				case 'w':
							cnt=0;
							sadd=80;	/*読出し開始メモリアドレス*/
							break;
				case 'x':
							cnt=0;
							sadd=120;		/*読出し開始メモリアドレス*/
							break;
				case 'y':
							cnt=0;
							sadd=160;	/*読出し開始メモリアドレス*/
							break;
				case 'z':
							cnt=0;
							sadd=200;	/*読出し開始メモリアドレス*/
							break;
//A 
				case 0x21:
							cnt_speed=5;/*モールススピード*/
							break;
				case 0x22:
							cnt_speed=7;/*モールススピード*/
							break;
				case 0x23:
							cnt_speed=10;/*モールススピード*/
							break;
				case 0x24:
							cnt_speed=15;/*モールススピード*/
							break;
		}

//ゲット文字が'~'ならromread()関数で、PIC EEPROM内容を、'%'が書き込まれている所まで読み出す。
//B 
		if(rxdata == 0x7E){   
			romread();
		}

		//ゲット文字が >= 0x30 && <= 0x5Aなら、'%'が送られるまでEEPROMに書き込む
//C 
		if(rxdata >= 0x30 && rxdata <= 0x5A || rxdata == '%' || rxdata == '/' || rxdata == ' ' || rxdata == 'a' || rxdata == 'b' || rxdata == 'h' || rxdata == 's' ){

			  eeprom_write(cnt+sadd,rxdata);
				++cnt;

		//cntが>=40もしくは、ゲット文字が'%'なら、cntを0にして書き込みから抜ける。
					if (cnt>=40 || rxdata == 0x25){
						cnt=0;
					}
					
		}
}

romread()
{
//do while の記述方法 whileの所の(rommoji != '%')が成立中(%以外)は繰り返す。'%'なら抜ける
//処理1は、EEPROMに書かれている%文字が見つかるまで表示、16文字表示毎にLCD表示位置アドレスを変えて1行目から2行目に
//表示するようにしている。
//1行目lcd_position(0x00)2行目lcd_position(0x40)

//処理1
			lcd_clear();			           /* 画面をクリア */
			
			do{	
				if(cntmoji==16)lcd_position(0x40);
				if(cntmoji==32){
					lcd_position(0x00);
					lcd_clear();
				}
				rommoji=eeprom_read(cntmoji+sadd);
				if(rommoji=='%')break;
				
				if(RB6==1)printf("%c",rommoji);
				if(RB6==0)printf("%c\n",rommoji);
				mojisend();

				++cntmoji;
			}while(rommoji != '%'); 

				cntmoji=0; /* 抜けたらcntmoji=0にする*/

}

romread2()
{

//6パターン全ての表示を行う、パターン毎の先頭に1.文字、2.文字のようにパターン番号を
//表示してから文字を表示
			lcd_clear();
			sadd=0;
			if(sadd==0) printf("1.");
			do{	
				if(dcnt==14){lcd_position(0x40);		//dcnt 16→14

				}//if(dcnt==14)
				if(dcnt==30){		 		//dcnt 32→30
				__delay_ms(2000);
					dcnt=0;
					lcd_position(0x02);
				lcd_clear();
				}

				if(rommoji=='%'){
				__delay_ms(2000);
					lcd_clear();
					cntmoji=0;
					dcnt=0;
					sadd=sadd+40;
					if(sadd==40) printf("2.");
					if(sadd==80) printf("3.");
					if(sadd==120) printf("4.");
					if(sadd==160) printf("5.");
					if(sadd==200) printf("6.");

				}
				rommoji=eeprom_read(cntmoji+sadd);

				__delay_ms(10);
				if(RB6==1)printf("%c",rommoji);
				if(RB6==0)printf("%c\n",rommoji);
				++dcnt;
				++cntmoji;
				
				//eepromの最大記憶255文字になったら抜ける
				if(cntmoji>=255) break;
				//eepromの中で%文字を見つけたら抜ける
				}while(rommoji != '#'); 
				
				cntmoji=0; /* 抜けたらcntmoji=0にする*/
}//romread2()


ioport()
{
ANSEL=0; 
ANSELH=0;
TRISA=0xFC;	/*RA0,1ピンを出力に、RA2,3,4,5ピンを入力設定*/
TRISB=0xE0;	/*PB4ピンを出力にRB5,6,7を入力に設定*/
TRISC=0xF0;	/*PORTCのRC0-3ピンを出力に、RC4-7を入力ピンに設定*/
PORTA=0x00;	/*PORTA全ピンをLに設定 16進*/
PORTB=0x00; /*PORTB全ピンをLに設定 16進*/
PORTC=0x00; /*PORTC全ピンをLに設定 16進*/
//PORTA=0b01010101; /*PORTAピンをLHLHLHLHに設定 2進*/
//PORTB=0b10101010; /*PORTBピンをHLHLHLHLに設定 2進*/
//PORTC=0b01010101; /*PORTCピンをLHLHLHLHに設定 2進*/

//RA2の割込み設定
	INTEDG=0;		/*立上りの設定(0で立下り)*/	
	INTE=1;			/*INTエッジ割り込みを使う  */
	GIE=1;			/*割り込みを使う	   */
	INTF=0;			/*INTEDG発生の前に0にする */
}

//RA2が割込み端子でRA2SWを押すことによりモールススピードを可変する
interrupt warikomi()
{
	INTF=0;	
	++speed;
	if(speed>=20)speed=5;
}

/*************************************************/
//rs232処理のなかのrxdata=getch();で文字受信
char getch()			/*rxdata PCからの文字受信*/
{
	while(!RCIF);		/* 受信したら */
	return(RCREG);		/* データを読む */
}
/*************************************************/

//printf()で文字をLCD表示とPCに送信する
//pcに送信の場合は、下のwhile(!TXIF);TXREG=txdata;の記述がいる
void putch(unsigned char txdata) 	/* PUTCH */
{
	if(RB6==1){
		RS=1;
		ENABLE=0;
		__delay_us(80);
		PORT=(txdata>>4)&0x0F;
		// 書込みはEが1→0
		ENABLE=1;	
		ENABLE=0;
		PORT=txdata&0x0F;
		// 書込みはEが1→0
		ENABLE=1;
		ENABLE=0;
	}
	if(RB6==0){
		while(!TXIF);		/* 送信バッファが空いたら */
		TXREG=txdata;		/* 1バイトだけ書く */
	}
}

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

*********************** mojisend.c ここから***********************/

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//																									//
// 1つのメインプログラムで構成していたが、mojisendを別のmijisend.cとした。から文字が入ったrommoji変数をmojisend()で渡せばいい //
// 従って、rom_cw3a.cとmijisend.cの2つで構成している、 mojisend.cを別のプログラムから利用させたいため分離した。           //
// ポイントは、メインプログラムから文字が入ったrommoji変数をmojisend()に渡せばいい					    //
//														 JA3RUA     //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//発振周波数変更の場合は#define _XTAL_FREQも変更

#include <htc.h>

//(5)
//#define _XTAL_FREQ 4000000	/*4Mhz */ 
#define _XTAL_FREQ 8000000	/*8Mhz */ 
//#define _XTAL_FREQ 10000000 	/*10Mhz */ 
//#define _XTAL_FREQ 20000000	/*20Mhz */ 

#define JIKAN 500			/* 500ミリ秒 */
#define tan 5
#define tyo 15
#define cwport RB4			/*ioポートをここで設定する*/

							
//モールスの短点・長点関数
ra2_1tyo();
ra2_0tyo();
ra2_1tan();
ra2_0tan();

char rommoji;					/*メインプログラムからのモールス符号変数をもらう*/
int scnt;						/*短点・長点スピード用変数1*/
int speed=5;					/*短点・長点スピード用変数2*/
int cnt_speed=1;				/*短点・長点スピード用変数3  メインプログラムでスピードを設定、あるポートのoff/on回数*/

mojisend()
{

		switch(rommoji){

				case 'A':
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;
				case 'a':
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
						break;
				case 'B':
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case 'b':
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
						break;
				case 'C':
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case 'D':
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case 'E': 
				ra2_1tan();
				ra2_0tyo();
						break;
				case 'F': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case 'G': 
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case 'H': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case 'h': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
						break;
				case 'I': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case 'J': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;
				case 'K': 
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;
				case 'L': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case 'M': 
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;
				case 'N': 
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case 'O': 
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;
				case 'P': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case 'Q': 
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;
				case 'R': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case 'S': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case 's': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
						break;
				case 'T': 
				ra2_1tyo();
				ra2_0tyo();
						break;
				case 'U': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;
				case 'V': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;
				case 'W': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;
				case 'X': 
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;

				case 'Y': 
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;
				case 'Z': 
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case '1': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;
				case '2': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;
				case '3': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;
				case '4': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;
				case '5': 
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case '6': 
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case '7': 
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case '8': 
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case '9': 
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;
				case '0': 
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tyo();
						break;
				case ' ': 
				ra2_0tyo();
				ra2_0tyo();
						break;
				case '/': 
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tan();
				ra2_0tan();
				ra2_1tyo();
				ra2_0tan();
				ra2_1tan();
				ra2_0tyo();
						break;

		}

}

ra2_1tyo()
{
		cwport=1;
		for(scnt=0;scnt<speed+cnt_speed;scnt++) __delay_ms(tyo);
		cwport=0;
}
ra2_0tyo()
{
		for(scnt=0;scnt<speed+cnt_speed;scnt++) __delay_ms(tyo);
}
ra2_1tan()
{
		cwport=1;
			for(scnt=0;scnt<speed+cnt_speed;scnt++) __delay_ms(tan);
		cwport=0;
}
ra2_0tan()
{
		    for(scnt=0;scnt<speed+cnt_speed;scnt++) __delay_ms(tan);
}

***********************  mojisend.c ここまで ***********************


***********************  689init_a.c ここから ***********************

/////////////////////////////////////////////////////////////////////////////////////////////////////////
//     イニシャライズ手順 インターフェースデータ長4bit(データシートから)
//
//		電源ONして15ms以上待つ 
//		RS R/W DB7 DB6 DB5 DB4
//(1)	0  0   0   0   1   1 
//			4.1ms以上待つ
//(2)	0  0   0   0   1   1 
//			100μs以上待つ
//(3)	0  0   0   0   1   1 
//(4)	0  0   0   0   1   0
//(5)	0  0   0   0   1   0 ファンクションセット		0 0 1 DL	DL=0で4bit
//(6)	0  0   1   0   0   0					N F * *     N=1で2行    F=0で5×8dot
//(7)	0  0   0   0   0   0 表示オン/オフ
//(8)   0  0   1   1   0   0					1 D C B     D=1で表示オン C=0でカーソル表示しない B=0でブリンクしない
//(9)   0  0   0   0   0   0 表示クリア
//(10)  0  0   0   0   0   1		
//(11)  0  0   0   0   0   0 エントリーモード 
//(12)  0  0   0   1   1   0					0 1 I/D S	I/D=1でアドレスを+1カーソルが右に動く 
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////

#include<htc.h>
//(6)
//#define _XTAL_FREQ 4000000	/*4Mhz */ 
#define _XTAL_FREQ 8000000	/*8Mhz */ 
//#define _XTAL_FREQ 10000000 	/*10Mhz */ 
//#define _XTAL_FREQ 20000000	/*20Mhz */ 

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:PIC16F688 確認LCD:SD1602 HUOB-XA */
{                       /* RC5:RS RC4:ENABLE*/

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

	__delay_ms(5);
	PORT=0x02;                
	ENABLE=1;			/*(4)__delay_us(400)*/
	ENABLE=0;

    /* function set */
	__delay_ms(5);
	PORT=0x02;
	ENABLE=1;			/*(5)__delay_us(80);*/
	ENABLE=0;
	PORT=0x08;				  /* 0x08:2行 0x00:1行 */
	ENABLE=1;			/*(6)*/
	ENABLE=0;

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


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

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

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

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


	__delay_us(80);
	PORT=(((0x80+pos)>>4)&0x0F);

	ENABLE=1;
	ENABLE=0;
	PORT=((0x80+pos)&0x0F);

	ENABLE=1;
	ENABLE=0;
}
//***************************************************************

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


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