紀(jì)瀚濤,王 偉
(沈陽工學(xué)院,遼寧 撫順 113122)
運(yùn)用MCS-51單片機(jī),使用I/O輸出音頻脈沖,脈沖經(jīng)放大濾波后,驅(qū)動(dòng)揚(yáng)聲器發(fā)聲。
若要產(chǎn)生f的頻率,則需于T時(shí)間內(nèi)(其中T=1/f),進(jìn)行吸、放各一次,換言之,磁鐵產(chǎn)生磁性、磁鐵失去磁性的時(shí)間各為T/2,成為半周期。
如圖1所示,由單片機(jī)的P3.7口聯(lián)接一個(gè)NPN型的三極管,并于蜂鳴器BUZ1相連接。當(dāng)P3.1口輸出信號(hào)時(shí),蜂鳴器會(huì)產(chǎn)生相應(yīng)頻率的奉命信號(hào)。由單片機(jī)的P3.7口輸出1 kHz的信號(hào),持續(xù)0.1 s,停止0.5s,則蜂鳴器發(fā)出0.1s的“嗶”的聲音。
要產(chǎn)生1kHz的頻率,則半周期為0.5ms,P3.7所送出的信號(hào)中,0.5 ms為高電平,0.5 ms為低電平。若0.5ms為高電平與0.5ms為低電平為一組信號(hào)(總共1ms),連續(xù)送出100組,即可得到1kHz的聲音約0.1s;停止輸出0.1s后,再送出0.5s的信號(hào)。
圖1
#include
sbit buzzer=P3^7;
void delay(int);
void pulse_BZ(int,int,int);//聲明蜂鳴器發(fā)聲函數(shù)main()
{ while(1)
{ pulse_BZ(100,1,1); //蜂鳴器發(fā)聲 100×
(0.5ms+0.5ms)=0.1s
delay(1000); //延遲 1000×0.5ms=0.5s
}
}
void delay(int x) //0.5ms延遲函數(shù)
{ int i,j;
for(i=0;i for(j=0;j<60;j++); } void pulse_BZ(int count,int TH,int TL) //蜂鳴器發(fā)聲函數(shù) { int i; for(i=0;i { buzzer=1; //輸出高電平 delay(TH); //延 遲 TH × 0.5 ms buzzer=0; //輸出低電平 delay(TL); //延遲 TL×0.5ms } } 運(yùn)用MCS-51單片機(jī)控制驅(qū)動(dòng)信號(hào)使蜂鳴器發(fā)出不同音調(diào)的聲音,聲音的頻率由延時(shí)程序控制,頻率越高,音調(diào)就越高;頻率越低,音調(diào)越低。通過單片機(jī)仿真軟件,該程序通過改變驅(qū)動(dòng)頻率,可以讓蜂鳴器發(fā)出不同頻率,不同長短的聲音。3 結(jié)語