51 マイクロコントローラー: タイマーと割り込みシステムのアプリケーション

#include "regx52.h"


void Delay(int time)
{     while(time--) //while ループには 10us かかります     {     } }



 void Timer0Init(void) //1 ミリ秒 @11.0592MHz
{

    TMOD &= 0xF0; //タイマーモードを設定します
    TMOD |= 0x01; //タイマーモードを設定します
    TL0 = 0x66; //タイマーの初期値を設定します
    TH0 = 0xFC; //タイマーの初期値を設定します
    TF0 = 0; // TF0 フラグをクリア
    TR0 = 1; //タイマ 0 が計時を開始
    ET0 = 1;
    EA = 1;
    PT0 = 0;
}

 
int i,count,LEDMode;
 
//割り込み後に実行する必要のある内容
void Timer0_motion()割り込み 1
{  
    TL0 = 0x66; //タイミングの初期値を設定
    TH0 = 0xFC; //タイミングの初期値を設定
    
       count++;
   if( count == 500 )
   {    
           if(LEDMode == 0) //LED ライトが左に移動
        {             if(i>=8)i=0;                     P2=~(0x01<<i);             i++;         }



        if(LEDMode == 1) //LEDランプ右移
        {             if(i<0)i=7;             P2=~(0x01<<i);             私 - ;         カウント           =0;    }




           

}


//独立キーの信号処理
int Key(void)    
{

    int キー番号 = 0;
    if(P3_1==0){遅延(1000);while(P3_1==0);遅延(1000);キー番号 = 1;} if(P3_0==0){
    遅延(2000);while(P3_0==0 );遅延(2000);キー番号 = 2;}
    if(P3_2==0){遅延(2000);while(P3_2==0);遅延(2000);キー番号 = 3;} if(
    P3_3==0) {遅延(2000);while(P3_3==0);遅延(2000);キー番号 = 4;}

    キー番号を返します。
}

int main()
{     int KeyNum;     //タイマーの初期化     Timer0Init();      while(1)      {          KeyNum=Key(); //独立したキーのステータスを受け取り、返す           if(KeyNum)        {                if(KeyNum == 1)             {               LEDMode++ ;               if(LEDMode>=2)LEDMode=0;                 }                }      }     return 0;

    














    

実験現象

 

おすすめ

転載: blog.csdn.net/weixin_52300845/article/details/124842892