-----------------------------プログラムソース 本体---------------------------------

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

__CONFIG(FCMDIS & IESODIS & BORDIS & UNPROTECT & MCLRDIS & PWRTEN & WDTDIS & INTIO);
__IDLOC(1207);

//WRITE No.1(0-63)
__EEPROM_DATA(0xC3,0xDE,0xB0,0xC0,0xB6,0xB7,0xBA,0xCF);	/* 0-7 */
__EEPROM_DATA(0xDA,0xC3,0xB2,0xC5,0xB2,0x21,0x21,0xFF);	/* 8-15 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 16-23 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 24-31 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 32-39 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 40-47 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 48-55 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F);	/* 56-63 */

//WRITE No.2(64-127)
__EEPROM_DATA(0xC3,0xDE,0xB0,0xC0,0xB6,0xB7,0xBA,0xCF);	/* 64-71 */
__EEPROM_DATA(0xDA,0xC3,0xB2,0xC5,0xB2,0x21,0x21,0xFF);	/* 72-79 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 80-87 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 88-95 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 96-103 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 104-111 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 112-119 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F);	/* 120-127 */

//WRITE No.3(128-191)
__EEPROM_DATA(0xC3,0xDE,0xB0,0xC0,0xB6,0xB7,0xBA,0xCF);	/* 128-135 */
__EEPROM_DATA(0xDA,0xC3,0xB2,0xC5,0xB2,0x21,0x21,0xFF);	/* 136-143 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 144-151 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 152-159 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 160-167 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 168-175 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 176-183 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F);	/* 184-191 */

//*************デモ用(192-255)
__EEPROM_DATA(0x48,0x52,0x20,0x48,0x52,0x20,0x62,0x54);	/* 192-199 */
__EEPROM_DATA(0x20,0x54,0x48,0x49,0x53,0x20,0x4D,0x4F);	/* 200-207 */
__EEPROM_DATA(0x52,0x53,0x45,0x20,0x43,0x52,0x45,0x41);	/* 208-215 */
__EEPROM_DATA(0x54,0x45,0x44,0x20,0x42,0x59,0x20,0x50);	/* 216-223 */
__EEPROM_DATA(0x49,0x43,0x31,0x36,0x46,0x36,0x38,0x38);	/* 224-231 */
__EEPROM_DATA(0x20,0x4A,0x41,0x33,0x52,0x55,0x41,0x20);	/* 232-239 */
__EEPROM_DATA(0x50,0x52,0x4F,0x47,0x52,0x41,0x4D,0x4D);	/* 240-247 */
__EEPROM_DATA(0x45,0x44,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);	/* 248-255 */


    #define _XTAL_FREQ 31000	/* 31kHz */
    #define tan 10		    /* 10ミリ秒 */
    #define tyo 30		    /* 30ミリ秒 */	

////関数宣言(mainの前に書く)
	void putch(unsigned char moji);
	lcd_position(unsigned char);
	lcd_init();
	lcd_clear();

	ioport();
	modesel();
	prginit();
	cws();
	moji_input();
	moji_data();
	moji_write();
	w_end();
	readstart();	
	mm_data();
	readno3();
	readno1();
	readno0();
	readno6();
	f_moji();
	dspmsg();
	areturn();
	lcd_dsp();
	lcd_c_p();
	
	a();
	b();
	c();
	d();
	e();
	f();
	g();
	h();
	i();
	j();
	k();
	l();
	m();
	n();
	o();
	p();
	q();
	r();
	s();
	t();
	u();
	v();
	w();
	x();
	y();
	z();
	bk();
	sk();
	ee();
	n0();
	n1();
	n2();
	n3();
	n4();
	n5();
	n6();
	n7();
	n8();
	n9();
	sp();
	sura();
	qu();

	speed_tan();
	speed_tyo();
	ra2_1tyo();
	ra2_0tyo();
	ra2_1tan();
	ra2_0tan();

