導航:首頁 > 操作系統 > 單片機蜂鳴器音樂原理

單片機蜂鳴器音樂原理

發布時間:2025-06-11 02:19:04

① 怎麼使用單片機控制蜂鳴器發聲

蜂鳴器有兩種,一種是無源的,另一種為有源的,確認的方法為:1)看封裝,如果引腳端為PCB板的,一般為無源的,引腳端為樹脂灌封的,一般為有源的。2)加電實驗,用5V電壓點擊接觸引腳時,只有「噠噠」聲的為無源的,發出一個單音響的為有源的。
兩種蜂鳴器用單片機的控制方法是一樣的,對於無源的,要求單片機送出一組斷續的音頻信號,使蜂鳴器按要求發聲,對於有源蜂鳴器,要求單片機送出一組斷續的電脈沖信號,用於分斷蜂鳴器的通斷狀態,而使有源蜂鳴器發出「嘀...嘀」,「嘀...嘀...嘀」等希望的聲音。
無源蜂鳴器舉例:
/**********************************************************************/
//聲響驅動程序 BELL--整點報時(鬧鍾音兩短一長)
/**********************************************************************/
void Beep(void)
{
uint a;//定義變數用於發聲的長度設置
uchar b;
for(b=2;b>0;b--){
for(a=200;a>0;a--){//第一個聲音的長度
beep = ~beep;//取反揚聲器驅動口,以產生音頻
Delay_1us(500);//音調設置延時
}
DelayM(1000);
}
for(a=1000;a>0;a--){//第一個聲音的長度
beep = ~beep;//取反揚聲器驅動口,以產生音頻
Delay_1us(500);//音調設置延時
}
beep = 1;//音樂結束後揚聲器關閉
}
有源蜂鳴器舉例:
void main(void)
{
NB=0;//有源蜂鳴器初始不送電
while(1)
{
NB=0;//有源蜂鳴器斷電

delay(300);//停一段時間
NB=1;//有源蜂鳴器送電
delay(1000);//響一段時間
}
}

② 如何編寫51單片機音樂程序

一、總體原理:
樂曲中不同的音符,實質就是不同頻率的聲音。通過單片機產生不同的頻率的脈沖信號,
經過放大電路,由蜂鳴器放出,就產生了美妙和諧的樂曲。
二、單片機產生不同頻率脈沖信號的原理:
1)要產生音頻脈沖,只要算出某一音頻的脈沖(1/頻率),然後將此周期除以2,即為半周
期的時間,利用定時器計時這個半周期的時間,每當計時到後就將輸出脈沖的I/O 反相,然
後重復計時此半周期的時間再對I/O 反相,就可以在I/O 腳上得到此頻率的脈沖。
2)利用8051 的內部定時器使其工作在計數器模式MODE1 下,改變計數值TH0 及TL0 以
產生不同頻率的方法如下:
例如,頻率為523Hz,其周期天/523 S=1912uS,因此只要令計數器計時956uS/1us=956,
在每計數956 次時就將I/O 反接,就可得到中音DO(532Hz)。
計數脈沖值與頻率的關系公式如下:
N=Fi/2/Fr
(N:計數值,Fi:內部計時一次為1uS,故其頻率為1MHz,Fr:要產生的頻率)
三、其計數值的求法如下:
T=65536-N=65536-Fi/2/Fr
計算舉例:
設K=65536,F==Fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)
的計數值。
T=65536-N=65536-Fi/2/Fr=6/2/Fr=65536-/Fr
低音DO 的T=65536-/262=63627
中音DO 的T=65536-/523=64580
高音DO 的T=65536-/1047=65059
參考程序:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit BEEP=P3^7;
// 生日快樂歌的音符頻率表,不同頻率由不同的延時來決定
uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,
212,212,106,126,159,169,190,119,119,126,159,142,159,0};
// 生日快樂歌節拍表,節拍決定每個音符的演奏長短
uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,
9,3,12,12,12,12,12,9,3,12,12,12,24,0};
// 延時
void DelayMS(uint x)
{
uchar t;
while(x--) for(t=0;t<120;t++);
}
// 播放函數
void PlayMusic()
{
uint i=0,j,k;
while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)
{ //播放各個音符,SONG_LONG 為拍子長度
for(j=0;j<SONG_LONG[i]*20;j++)
{
BEEP=~BEEP;
//SONG_TONE延時表決定了每個音符的頻率
for(k=0;k<SONG_TONE[i]/3;k++);
}
DelayMS(10);
i++;
}
}
void main()
{
BEEP=0;
while(1)
{
PlayMusic(); //播放生日快樂
DelayMS(500); //播放完後暫停一段時間
}
}

③ 關於蜂鳴器報警原理的相關論文

