//PIC16F689 8bit SC2004 接続 番外編 #include__CONFIG(INTIO & WDTDIS & PWRTEN & MCLREN & UNPROTECT); #define _XTAL_FREQ 4000000 // クロック周波数4MHz #define RS RA1 // 「RA1」というピンに「RS」という名前をつける #define E RA0 // 「RA0」というピンに「E」という名前をつける void main(void) { // PICの初期設定 (アナログ無効・入出力設定) ANSEL = 0x00; // すべてのピンをデジタルI/Oに設定 ANSELH = 0x00; CM1CON0 = 0x00; // コンパレータ無効化(PORTAの干渉防止) CM2CON0 = 0x00; TRISA0 = 0; // RA0 (Eピン) 出力 TRISA1 = 0; // RA1 (RSピン) 出力 TRISC = 0x00; // PORTC (D0-D7) すべて出力 PORTA = 0x00; // ポート初期化 PORTC = 0x00; int i; //forで使用する変数 // LCDの初期化処理 (電源ONから各コマンド送信) __delay_ms(30); // 電源立ち上がり待ち RS = 0; PORTC = 0x38; E = 1; __delay_us(2); E = 0; __delay_ms(2); // RS=0 (コマンド) RS = 0; PORTC = 0x0C; E = 1; __delay_us(2); E = 0; __delay_ms(2); // ◆ コマンド送信: 画面ON、カーソルOFF (0x0C)// RS = 0; PORTC = 0x06; E = 1; __delay_us(2); E = 0; __delay_ms(2); // ◆ コマンド送信: エントリーモード設定 (0x06) RS = 0; PORTC = 0x01; E = 1; __delay_us(2); E = 0; __delay_ms(2); // ◆ コマンド送信: 画面消去 (0x01) //*現在プログラム2が動作している、プログラム1を動作させる時はプログラム2をコメントアウトしてプログラム1の2つの//を削除する*// //プログラム1 //1文字表示するLCDのアドレス //RS = 0; PORTC = 0x80; RA0 = 1; __delay_us(2); E = 0; __delay_ms(2); //ここで表示アドレス設定 RS(RA1)=0 (コマンド) //表示文字の設定 0x41はA //RS = 1; PORTC = 0x41; RA0 = 1; __delay_us(2); E = 0; __delay_us(50); //ここで'A'が表示 RS(RA1)=1 (データ) //プログラム2 //→が左端(0x80)から右端(0x93)に行くと、また左端から表示を繰り返す for (i = 0; i < 20; i++) { RS = 0; PORTC = 0x80+i; E = 1; __delay_us(2); E = 0; __delay_ms(2); //アドレス位置 RS = 1; PORTC = 0x7E; E = 1; __delay_us(2); E = 0; __delay_us(50); //文字 __delay_ms(100); __delay_ms(100); __delay_ms(100); //待ち時間 RS = 0; PORTC = 0x80+i; E = 1; __delay_us(2); E = 0; __delay_ms(2); //アドレス位置 RS = 1; PORTC = ' '; E = 1; __delay_us(2); E = 0; __delay_us(50); //文字を消去 __delay_ms(100); __delay_ms(100); __delay_ms(100); //待ち時間 // 20マス目(i=19)まで行ったら、次はi=0からスタートするようにリセット // ※for文のループ最後に自動で i++ されるため、ここでは -1 にしておく if (i == 19) {i = -1;}//if }//for while(1) { // 表示を維持するため、ここで無限ループ }//while }//main