////グローバル変数(mainの前に書く)
	int areturn_flug=0;
	int readno6flug=0;
	int readno0flug=0;
	int readno3flug=0;
	int readno1flug=0;
	int modeflug=0;
	int modecnt=0;
	int cws_cnt=0;
	int m_s_flug=0;
	int cwspeed=4;
	int cwcnt;
	int cw_flug=0;
	int m_i_flug=2;	/*書き込みパターン番号処理の時が2でこの処理が終わると0or1とする*/
	int m_r_flug=2;
	int mojino=0;
	int w_flug=0;
	int m_w_flug=2;
	int mojiadd=0;
	int lcd_p=0;
	int mojicnt=0;
	int w_end_flug=0;
	int readgo=0;
	int m_w_cnt=0;
	int r_m_end;
	int start_r_add;
	int dspadd=0;
	int writestop=56;/*書込み文字数制限の設定*/
	unsigned char romdata;
	unsigned char  mojidata;
	

main()
{
	OSCCON=0x00;			/* 31kHz */

	PORTA=1;
	PORTC=0;
	ioport();

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

/*電源オン直後メッセージ*/
	prginit();
	dspmsg();	

/*CWスピードを読込む*/
	if(eeprom_read(0xEF)>10 || eeprom_read(0xEF)<1){
				cwspeed=4;
	}
				else{			
				cwspeed=eeprom_read(0xEF);
				}

	while(1){
/*モード設定選択*/
			if(RA5==0 && m_s_flug==0) modesel();
			if(RA5==1 && modeflug==1){
				modeflug=0;
				++modecnt;
				/*cwspeed処理の最初はカウントさせない為CWS_cnt=0にする*/
				cws_cnt=0;
				if(modecnt>6) modecnt=1;
										
					switch(modecnt){
						case 1:
							lcd_c_p();
							printf("データ カキコミ No.1");
							mojiadd=0x00;	
							break;
						case 2:
							lcd_c_p();
							printf("データ カキコミ No.2");
							mojiadd=0x40;	
							break;
						case 3:
							lcd_c_p();
							printf("データ カキコミ N0.3");
							mojiadd=0x80;	
							break;
						case 4:
							lcd_c_p();
							printf("データ ヨミダシ SW3-SW5");	
							break;
						case 5:
							lcd_c_p();
							printf("スピードセッテイ SW5");	
							break;
						case 6:
							lcd_c_p();
							printf("デモンストレーション SW2");	
							break;
					}
			
			}

//*CWスピード設定*/
			if(RA3==0 && modecnt==5){
			cws();
			}
			if(RA3==1 && cw_flug==1 && modecnt==5){
			
				if(cws_cnt==1) 	++cwspeed;
			
				if(cwspeed>10) cwspeed=1;

/*CWスピード設定を書き込む*/
						eeprom_write(0xEF,cwspeed);			
						cw_flug=0;
						cws_cnt=1;
						lcd_c_p();
						printf("cw speed=");
						printf("%d",cwspeed);
			}	
				 

/*文字入力*/
			if((RA4==0 && modecnt==1) || (RA4==0 && modecnt==2) || (RA4==0 && modecnt==3)){
			moji_input();
			m_s_flug=1;
			}

			if((RA4==1 && modecnt==1 && m_i_flug==1) || (RA4==1 && modecnt==2 && m_i_flug==1) || (RA4==1 && modecnt==3 && m_i_flug==1)){

/*文字を順番に表示*/

				w_flug=1;	/*書き込み処理中のフラグ*/
				m_i_flug=0;	
				++mojino;
				moji_data();

/*文字表示(スペースの時は-と表示)*/
				lcd_position(84);
				if(mojidata==0x20) printf("-");
				else printf("%c",mojidata);	

/*文字種類が42を超えるとAに戻す*/		
				if(mojino>41) mojino=0;	
			}

/*文字入力をRA1でAに戻す*/
				if(RA1==0) areturn();
				if(RA1==1 && areturn_flug==1){
					 	mojino=0;
						areturn_flug=0;			
				}


/*文字を書き込む*/
			if(RA0==0 && w_flug==1){
				moji_write();
			}

			if(RA0==1 && m_w_flug==1){

				m_w_flug=0;
				++m_w_cnt;

/*最初の1文字入力の時LCDの上から1行を消去*/
				if(m_w_cnt==1){
				 lcd_position(0);
				printf("                    ");
				}

/*書込み文字数表示*/
				lcd_position(86);
				printf("%d",m_w_cnt);
				
/*書込み文字数制限*/				
				if(m_w_cnt>writestop) break;

				switch(modecnt){
						case 1:
							eeprom_write(0+m_w_cnt-1,mojidata);
							eeprom_write(0x3F,m_w_cnt);		
							break;
						case 2:
							eeprom_write(64+m_w_cnt-1,mojidata);
							eeprom_write(0x7F,m_w_cnt);		
							break;
						case 3:
							eeprom_write(128+m_w_cnt-1,mojidata);
							eeprom_write(0xBF,m_w_cnt);		
							break;
				}

/*書込み文字連結表示*/


				if(m_w_cnt>=1 && m_w_cnt<=20){
					lcd_position(m_w_cnt-1);
					printf("%c",mojidata);
				}

				if(m_w_cnt>=21 && m_w_cnt<=40){
					lcd_position(m_w_cnt+43);
					printf("%c",mojidata);
				}

				if(m_w_cnt>=41 && m_w_cnt<=60){
					lcd_position(m_w_cnt-21);
					printf("%c",mojidata);
				}
				

			}/*文字を書き込むif文の最後*/



/*書き込み終了*/
			if(RA3==0 && w_flug==1){
				w_end();
			}
			if(RA3==1 && w_end_flug==1 && w_flug==1){
			
				prginit();
				lcd_clear();
				dspmsg();	

			}

/*読み出しスタート*/
			if(RA3==0 && modecnt==4){
					readno3();
			}

			if(RA3==1 && modecnt==4 && readno3flug==1){
					readno3flug=0;
					start_r_add=128;
					r_m_end=eeprom_read(0xBF);
					lcd_c_p();
					f_moji();
			}

			if(RA1==0 && modecnt==4){
					readno1();
			}

			if(RA1==1 && modecnt==4 && readno1flug==1){
					readno1flug=0;
					start_r_add=64;
					r_m_end=eeprom_read(0x7F);
					lcd_c_p();
					f_moji();
			}

			if(RA0==0 && modecnt==4){
					readno0();
			}

			if(RA0==1 && modecnt==4 && readno0flug==1){
					readno0flug=0;
					start_r_add=0;
					r_m_end=eeprom_read(0x3F);
					lcd_c_p();
					f_moji();
			}

/*demo*/
			if(RA4==0 && modecnt==6){
					readno6();
			}
			if(RA4==1 && modecnt==6 && readno6flug==1){
					readno6flug=0;
					start_r_add=192;
					r_m_end=58;
					lcd_c_p();
					f_moji();
			}


	}////whileの最後


}////メインの最後