蜂鳴器是一種一體化結構的電子訊響器,本文介紹如何用單片機驅動蜂鳴器,他廣泛應用於計算機、列印機、復印機、報警器、電話機等電子產品中作發聲器件。蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。
電磁式蜂鳴器由振盪器、電磁線圈、磁鐵、振動膜片及外殼等組成。接通電源後,振盪器產生的音頻信號電流通過電磁線圈,使電磁線圈產生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發聲。

壓電式蜂鳴器主要由多諧振盪器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。多諧振盪器由晶體管或集成電路構成,當接通電源後(1.5~15V直流工作電壓),多諧振盪器起振,輸出1.5~2.5kHZ的音頻信號,阻抗匹配器推動壓電蜂鳴片發聲。

下面是電磁式蜂鳴器的外形圖片及結構圖。。。電磁式蜂鳴器實物圖:電磁式蜂鳴器結構示意圖:圖 1圖 2 電磁式蜂鳴器內部構成:1. 防水貼紙
2. 線軸
3. 線圈
4. 磁鐵 5. 底座
6. 引腳
7. 外殼
8. 鐵芯9. 封膠
10. 小鐵片
11. 振動膜
12. 電路板
一、電磁式蜂鳴器驅動原理

蜂鳴器發聲原理是電流通過電磁線圈,使電磁線圈產生磁場來驅動振動膜發聲的,因此需要一定的電流才能驅動它,單片機IO引腳輸出的電流較小,單片機輸出的TTL電平基本上驅動不了蜂鳴器,因此需要增加一個電流放大的電路。S51增強型單片機實驗板通過一個三極體C8550來放大驅動蜂鳴器,原理圖見下面圖3:

S51增強型單片機實驗板蜂鳴器驅動原理圖:圖 3
如圖所示,蜂鳴器的正極接到VCC(+5V)電源上面,蜂鳴器的負極接到三極體的發射極E,三極體的基級B經過限流電阻R1後由單片機的P3.7引腳控制,當P3.7輸出高電平時,三極體T1截止,沒有電流流過線圈,蜂鳴器不發聲;當P3.7輸出低電平時,三極體導通,這樣蜂鳴器的電流形成迴路,發出聲音。因此,我們可以通過程序控制P3.7腳的電平來使蜂鳴器發出聲音和關閉。

程序中改變單片機P3.7引腳輸出波形的頻率,就可以調整控制蜂鳴器音調,產生各種不同音色、音調的聲音。另外,改變P3.7輸出電平的高低電平占空比,則可以控制蜂鳴器的聲音大小,這些我們都可以通過編程實驗來驗證。

二、蜂鳴器列子 下面我們舉幾個簡單的單片機驅動蜂鳴器的編程和電路設計的列子。

1、簡單的蜂鳴器實驗程序:本程序通過在P3.7輸出一個音頻范圍的方波,驅動實驗板上的蜂鳴器發出蜂鳴聲,其中DELAY延時子程序的作用是使輸出的方波頻率在人耳朵聽覺能力之內的20KHZ以下,如果沒有這個延時程序的話,輸出的頻率將大大超出人耳朵的聽覺能力,我們將不能聽到聲音。更改延時常數,可以改變輸出頻率,也就可以調整蜂鳴器的音調。大家可以在實驗中更改#228為其他值,聽聽蜂鳴器音調的改變。

2、倒車警示音實驗程序:我們知道各種卡車、貨櫃車在倒車時候,會發出倒車的蜂鳴警示提示音,同時警示黃燈也同步閃爍,提醒後面的人或車輛注意。本實驗常式就實現倒車警示功能,通過實驗板上的蜂鳴器發出警示音,同時通過實驗板上P1.2和P1.5上的兩個黃色發光二極體來發出黃色警示燈。

3、「叮咚」電子門鈴實驗程序:常見的家用電子門鈴在有客人來訪時候,如果按壓門鈴按鈕時,室內會發出「叮咚」聲音,本實驗程序模擬電子門鈴的發音,當我們按壓實驗板上的K1按鈕時候,蜂鳴器發出「叮咚」音樂聲,是一個比較實用的程序。

④ 單片機蜂鳴器問題 請大蝦舉個簡單例子來說明如何實現發出不同音調的音樂

用蜂鳴器產生音樂很詭異。大家都知道,單片機上的蜂鳴器都是加高低電平後,才有聲音的。從理論上來說,聲音是不具有頻率,音色,等。對於單片機來說,用一個IO口的高低電平變化來產生的不同平率帶動蜂鳴器產生各種生音事可以實現的。
這個主要用定時器1CTC模式,啟動iv_TIMER1_COMPA中斷,然後得到一定的歌曲平率參數就可以搞定。我搜到個程序,如下;

