導語
蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于各類等電子產品中作發聲器件,相對于揚聲器控制簡單,方便使用。
臺式電腦的主機開機會"滴"一聲、洗衣機按下按鍵及洗衣完成都會有聲響,以上這些聲音都是通過蜂鳴器來發出的,通過這些可與用戶形成一定的交互。
蜂鳴器
分為壓電式蜂鳴器和電磁式蜂鳴器兩種,壓電式蜂鳴器通過壓電材料和金屬片兩端施加上一個電壓后,由于壓電效應,蜂鳴片就會產生機械變形而發出聲響。
電磁式蜂鳴器按照其內部是否集成了震蕩源可分為有源蜂鳴器,和無源蜂鳴器,利用電磁線圈對蜂鳴片的作用來發聲的電子響訊器。
其有源蜂鳴器由于內部集成了震蕩源,在蜂鳴器上電后就會以一定的頻率發出響聲。而無源蜂鳴器則需要使用方波去驅動它。其有源蜂鳴器價格高于無源蜂鳴器。
但無源蜂鳴器可控聲音頻率,達到一定程度的音樂盒效果。
我們經常使用的為有源式蜂鳴器,蜂鳴器作為電磁感性器件,其驅動需要較大的電流,而IO的輸出電流能力有限,因此需要搭配外圍電路對其進行控制,常見的方式有三極管。
通過三極管的使得蜂鳴器工作,同時在蜂鳴器兩端并聯二極管,以保證在關斷感性原件蜂鳴器時減小對電路的沖擊。
無源代碼
元器件是電路良好運行的基本保證,找元器件現貨上唯樣商城,原廠授權正品保障,品類齊全。
無源驅動
#include //此文件中定義了單片機的一些特殊功能寄存器
sbit beep= P1^5; //定義蜂鳴器的引腳
void Delay_10us(unsignedint time)
{
while(time--);
}
void Simulate_Pwm(unsignedchar period,unsignedchar duty)
{
unsignedchar low= period/100* duty;//低電平延時時間
unsignedchar high= period- low; //高電平延時時間
beep =0; //蜂鳴器IO電平置低
Delay_10us(low);//低電平延時時間
beep =1; //蜂鳴器IO電平置高
Delay_10us(high);//高電平延時時間
}
void main()
{
while(1)
{
//使用模擬PWM控制蜂鳴器
Simulate_Pwm(100,50); //周期100*10us,占空比50%——頻率:1KHz
}
}
元器件是電路良好運行的基本保證,找元器件現貨上唯樣商城,原廠授權正品保障,品類齊全。
兩只老虎
#include
sbit BUZZ= P1^5;//蜂鳴器控制引腳
unsignedint code NoteFrequ[]={//中音 1-7和高音 1-7對應頻率列表
523,587,659,698,784,880,988,//中音 1-7
1047,1175,1319,1397,1568,1760,1976//高音 1-7
};
unsignedint code NoteReload[]={//中音 1-7和高音 1-7對應的定時器重載值
65536-(11059200/12)/(523*2),//中音 1
65536-(11059200/12)/(587*2),//2
65536-(11059200/12)/(659*2),//3
65536-(11059200/12)/(698*2),//4
65536-(11059200/12)/(784*2),//5
65536-(11059200/12)/(880*2),//6
65536-(11059200/12)/(988*2),//7
65536-(11059200/12)/(1047*2),//高音 1
65536-(11059200/12)/(1175*2),//2
65536-(11059200/12)/(1319*2),//3
65536-(11059200/12)/(1397*2),//4
65536-(11059200/12)/(1568*2),//5
65536-(11059200/12)/(1760*2),//6
65536-(11059200/12)/(1976*2),//7
};
bit enable=1;//蜂鳴器發聲使能標志
bit tmrflag=0;//定時器中斷完成標志
unsignedchar T0RH=0xFF;//T0重載值的高字節
unsignedchar T0RL=0x00;//T0重載值的低字節
void PlayTwoTiger();
void main()
{
unsignedint i;
EA =1;//使能全局中斷
TMOD =0x01;//配置 T0工作在模式 1
TH0 = T0RH;
TL0 = T0RL;
ET0 =1;//使能 T0中斷
TR0 =1;//啟動 T0
while(1)
{
PlayTwoTiger();//播放樂曲--兩支老虎
for(i=0; i<40000; i++);?//停止一段時間?
}
}
/*兩只老虎樂曲播放函數 */
void PlayTwoTiger()
{
unsignedchar beat;//當前節拍索引
unsignedchar note;//當前節拍對應的音符
unsignedint time=0;//當前節拍計時
unsignedint beatTime=0;//當前節拍總時間
unsignedint soundTime=0;//當前節拍需發聲時間
//兩只老虎音符表
unsignedchar code TwoTigerNote[]={
1,2,3,1,1,2,3,1,3,4,5,3,4,5,
5,6,5,4,3,1,5,6,5,4,3,1,1,5,1,1,5,1,
};
//兩只老虎節拍表,4表示一拍,1就是 1/4拍,8就是 2拍
unsignedchar code TwoTigerBeat[]={
4,4,4,4,4,4,4,4,4,4,8,4,4,8,
3,1,3,1,4,4,3,1,3,1,4,4,4,4,8,4,4,8,
};
for(beat=0; beat//用節拍索引作為循環變量
{
while(!tmrflag);//每次定時器中斷完成后,檢測并處理節拍
tmrflag =0;
if(time==0)//當前節拍播完則啟動一個新節拍
{
note = TwoTigerNote[beat]-1;
T0RH = NoteReload[note]>>8;
T0RL = NoteReload[note];
//計算節拍總時間,右移 2位相當于除 4,移位代替除法可以加快執行速度
beatTime =(TwoTigerBeat[beat]* NoteFrequ[note])>>2;
//計算發聲時間,為總時間的 0.75,移位原理同上
soundTime = beatTime-(beatTime>>2);
enable =1;//指示蜂鳴器開始發聲
time++;
}
else//當前節拍未播完則處理當前節拍
{
if(time>= beatTime)//當前持續時間到達節拍總時間時歸零,
{//并遞增節拍索引,以準備啟動新節拍
time =0;
beat++;
}
else//當前持續時間未達到總時間時,
{
time++;//累加時間計數
if(time== soundTime)//到達發聲時間后,指示關閉蜂鳴器,
{//插入 0.25*總時間的靜音間隔,
enable =0;//用以區分連續的兩個節拍
}
}
}
}
}
/* T0中斷服務函數,用于控制蜂鳴器發聲 */
void InterruptTimer0() interrupt1
{
TH0 = T0RH;//重新加載重載值
TL0 = T0RL;
tmrflag =1;
if(enable)//使能時反轉蜂鳴器控制電平
BUZZ =~BUZZ;
else//未使能時關閉蜂鳴器
BUZZ =1;
}(twotigernote);)
元器件是電路良好運行的基本保證,找元器件現貨上唯樣商城,原廠授權正品保障,品類齊全。
//《世上只有媽媽好》數據表 元器件是電路良好運行的基本保證,找元器件現貨上唯樣商城,原廠授權正品保障,品類齊全。
codeunsignedchar sszymmh[]={
6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,5,2,1,
//一個音符有三個數字。前為第幾個音、中為第幾個八度、后為時長(以半拍為單位)。
//6, 2, 3分別代表:6,中音,3個半拍;
//5, 2, 1分別代表:5,中音,1個半拍;
//3, 2, 2分別代表:3,中音,2個半拍;
//5, 2, 2分別代表:5,中音,2個半拍;
//1, 3, 2分別代表:1,高音,2個半拍;
//
6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1,
6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,5,2,2,
5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,
2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0};
//《煙花易冷》
unsignedchar code song1[]={
5,2,1,3,2,1,2,2,2,2,2,4,3,2,1,1,2,1,2,2,1,3,2,4,
5,2,1,3,2,1,2,2,2,2,2,2,5,1,1,3,2,1,4,2,1,3,2,4,
3,2,1,3,2,1,7,2,1,3,2,1,2,2,2,1,2,1,7,1,1,1,2,1,
2,2,1,3,2,1,6,2,3,6,1,1,1,2,1,3,2,1,2,2,1,6,1,1,
1,2,1,7,1,1,5,1,1,6,1,6,5,2,1,3,2,1,2,2,2,2,2,1,
2,2,1,3,2,1,1,2,1,2,2,1,3,2,4,5,2,1,3,2,1,2,2,2,
2,2,1,2,2,1,5,1,1,3,2,1,4,2,1,3,2,4,3,2,1,3,2,1,
7,2,3,3,2,1,2,2,2,1,2,1,7,1,1,1,2,1,2,2,1,3,2,1,
6,2,3,6,1,1,1,2,1,3,2,1,2,2,1,6,1,1,1,2,1,7,1,2,
5,1,2,6,1,6,0,0,0};
有源的也可以試試!
-
51單片機
+關注
關注
274文章
5705瀏覽量
124081 -
蜂鳴器
+關注
關注
12文章
893瀏覽量
46055
發布評論請先 登錄
相關推薦
評論