//******************* 関数 *******************
lcd_c_p()
{
					lcd_clear();
					lcd_position(0);
}
areturn()
{
areturn_flug=1;
}

dspmsg()
{
	lcd_position(66);
	printf("CQ CQ (^_^) V.34");
}

f_moji()
{
		for(mojicnt=0;mojicnt<r_m_end;++mojicnt){

			romdata=eeprom_read(mojicnt+start_r_add);
	
			if(mojicnt>=0 && mojicnt<=19) {
				dspadd=0;
				lcd_dsp();
			}
	
			if(mojicnt>=20 && mojicnt<=39){
 				dspadd=44;
				lcd_dsp();
			}
	
			if(mojicnt>=40 && mojicnt<=59){
 				dspadd=-20;
				lcd_dsp();
			}
	
			if(mojicnt>=60 && mojicnt<=89){
 				dspadd=20;
				lcd_dsp();
			}
		}

}

lcd_dsp()
{
lcd_position(mojicnt+dspadd);
printf("%c",romdata); 
mm_data();
}

//***
readno6()
{
readno6flug=1;
}
//***
readno0()
{
readno0flug=1;
}
//***
readno3()
{
readno3flug=1;
}
//***
readno1()
{
readno1flug=1;
}
//***
modesel()
{
modeflug=1;
}
//***
readstart()
{
readgo=1;
}
//***
cws()
{
	cw_flug=1;
}
//***
moji_input()
{
	m_i_flug=1;
}
//***
moji_write()
{
	m_w_flug=1;
}
//***
w_end()
{
	w_end_flug=1;
}
//***
prginit()
{
	modeflug=0;
	modecnt=0;
	cws_cnt=0;
	m_s_flug=0;
	cwcnt;
	cw_flug=0;
	m_i_flug=2;	/*書き込みパターン番号処理の時が2でこの処理が終わると0or1とする*/
	m_r_flug=2;
	mojino=0;
	w_flug=0;
	m_w_flug=2;
	mojiadd=0;
	lcd_p=0;
	mojicnt=0;
	w_end_flug=0;
	readgo=0;
	m_w_cnt=0;
}

