天天看點

實作定時器定時 1 秒鐘,LED 亮滅顯示

實作定時器定時 1 秒鐘,LED 亮滅顯示

 要求

每隔一秒鐘,實作LED燈的顯隐轉換

實驗代碼

/**************************************************************************************
*                      定時器1中斷實驗                                                  *
實作現象:實作定時器定時 1 秒鐘,LED 亮滅顯示
注意事項:                                                                                  
***************************************************************************************/

#include "reg52.h"             //此檔案中定義了單片機的一些特殊功能寄存器

typedef unsigned int u16;      //對資料類型進行聲明定義
typedef unsigned char u8;

sbit led = P2^0;

/*******************************************************************************
* 函 數 名         : Timer1Init
* 函數功能           : 定時器1初始化
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void Timer1Init()
{
    TMOD|=0X10;//選擇為定時器1模式,工作方式1,僅用TR1打開啟動。
    TH1=0XFC;    //給定時器賦初值,定時1ms
    TL1=0X18;    
    ET1=1;//打開定時器1中斷允許
    EA=1;//打開總中斷
    TR1=1;//打開定時器            
}

/*******************************************************************************
* 函 數 名       : main
* 函數功能         : 主函數
* 輸    入       : 無
* 輸    出         : 無
*******************************************************************************/
void main()
{    
    Timer1Init();  //定時器1初始化
    while(1);        
}

/*******************************************************************************
* 函 數 名         : void Timer1() interrupt 3
* 函數功能           : 定時器0中斷函數
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void Timer1() interrupt 3
{
    static u16 i;
    TH1=0XFC;    //給定時器賦初值,定時1ms
    TL1=0X18;
    i++;
    if(i==1000)
    {
        led = ~led;
        i=0;    
    }    
}
      

效果圖

實作定時器定時 1 秒鐘,LED 亮滅顯示