單片機驅動蜂鳴器電路?

2020-09-22 18:55:45
如題

Beihai人力資源

2020-09-23 04:20:01

單片機驅動蜂2113鳴器電路如下

    單片機驅動蜂鳴器電路?



    蜂鳴器經常用于電5261腦、打印機、萬用表這些設4102上做提示音,1653提示音一般也很簡單,就是簡單發出個聲音就行,我們用程序簡單做了個 4KHZ 頻率下的發聲和 1KHZ 頻率下的發聲程序代碼如下:

    #include

    sbit BUZZ = P1^6; //蜂鳴器控制引腳

    unsigned char T0RH = 0; //T0 重載值的高字節

    unsigned char T0RL = 0; //T0 重載值的低字節

    void OpenBuzz(unsigned int frequ);

    void StopBuzz();

    void main(){

    unsigned int i;

    TMOD = 0x01; //配置 T0 工作在模式 1,但先不啟動

    EA = 1;

    while (1){ //使能全局中斷

    OpenBuzz(4000); //以 4KHz 的頻率啟動蜂鳴器

    for (i=0; i<40000; i++);

    StopBuzz(); //停止蜂鳴器

    for (i=0; i<40000; i++);

    OpenBuzz(1000); //以 1KHz 的頻率啟動蜂鳴器

    for (i=0; i<40000; i++);

    StopBuzz(); //停止蜂鳴器

    for (i=0; i<40000; i++);

    }

    }

    /* 蜂鳴器啟動函數,frequ-工作頻率 */

    void OpenBuzz(unsigned int frequ){

    unsigned int reload;//計算所需的定時器重載值

    reload = 65536 - (11059200/12)/(frequ*2); //由給定頻率計算定時器重載值

    T0RH = (unsigned char)(reload >> 8); //16 位重載值分解為高低兩個字節

    T0RL = (unsigned char)reload;

    TH0 = 0xFF; //設定一個接近溢出的初值,以使定時器馬上投入工作

    TL0 = 0xFE;

    ET0 = 1; //使能 T0 中斷

    TR0 = 1; //啟動 T0

    }

    /* 蜂鳴器停止函數 */

    void StopBuzz(){

    ET0 = 0; //禁用 T0 中斷

    TR0 = 0; //停止 T0

    }

    /* T0 中斷服務函數,用于控制蜂鳴器發聲 */

    void InterruptTimer0() interrupt 1{

    TH0 = T0RH; //重新加載重載值

    TL0 = T0RL;

    BUZZ = ~BUZZ; //反轉蜂鳴器控制電平

    }

知識延展:

  1. 蜂鳴器從結構區分分為壓電式蜂鳴器和電磁式蜂鳴器。壓電式為壓電陶瓷片發音,電流比較小一些,電磁式蜂鳴器為線圈通電震動發音,體積比較小。

  2. 按照驅動方式分為有源蜂鳴器和無源蜂鳴器。這里的有源和無源不是指電源,而是振蕩源。有源蜂鳴器內部帶了振蕩源,如圖 9-8 所示中,給了 BUZZ 引腳一個低電平,蜂鳴器就會直接響。

  3. 而無源蜂鳴器內部是不帶振蕩源的,要讓他響必須給 500Hz~4.5KHz 之間的脈沖頻率信號來驅動它才會響。

  4. 有源蜂鳴器往往比無源蜂鳴器貴一些,因為里邊多了振蕩電路,驅動發音也簡單,靠電平就可以驅動,而無源蜂鳴器價格比較便宜,此外無源蜂鳴器聲音頻率可以控制,而音階與頻率又有確定的對應關系,因此就可以做出來“do re mi fa sol la si”的效果,可以用它制作出簡單的音樂曲目,比如生日歌、兩只老虎等等。

樂彤斐漢

2020-09-23 03:51:41

單片機驅動蜂2113器電路如下:
蜂鳴器經常用于電腦、5261打印機、萬4102用表這些設備上做提示音,提示音一般1653也很簡單,就是簡單發出個聲音就行,我們用程序簡單做了個
4KHZ
頻率下的發聲和
1KHZ
頻率下的發聲程序代碼如下:
#include
sbit
BUZZ
=
P1^6;
//蜂鳴器控制引腳
unsigned
char
T0RH
=
0;
//T0
重載值的高字節
unsigned
char
T0RL
=
0;
//T0
重載值的低字節
void OpenBuzz(unsigned
int
frequ);
void
StopBuzz();
void
main(){
unsigned
int
i;
TMOD
=
0x01;
//配置
T0
工作在模式
1,但先不啟動
EA
=
1;
while (1){
//使能全局中斷
OpenBuzz(4000);
//以
4KHz
的頻率啟動蜂鳴器
for
(i=0;
i<40000;
i++);
StopBuzz();
//停止蜂鳴器
for
(i=0;
i<40000;
i++);
OpenBuzz(1000);
//以
1KHz
的頻率啟動蜂鳴器
for
(i=0;
i<40000;
i++);
StopBuzz();
//停止蜂鳴器
for
(i=0;
i<40000;
i++);
}
}
/*
蜂鳴器啟動函數,frequ-工作頻率
*/
void
OpenBuzz(unsigned
int
frequ){
unsigned
int
reload;//計算所需的定時器重載值
reload
=
65536
-
(11059200/12)/(frequ*2);
//由給定頻率計算定時器重載值
T0RH
=
(unsigned
char)(reload
>>
8);
//16
位重載值分解為高低兩個字節
T0RL
=
(unsigned
char)reload;
TH0
=
0xFF;
//設定一個接近溢出的初值,以使定時器馬上投入工作
TL0
=
0xFE;
ET0
=
1;
//使能
T0
中斷
TR0
=
1;
//啟動
T0
}
/*
蜂鳴器停止函數
*/
void
StopBuzz(){
ET0
=
0;
//禁用
T0
中斷
TR0
=
0;
//停止
T0
}
/*
T0
中斷服務函數,用于控制蜂鳴器發聲
*/
void
InterruptTimer0() interrupt 1{
TH0
=
T0RH;
//重新加載重載值
TL0
=
T0RL;
BUZZ
=
~BUZZ;
//反轉蜂鳴器控制電平
}
知識延展:
蜂鳴器從結構區分分為壓電式蜂鳴器和電磁式蜂鳴器。壓電式為壓電陶瓷片發音,電流比較小一些,電磁式蜂鳴器為線圈通電震動發音,體積比較小。
按照驅動方式分為有源蜂鳴器和無源蜂鳴器。這里的有源和無源不是指電源,而是振蕩源。有源蜂鳴器內部帶了振蕩源,如圖
9-8
所示中,給了
BUZZ
引腳一個低電平,蜂鳴器就會直接響。
而無源蜂鳴器內部是不帶振蕩源的,要讓他響必須給
500Hz~4.5KHz
之間的脈沖頻率信號來驅動它才會響。
有源蜂鳴器往往比無源蜂鳴器貴一些,因為里邊多了振蕩電路,驅動發音也簡單,靠電平就可以驅動,而無源蜂鳴器價格比較便宜,此外無源蜂鳴器聲音頻率可以控制,而音階與頻率又有確定的對應關系,因此就可以做出來“do
re
mi
fa
sol
la
si”的效果,可以用它制作出簡單的音樂曲目,比如生日歌、兩只老虎等等。

單片機驅動蜂鳴器電路?

?