//********文字検索***********
moji_data()
{
			switch(mojino){
				case 1:
					mojidata=0x41;
					//a();
					break;
				case 2:
					mojidata=0x42;
					//b();
					break;
				case 3:
					mojidata=0x43;
					//c();
					break;
				case 4:
					mojidata=0x44;
					//d();
					break;
				case 5:
					mojidata=0x45;
					//e();
					break;
				case 6:
					mojidata=0x46;
					//f();
					break;
				case 7:
					mojidata=0x47;
					//g();
					break;
				case 8:
					mojidata=0x48;
					//h();
					break;
				case 9:
					mojidata=0x49;
					//i();
					break;
				case 10:
					mojidata=0x4A;
					//j();
					break;
				case 11:
					mojidata=0x4B;
					//k();
					break;
				case 12:
					mojidata=0x4C;
					//l();
					break;
				case 13:
					mojidata=0x4D;
					//m();
					break;
				case 14:
					mojidata=0x4E;
					//n();
					break;
				case 15:
					mojidata=0x4F;
					//o();
					break;
				case 16:
					mojidata=0x50;
					//p();
					break;
				case 17:
					mojidata=0x51;
					//q();
					break;
				case 18:
					mojidata=0x52;
					//r();
					break;
				case 19:
					mojidata=0x53;
					//s();
					break;
				case 20:
					mojidata=0x54;
					//t();
					break;
				case 21:
					mojidata=0x55;
					//u();
					break;
				case 22:
					mojidata=0x56;
					//v();
					break;
				case 23:
					mojidata=0x57;
					//w();
					break;
				case 24:
					mojidata=0x58;
					//x();
					break;
				case 25:
					mojidata=0x59;
					//y();
					break;
				case 26:
					mojidata=0x5A;
					//z();
					break;
				case 27:
					mojidata=0x30;
					//n0();
					break;
				case 28:
					mojidata=0x31;
					//n1();
					break;
				case 29:
					mojidata=0x32;
					//n2();
					break;
				case 30:
					mojidata=0x33;
					//n3();
					break;
				case 31:
					mojidata=0x34;
					//n4();
					break;
				case 32:
					mojidata=0x35;
					//n5();
					break;
				case 33:
					mojidata=0x36;
					//n6();
					break;
				case 34:
					mojidata=0x37;
					//n7();
					break;
				case 35:
					mojidata=0x38;
					//n8();
					break;
				case 36:
					mojidata=0x39;
					//n9();
					break;
				case 37:
					mojidata=0x20;
					//sp();
					break;
				case 38:
					mojidata=0x2F;
					//sura();
					break;
				case 39:
					mojidata=0x3F;
					//qu();
					break;
				case 40:
					mojidata=0x62;
					//bk();
					break;
				case 41:
					mojidata=0x73;
					//sk();
					break;
				case 42:
					mojidata=0x65;
					//ee();
					break;
				default:
					mojidata=0x20;
					//sp();
			}
}


