利用T1控制發出1kHz的音頻信號
一、設計要求
1、利用定時器T1的中斷來使P1.7控制蜂鳴器發出1kHz的音頻信號。
2、系統時鐘頻率為12MHz。
二、技術路線
利用定時器T1的中斷來使P1.7控制蜂鳴器發出1kHz的音頻信號,驅動蜂鳴器發聲。系統時鐘為12MHz。方波音頻信號的周期為1ms,因此T1的定時中斷時間為0.5ms,進入中斷服務程序后,對P1.7求反。
三、系統原理圖
圖1-1系統原理圖
如圖1-1所示把晶振,復位按鍵以及一些外圍電路如圖連接,組成AT89C51單片機的最小系統。定時器T1中斷控制P1.7引腳輸出頻率1kHz的音頻信號,驅動蜂鳴發聲。
四、仿真圖
圖1-2系統仿真圖
五、源程序
#include<reg51.h> //包含頭文件
sbit sound=P1^7; //將sound位定義為P1.7引腳
#define f1(a)(65536-a)/256 //定義裝入定時器高8位的時間常數
#define f2(a)(65536-a)%256//定義裝入定時器低8位的時間 常數
unsigned int i=500;
unsigned int j=0;
void main(void)
{
EA=1; //開關中斷
ET1=1; //允許定時器T1中斷
TMOD=0x10; //TMOD=0001 0000,使用T1的方式1定時
TH1=f1(i); //給定時器T1高8位賦初值
TL1=f2(i); //給定時器T1低8位賦初值
TR1=1; //啟動定時器T1
while(1)
{ //循環等待
i=460;
while(j<2000);
j=0;
i=360;
while(j<2000);
j=0;
}
}
void t1(void) interrupt 3 using 0 //定時器T1中斷函數
{
TR1=0; //關閉定時器T1
sound=~sound; //P1.7輸出求反
TH1=f1(i); //定時器T1的高8位重新賦初值
TL1=f2(i); //定時器T1的低8位重新賦初值
j++;
TR1=1; //啟動定時器T1
}
六、總結
通過這次課程設計使我懂得了理論與實際相結合,只有理論知識是遠遠不夠的,只有把所學的理論與實踐相結合,才能提高自己的實際動手能力和創立思考的能力。同時在設計過程中發現了自己的不足之處,對以前所學過的知識理解不夠深刻,掌握得不夠牢固……通過這次課程設計之后,一定要把以前所學過的知識重新溫故。
|