-----------------------------プログラムソース 本体--------------------------------- #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---------------------------------