練習プログラム5

「練習プログラム5」の編集履歴(バックアップ)一覧に戻る

練習プログラム5 - (2011/05/19 (木) 16:18:52) の編集履歴(バックアップ)


 参考プログラム⑤ 『スイッチが押されていると点滅が加速』

#include <3694.h>

#define SW1 !IO.PDR1.BIT.B4        //スイッチ (SW1→押されたら1、押されてないと0)

/*-----------------------------------------------*/
/*              指定ms待つ関数                        */
/*-----------------------------------------------*/
void ms_wait(unsigned int ms)
{
   //====指定msループ====
   while(ms--)
   {
       //====TMA設定====
       TA.TMA.BYTE = 0x1c;  //Clear TCA.
       TA.TMA.BYTE = 0x13;  //PSS, 入力クロックφ/512.

       while(TA.TCA < 40);  //約1ms待つ.
   }
}

/*--------------------------------------------------*/
/*                  LED点滅関数                     */
/*--------------------------------------------------*/
void LED_blink(unsigned int led_sp){
   unsigned short i;
   for(i=0;i<1;i++){           //意味無いけど、for文で一回だけまわす.
       IO.PDR5.BYTE = 0x00;      //LED全点灯.
       ms_wait(led_sp);             //点滅の間隔.
       IO.PDR5.BYTE = 0xff;      //LED全消灯.
       ms_wait(led_sp);             //点滅の間隔.
   }
}

/*--------------------------------------------------*/
/*                   メイン関数                     */
/*--------------------------------------------------*/
int main(void){
   IO.PCR5 = 0xff;           //Port5をすべて出力に設定.
   IO.PCR1 = 0x00;           //Port1をすべて入力に設定.

   int i=500;

   while(1){                     //無限ループ.
       if(SW1==1){                  //もしスイッチ1が押されたら.
           i-=20;                      //iを20だけ減算.
           ms_wait(2);
       }

       LED_blink(i);               //LED点滅関数にiの値を渡す.
   }

   return 0;
}

  ・プログラムの解説


まず、一回分の点滅の処理をするLED点滅関数では、まずLEDを点灯して、指定された時間待ってからLEDを消灯して、また指定した時間待ちます。
メイン関数では、まず点滅の間隔を500msに指定してから、1回の点滅が行われる前にスイッチ1が押されているかどうかを確認し、押されている場合は点滅の間隔を小さくしてから点滅関数を実行します。これにより、点滅している間スイッチ1を押していると、点灯と消灯の間隔が徐々に小さくなっていき、点滅が加速します。

課題プログラム⑤『スイッチを2つ使い、点滅の間隔を加減速させよ』

ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。