/****************************************
* 用M16單片機I/O口生成模擬音樂 *
* 功 能:用I/O口生成模擬音樂 *
* 時鍾頻率:外部7.3728M *
* 設 計:tonghe *
* 修改日期:2007年04月13日 *
* 編譯環境:ICC-AVR6.31 *
* 實驗環境:阿發的M16學習板 *
* 發 聲:無源蜂鳴器接於PD5 *
* 結 果:試驗通過 *
****************************************/
#include <iom16v.h>
#include <macros.h>
#include "wo_ni.h" //包含音樂文件
#include "delay.h" //延時文件

#define uchar unsigned char
#define uint unsigned int

/************************************
* 埠初始化函數 *
************************************/
void port_init(void)
{
PORTD=0x20; //蜂鳴器介面初始化為高
DDRD=0x20; //蜂鳴器介面為輸出
}

/**********************************
*定時器1中斷入口函數:產生方波發聲*
**********************************/
#pragma interrupt_handler timer1:iv_TIMER1_COMPA
void timer1(void) //定時器1中斷入口
{
PORTD^=(1<<5); //產生方波,發聲
}
/***********************************
* 音樂產生函數 *
* 功能:輸出頻率為x的方波,延時y MS*
* 范圍:x:100-20000Hz,0:不發聲 *
* y:0-65536 MS *
***********************************/
void sound(uint i)
{
uint x;
x=i; //取音樂的頻率數據
if(x!=0)
{
x=3686400/x; //數據計算
OCR1A=x; //比較值賦值
TCCR1B = 0x09; //允許比較反轉輸出
}
else
{
TCCR1B = 0x00; //頻率為0,休止符,不發聲
}
}

/******************************
* 主函數 *
******************************/
void main(void)
{
uchar i=0;
port_init();
TCCR1A = 0x40; //將T/C1配置為CTC模式,OC1A取反:產生音樂
TIMSK |= (1<<OCIE1A); //開啟比較匹配中斷
SEI(); //開總中斷
while(1)
{
TCCR1B = 0x09; //開啟比較匹配
while(music_data[i][1]!=0) //等待最後一個音符到來
{
sound(music_data[i][0]); //輸出音符
delay_ms(music_data[i][1]);//節拍延時
TCCR1B = 0x00; //奏完一個音符停止
PORTD|=(1<<5); //關閉蜂鳴,保護喇叭
i++; //准備一下個音符
delay_ms(5); //演奏
}
TCCR1B = 0x00;
PORTD|=(1<<5); //關閉蜂鳴,保護喇叭
delay_ms(4000);
i=0;
}
}

//////頭文件2
flash unsigned int music_data[][2]=
{
{587,800},{698,800},{466,1600},{523,800},{587,800},{349,1600},
{466,800},{523,800},{587,800},{698,800},{523,3200},{587,800},
{698,800},{466,1600},{523,800},{587,800},{392,1600},{523,800},
{349,800},{523,800},{587,800},{466,1600},{784,1600},{698,1600},
{784,1600},{466,1600},{587,800},{392,800},{587,1200},{698,400},
{523,3200},{587,800},{698,800},{466,1600},{523,800},{587,800},
{392,1600},{523,800},{349,800},{523,800},{587,800},{466,3200},
{ 0, 0}
};

#pragma data:data

//頭文件3
/****************************************
* 函數名稱: void delay_us(uchar i) *
* 函數功能:延時函數 *
* 晶振頻率:7.3728MHZ *
****************************************/
void delay_us(unsigned int i)
{
while(i--)
{
NOP();
NOP();
}
}

/****************************************
* 函數名稱: void delay_ms(uint i) *
* 函數功能:延時函數 *
* 晶振頻率:7.3728MHZ *
* 入口參數:i mS *
****************************************/
void delay_ms(unsigned int i)
{
unsigned int a;
for(;i;i--)
{
for(a=1052;a;a--)
{;}
}
}
你自己組合下這些程序,把PD5接蜂鳴器的介面。會很奇妙的。
有疑問聯系

閱讀全文

與單片機蜂鳴器音樂原理相關的資料

熱點內容
查魔獸伺服器ip地址 瀏覽:120
安卓4為什麼被淘汰 瀏覽:860
想買一個阿里雲的伺服器要多少錢 瀏覽:411
從程序員到架構師之路 瀏覽:550
androidui架構 瀏覽:474
元通炒股公式源碼 瀏覽:960
酯化循環氣壓縮機用什麼驅動 瀏覽:58
java搜索圖片 瀏覽:571
dns伺服器地址總是自動變換 瀏覽:970
android數據包開發 瀏覽:213
k鄰近搜索演算法brute 瀏覽:294
微軟雲如何開伺服器 瀏覽:29
心體與性體pdf 瀏覽:196
phpnullisset 瀏覽:793
加密相冊解密到照片庫在哪 瀏覽:375
php變數前加 瀏覽:813
緩解壓力最好的坐墊 瀏覽:138
51單片機ret 瀏覽:777
python廣度優先有向權值圖 瀏覽:874
程序員是技術 瀏覽:252