mm_data()
{

			switch(romdata){
				case 0X41:
					a();
					break;
				case 0x42:
					b();
					break;
				case 0x43:
					c();
					break;
				case 0x44:
					d();		
					break;
				case 0x45:
					e();	
					break;
				case 0x46:
					f();
					break;
				case 0x47:
					g();
					break;
				case 0x48:
					h();
					break;
				case 0x49:
					i();
					break;
				case 0x4A:
					j();
					break;
				case 0x4B:
					k();
					break;
				case 0x4C:
					l();
					break;
				case 0x4D:
					m();
					break;
				case 0x4E:
					n();
					break;
				case 0x4F:
					o();
					break;
				case 0x50:
					p();
					break;
				case 0x51:
					q();
					break;
				case 0x52:
					r();
					break;
				case 0x53:
					s();
					break;
				case 0x54:
					t();
					break;
				case 0x55:
					u();
					break;
				case 0x56:
					v();
					break;
				case 0x57:
					w();
					break;
				case 0x58:
					x();
					break;
				case 0x59:
					y();
					break;
				case 0x5A:
					z();
					break;
				case 0x30:
					n0();
					break;
				case 0x31:
					n1();
					break;
				case 0x32:
					n2();
					break;
				case 0x33:
					n3();
					break;
				case 0x34:
					n4();
					break;
				case 0x35:
					n5();
					break;
				case 0x36:
					n6();
					break;
				case 0x37:
					n7();
					break;
				case 0x38:
					n8();
					break;
				case 0x39:
					n9();
					break;
				case 0x20:
					sp();
					break;
				case 0x2F:
					sura();
					break;
				case 0x3F:
					qu();
					break;
				case 0x62:
					bk();
					break;
				case 0x65:
					ee();
					break;
				case 0x73:
					sk();
					break;
				default:
					sp();
			}
}


a()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();	
}
b()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();	
}
c()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}
d()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();	
}
e()
{

			ra2_1tan();
//			ra2_0tan();
			ra2_0tyo();	
}
f()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}
g()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}
h()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}	
i()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}
j()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();

}
k()
{
			ra2_1tyo();
			ra2_0tan();	
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();
}


l()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}	
m()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();
}
n()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}
o()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();
}
p()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}
q()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();
}
r()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}
s()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}
t()
{
			ra2_1tyo();
			ra2_0tyo();
}
u()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();
}
v()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();
}
w()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();
}
x()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();
}
y()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();
}
z()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}
bk()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();	
}
sk()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
}
ee()
{

			ra2_1tan();
//			ra2_0tan();
			ra2_0tan();
}
n0()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();
}
n1()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();
}
n2()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();
}
n3()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();
}
n4()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tyo();
}
n5()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}
n6()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}
n7()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}
n8()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}
n9()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}
sp()
{
			ra2_0tyo();
}
sura()
{
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}
qu()
{
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tyo();
			ra2_0tan();
			ra2_1tan();
			ra2_0tan();
			ra2_1tan();
			ra2_0tyo();
}


speed_tan()
{
	for(cwcnt=0;cwcnt<cwspeed;++cwcnt){
			__delay_ms(tan);
	}
}

speed_tyo()
{
	for(cwcnt=0;cwcnt<cwspeed;++cwcnt){
		__delay_ms(tyo);
	}
}

ra2_1tyo()
{
			RA2=1;
			speed_tyo();
}
ra2_0tyo()
{
			RA2=0;
			speed_tyo();
}
ra2_1tan()
{
			RA2=1;
			speed_tan();
}
ra2_0tan()
{
			RA2=0;
			speed_tan();
}
ioport()
{

		ANSEL=0x0;			/* AN4-7はデジタルI/Oモード */
		CMCON0=0x07;
		TRISA=0xFB;			/* RA0,1,3,4,5は入力ピン RA2は出力ピン*/
		TRISC=0;			/* RC0-5は出力ピン */
		PORTA=0xFB;			/* RA0,1,3,4,5はH RA2はL*/
		PORTC=0;			/* RC0-5はL */

}

