ディップスイッチの状態をLCDに表示したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ろくじょう

ディップスイッチの状態をLCDに表示したい

#1

投稿記事 by ろくじょう » 4年前

PICのマイコンを使ってディップスイッチの状態を見てLCDの表示を変更したいです。
現在のコードだとスタートスイッチを押した時にだけディップスイッチの状態を表示します。
現在:スタートボタン⇒ディップスイッチの状態をLCD表示⇒動作
したい事:ディップスイッチの状態をLCD表示⇒スタートボタン押され待ち⇒ボタンon⇒動作

現在のコードです。

コード:

    while(1){
        if(StartSW == 0){            // スタートスイッチ
            if(SwBefore == 0){      // 前回のスイッチ状態
                __delay_ms(20);
            }
            SwBefore = 1;
        }else{
            if(SwBefore){
                __delay_ms(20);
                lcd_cls();
                switch(PORTD){
                    case DIPSW1:            //DIPスイッチ
                        lcd_cls();          // LCD画面のクリア
                        lcd_locate(0,0);    // LCDに文字入力
                        lcd_puts("MODE1");
                        AL = ON;
                        __delay_ms(10);
                        AL = OFF;
                        break;
                    case DIPSW2:
                        lcd_cls();
                        lcd_locate(0,0);
                        lcd_puts("MODE2");
                        AL = ON;
                        __delay_ms(20);
                        AL = OFF;
                        break;
                    default:
                        break;
                }
            }
            SwBefore = 0;
        }
    }
}
表示だけ別にしたらLCDをクリアをしているのでチカチカします。

コード:

while(1){
                switch(PORTD){
                    case DIPSW1:            //DIPスイッチ
                        lcd_cls();          // LCD画面のクリア
                        lcd_locate(0,0);    // LCDに文字入力
                        lcd_puts("MODE1");
                        break;
                    case DIPSW2:
                        lcd_cls();
                        lcd_locate(0,0);
                        lcd_puts("MODE2");
                        break;
                    default:
                        break;
                }
}
ディップスイッチの状態をLCD表示⇒スタートボタン押され待ち⇒ボタンon⇒動作
を実現するにはどうすればいいですか?初心者なので説明をかみ砕いていただいたりヒントになるコードを書いてもらえると助かります。
情報が足りなければ追記します。よろしくお願いします。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: ディップスイッチの状態をLCDに表示したい

#2

投稿記事 by みけCAT » 4年前

質問をよく理解できていない気がしますが、
ディップスイッチの状態が変わったときのみLCDを更新する、というのはどうでしょうか?

コード:

int prev = 0x100; //ありえない値で初期化
while(1){
        int status = PORTD;
        if (status != prev){
                switch(status){
                    case DIPSW1:            //DIPスイッチ
                        lcd_cls();          // LCD画面のクリア
                        lcd_locate(0,0);    // LCDに文字入力
                        lcd_puts("MODE1");
                        break;
                    case DIPSW2:
                        lcd_cls();
                        lcd_locate(0,0);
                        lcd_puts("MODE2");
                        break;
                    default:
                        break;
                }
                prev = status;
        }
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ろくじょう

Re: ディップスイッチの状態をLCDに表示したい

#3

投稿記事 by ろくじょう » 4年前

説明が下手で申し訳ありませんでした。みけCATさんのおっしゃる通りの事がしたかったのです。
質問したあとに前回と今回の値の違いを見るという考え迄はなんとか行き着けたのですが、どうしても起動時の状態を読むにはどうしたらいいかでわからなくて余計な関数を作っていました。

コード:

int prev = 0x100; //ありえない値で初期化
「ありえない値で初期化」は目からウロコです。
勉強になりました。ありがとうございました。またよろしくお願いします。

返信

“C言語何でも質問掲示板” へ戻る