PIC12F1822プログラムでボタンを押すごとにLEDが光るようにする方法

C言語関連

PIC12F1822を使ったLED制御のプログラムを作成するには、まずハードウェアの設定と、適切なプログラムの流れを理解することが重要です。今回は、ボタンを押すごとにLEDが光るようにする方法を解説します。質問者のコードを参考にし、いくつかのポイントを押さえて修正しながら進めていきます。

PIC12F1822の基本的な設定

PIC12F1822は、8ビットのマイクロコントローラで、I/Oピンを使ってさまざまなデバイスを制御できます。プログラムを書く際には、まずはI/Oピンの設定が重要です。質問者のコードでは、TRISAでピンの入出力を設定しており、RA3ピンを入力、その他のピンを出力に設定しています。この設定を適切に行うことで、ボタン入力とLED制御が可能になります。

ボタンを押すごとにLEDを光らせる方法

質問者が目指しているのは、ボタンを押すごとにLEDの光り方を変えるという動作です。このため、ボタン入力を読み取った後、LEDの状態を変更するロジックを追加する必要があります。具体的には、ボタンを押した状態を読み取るために、RA3ピンの状態を確認し、それに基づいてRA0〜RA3ピンのLEDを制御します。

コードの修正例は以下の通りです。

#include 

#define _XTAL_FREQ 4000000 // delay用に必要(クロック4MHzを指定)

void Wait(unsigned int num)
{
    int i;
    for (i = 0; i < num; i++) {
        __delay_ms(10);  // 10msの待機
    }
}

void main() {
    OSCCON = 0b01101010;  // 内部クロックは4MHz
    ANSELA = 0b00000000;  // アナログ無効
    TRISA = 0b00001000;   // RA3を入力、RA0〜RA2を出力
    PORTA = 0b00000000;   // 初期化で全ピンをLOWに設定

    int state = 0;

    while(1) {
        if (PORTAbits.RA3 == 1) { // ボタンが押された時
            Wait(10); // デバウンス
            if (PORTAbits.RA3 == 1) {
                state++; // LEDの状態を切り替え
                if (state > 3) state = 0; // 状態が4以上にならないように

                switch (state) {
                    case 0:
                        PORTAbits.RA0 = 0;
                        PORTAbits.RA1 = 0;
                        PORTAbits.RA2 = 0;
                        break;
                    case 1:
                        PORTAbits.RA0 = 1;
                        PORTAbits.RA1 = 0;
                        PORTAbits.RA2 = 0;
                        break;
                    case 2:
                        PORTAbits.RA0 = 0;
                        PORTAbits.RA1 = 1;
                        PORTAbits.RA2 = 0;
                        break;
                    case 3:
                        PORTAbits.RA0 = 0;
                        PORTAbits.RA1 = 0;
                        PORTAbits.RA2 = 1;
                        break;
                }
            }
        }
    }
}

注意点とアドバイス

上記のコードでは、ボタンの状態をポーリングして確認していますが、ボタンを押した時のノイズを防ぐために、Wait関数を使ってデバウンス処理を行っています。また、LEDの状態は整数値で管理し、ボタンを押すたびに状態を変化させる仕組みになっています。

まとめ

今回は、PIC12F1822を使って、ボタンを押すごとにLEDの点灯を切り替える方法を解説しました。コードの流れとしては、まずボタンの入力を監視し、ボタンが押される度にLEDの状態を切り替えるというものです。この方法を応用すれば、さらに複雑な制御にも対応できるようになりますので、ぜひ挑戦してみてください。

コメント

タイトルとURLをコピーしました