//PIC16F689 8bit SC2004 接続 文字表示 #include__CONFIG(INTIO & WDTDIS & PWRTEN & MCLREN & UNPROTECT); #define _XTAL_FREQ 4000000 // クロック周波数4MHz void main(void) { // ---------------------------------------------------- // 1. 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; char moji; //変数mojiを宣言 moji='C'; //表示文字を変数mojiに代入 //重要 変数は1文字しか代入出来ない、2文字以上は配列を使う // ---------------------------------------------------- // 2. LCDの初期化処理 (電源ONから各コマンド送信) // ---------------------------------------------------- __delay_ms(30); // 電源立ち上がり待ち // ◆ コマンド送信: 8bit, 2行, 5x8ドット設定 (0x38) RA1 = 0; // RS=0 (コマンド) PORTC = 0x38; // データセット RA0 = 1; // E=1 (ストローブON) __delay_us(2); RA0 = 0; // E=0 (ストローブOFF) __delay_ms(2); // 処理待ち // ◆ コマンド送信: 画面ON、カーソルOFF (0x0C) RA1 = 0; // RS=0 (コマンド) PORTC = 0x0C; // データセット RA0 = 1; // E=1 __delay_us(2); RA0 = 0; // E=0 __delay_ms(2); // ◆ コマンド送信: エントリーモード設定 (0x06) RA1 = 0; // RS=0 (コマンド) PORTC = 0x06; // データセット RA0 = 1; // E=1 __delay_us(2); RA0 = 0; // E=0 __delay_ms(2); // ◆ コマンド送信: 画面消去 (0x01) RA1 = 0; // RS=0 (コマンド) PORTC = 0x01; // データセット RA0 = 1; // E=1 __delay_us(2); RA0 = 0; // E=0 __delay_ms(2); // ---------------------------------------------------- // 3. 表示位置(1行目3桁目)の指定コマンド送信 【ここを追加】 // ---------------------------------------------------- // 1行目の先頭アドレスは 0x80 です。 // 1桁目=0x80, 2桁目=0x81, 3桁目=0x82 となります。 RA1 = 0; // RS=0 (コマンド) PORTC = 0x80; // 1行目3桁目のDDRAMアドレスを指定 RA0 = 1; // E=1 (ストローブON) __delay_us(2); RA0 = 0; // E=0 (ストローブOFF) __delay_ms(2); // 処理待ち // ---------------------------------------------------- // 3. 変数mojiに代入した文字の表示処理 // ---------------------------------------------------- // ◆ データ送信: 文字 変数(moji)に代入された文字を書き込み RA1 = 1; // RS=1 (データ) PORTC=moji; // 'C'が代入されている RA0 = 1; // E=1 (ストローブON) __delay_us(2); RA0 = 0; // E=0 (ストローブOFF) __delay_us(50); // 書き込み待ち // ---------------------------------------------------- // 4. 全体の維持 // ---------------------------------------------------- while(1) { // 表示を維持するため、ここで無限ループ } }