//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