7 Segments LED System +SW
このプログラムは[7セグメントLEDをI/O 8bitでドライブ]の基板に、SWを付けて実験したものです。
Softを少し変更していますが写真はほとんど同じです。MCUはavrのAT90S2313と古いものを使っています。これをたくさん持っているのでこれを使いました、PICでも同じです。 LEDシステムにSWを付ける
7セグメントLEDを数個使って、数字を表示するシステムは良く使います。手元のシステムはLED3桁の物が多く[1mSec-4mSec]で使うことが多いです。
これに外部コントロールするのにボタンSWを追加して見ました。実験なので1桁だけです、これは元々タイマーで使っていた物に付けて見ました。「桁上げをボタンでする」だけですが、応用はたくさんあると思います。 動 作
メイン(main)でSWが押されているかチエックし、押されていればサブルーチンを実行する。
押されなければ、ここで何もせずにパスする。
SWを増やせば細かい設定などに使える。ここでは桁上げ処理だけなので「一度押されたら、+1をしてLEDに表示する」という物です。ここでのポイントは、LEDを表示する時の待ち時間を利用してSWのチャッタリングを防止しています。
4mSec毎で150回経過をすれば0.6秒となります。これを毎回実行するわけですが、SWを押しっぱなしにすると「0.6秒後に再度SWを受付」SWの処理をします、つまり桁上げがどんどん続きます。 sbit SW at PIND3_bit;
main // SW sheck
if (SW==0){
Key_Cunt=0; //Interrupt UP
Cmin+=0x10; //UP 10min
if (Cmin <=0x60) //Max
Cmin -=0x60;
LED_0Data=Cmin; //change display
while (Key_Cunt= <150); //Loop wait 0.6Sec
}
interrupt
Key_Cunt++; //追加 SOFT
今回のSWは割り込みをカウントするという物で、基礎となる「割り込みを使ったタイマー」を一つ作っておけば、これを利用すると複数のタイマーが作れるという物です。
複数という事は、極端にいうと100個でもという事です!あまり多いとプログラムは混乱しますが…。
以前「タイマーが少ないので処理が出来ない!」と嘆いたことがありましたが、これを気が付くまでかなり時間が掛かった事を記憶し、これで問題が解決した事を覚えています。
先輩も色々遭遇していると思うのですが、あまり教えてくれないので色々公開して欲しいですねー。作成 [2012/3/29 --- 4/2]
[MAIN MENU へ戻る]