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の処理をします、つまり桁上げがどんどん続きます。
LED*11
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 へ戻る]

inserted by FC2 system