天天看點

用定時器T1中斷控制LED與蜂鳴器

用定時器T1中斷控制LED與蜂鳴器

用定時器T1中斷控制兩個LED以不同周期閃爍

#include// 包含51單片機寄存器定義的頭檔案

sbit D1=P0^0; //将D1位定義為P0.0引腳

sbit D2=P0^1; //将D2位定義為P0.1引腳

注意:對照原理圖,原理圖不清楚的放大看。

unsigned char Countor1; //設定全局變量,儲存定時器T1中斷次數

unsigned char Countor2; //設定全局變量,儲存定時器T1中斷次數

/**************************************************************

函數功能:主函數

**************************************************************/

void main(void)

{

EA=1; //開總中斷

ET1=1; //定時器T1中斷允許

TMOD=0x10; //使用定時器T1的模式1

TH1=(65536-46083)/256; //定時器T1的高8位賦初值

TL1=(65536-46083)%256; //定時器T1的高8位賦初值

TR1=1; //啟動定時器T1

Countor1=0; //從0開始累計中斷次數

Countor2=0; //從0開始累計中斷次數

while(1)//無限循環等待中斷

;

}

函數功能:定時器T1的中斷服務程式

void Time1(void) interrupt 3 using 0 //“interrupt”聲明函數為中斷服務函數

//其後的3為定時器T1的中斷編号;0表示使用第0組工作寄存器

Countor1++; //Countor1自加1

Countor2++; //Countor2自加1

if(Countor1==2) //若累計滿2次,即計時滿100ms

D1=~D1; //按位取反操作,将P2.0引腳輸出電平取反

Countor1=0; //将Countor1清0,重新從0開始計數

if(Countor2==8) //若累計滿8次,即計時滿400ms

D2=~D2; //按位取反操作,将P2.1引腳輸出電平取反

Countor2=0; //将Countor1清0,重新從0開始計數

TH1=(65536-46083)/256; //定時器T1的高8位重新賦初值

TL1=(65536-46083)%256; //定時器T1的高8位重新賦初值

用計數器T1的中斷控制蜂鳴器發出1KHz音頻

sbit sound=P1^7; //将sound位定義為P1.7引腳 注意:對照原理圖,原理圖不清楚的放大看。

TMOD=0x10; //TMOD=0001 000B,使用定時器T1的模式1

TH1=(65536-921)/256; //定時器T1的高8位賦初值

TL1=(65536-921)%256; //定時器T1的高8位賦初值

sound=~sound;

TH1=(65536-921)/256; //定時器T1的高8位重新賦初值

TL1=(65536-921)%256; //定時器T1的高8位重新賦初值

用定時器T1中斷控制LED與蜂鳴器

編輯:渡江雲

繼續閱讀