void putch(unsigned char nandemo) 	/* PUTCH */
{
	RC5=1;
	__delay_us(80);
	PORTC=(((nandemo>>4)&0x0F)|0x20);
	RC4=1;
	RC4=0;
	PORTC=((nandemo&0x0F)|0x20);
	RC4=1;
	RC4=0;
}

-----------------------------プログラムソース 本体 END---------------------------------


-----------------------------プログラムソース LCD 初期化---------------------------------

#include <htc.h>

#define _XTAL_FREQ 31000

lcd_init();
lcd_position(unsigned char);
lcd_clear();
void putch(unsigned char);
lcd_write_RS1(unsigned char);
lcd_write_RS0(unsigned char);

lcd_init()		/* LCDモジュール初期化  PIC:PIC16F688 LCD:SD1602 HUOB-XA */
{               /* RC5:RS RC4:E
	RC5=0;
	RC4=0;
	__delay_ms(30);
	PORTC=0x03;               /* 8bitモード */
	RC4=1;
	RC4=0;
	__delay_ms(10);
	RC4=1;
	RC4=0;
	__delay_us(400);
	RC4=1;
	RC4=0;


	__delay_us(400);
	PORTC=0x02;               /* 4bitモード */
	RC4=1;
	RC4=0;

//	lcd_write_RS0(0x28);      /* function set */
	__delay_us(80);
	PORTC=0x02;
	RC4=1;
	RC4=0;
	PORTC=0x08;		 /* 0x08:2行 0x00:1行 */
	RC4=1;
	RC4=0;

//	lcd_write_RS0(0x0C)   /*disp control*/
	__delay_us(80);
	PORTC=0x00;
	RC4=1;
	RC4=0;
	PORTC=0x0C;		 /*disp:on cursor:off blink:off*/
	RC4=1;
	RC4=0;

//	lcd_write_RS0(0x01)       /*clear disp*/
	__delay_us(80);
	PORTC=0x00;
	RC4=1;
	RC4=0;
	PORTC=0x01;
	RC4=1;
	RC4=0;
	__delay_ms(4);

//	lcd_write_RS0(0x06);     /*entry mode*/
	__delay_us(80);
	PORTC=0x00;
	RC4=1;
	RC4=0;
	PORTC=0x06;              /*increment*/
	RC4=1;
	RC4=0;

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

//***************************************************************
lcd_position(unsigned char pos)		/* 文字の位置を指定 */
{
	RC5=0;
	lcd_write_RS0(0x80+pos);
}
//***************************************************************

//***************************************************************
lcd_clear()			           /* RS=0(RC5=0)画面をクリア */
{
	RC5=0;
	__delay_us(80);
	PORTC=0x00;
	RC4=1;
	RC4=0;
	PORTC=0x01;
	RC4=1;
	RC4=0;
	__delay_ms(4);
}
//***************************************************************


//*************************************************************
lcd_write_RS1(unsigned char c)	/* RS=1(RC5=1)の時1バイトだけ書く */
{
	__delay_us(80);
	PORTC=(((c>>4)&0x0F)|0x20);
	RC4=1;
	RC4=0;
	PORTC=((c&0x0F)|0x20);
	RC4=1;
	RC4=0;
}
//***************************************************************

//*************************************************************
lcd_write_RS0(unsigned char c)	/* RS=0(RC5=0)の時1バイトだけ書く */
{
	__delay_us(80);
	PORTC=((c>>4)&0x0F);
	RC4=1;
	RC4=0;
	PORTC=(c&0x0F);
	RC4=1;
	RC4=0;
}
//***************************************************************


-----------------------------プログラムソース LCD 初期化 END---------------------------------