STM32 使用STM32F103控制无源蜂鸣器发声播放音乐
使用STM32控制無源蜂鳴器發聲播放音樂
【注:學習STM32總結做的筆記,大神勿噴。有不足之處還望不吝賜教。
-----本篇大部分轉載而來,有侵權請聯系作者,謝謝?!?br /> 原博客地址:
https://blog.csdn.net/fanxp66/article/details/80264700
https://blog.csdn.net/SNEZ_H/article/details/71172010
一、無源蜂鳴器和有源蜂鳴器
有源蜂鳴器內含振蕩源,只要一通電就發聲,但發生頻率固定,音色單一;無源蜂鳴器內部不含振蕩源,內部結構相當于電磁場揚聲器,可以通過給他輸出一定頻率的信號才能發聲。
人耳能聽到的頻率范圍在20Hz–20kHz之間,通過STM32的GPIO引腳快速切換高低電平輸出就能實現無源蜂鳴器的發聲,切換的頻率不同,發出的音調就不一樣。
二、音樂播放的實現
一段音樂就是不同頻率的聲音按一定的時間節拍轉換發出。所以音樂包含音調和節拍信息。
程序中首先準備音頻數據表:
// 低Si Do Re Mi Fa So La Si ?高Do?高Re?高Mi?高Fa?高So 無
uc16 tone[] ={247,262,294,330,349,392,440,294,523, 587, 659, 698, 784, 1000};
u8 music[]={ 5,5,6,8,7,6,5,6,13,13,……};//音調
u8 time[] = { 2,4,2,2,2,2,2,8,4, 4, ……}; //節拍時間
依次從音調數組中取music[i],然后根據music[i]的值在tone數組中得到該音的發聲頻率(tone[music[i]]),調用sound函數控制蜂鳴器發聲,聲音的發聲時間有time數組控制。
如果我們能夠控制好頻率和節拍,那就有可能演奏出動聽的音樂。因此,我們首先需要搞清楚各音調的頻率,具體見下表(分別為低音、中音和高音):
我們知道了音調的頻率后,下一步就是控制音符的演奏時間。每個音符都會播放一定的時間,這樣才能構成一首優美的曲子,而不是生硬的一個調的把所有的音符一股腦的都播放出來。音符節奏分為一拍、半拍、1/4拍、1/8拍,我們規定一拍音符的時間為1;半拍為0.5;1/4拍為0.25;1/8拍為0.125……,所以我們可以為每個音符賦予這樣的拍子播放出來,音樂就成了。
從簡譜看,該音樂是C調的,這里的各音符對應的頻率對應的是上表中C調的部分。另外,該音樂為四分之三拍,每個對應為1拍。(我們知道,音符節奏分為一拍、半拍、1/4拍、1/8拍,我們規定一拍音符的時間為1;半拍為0.5;1/4拍為0.25;1/8拍為0.125……,)幾個特殊音符說明如下:
第一,普通音符。如第一個音符5,對應頻率393,占1拍。
第二,帶下劃線音符,表示0.5拍;兩個下劃線是四分之一拍(0.25)。
第三,有的音符后帶一個點,表示多加0.5拍,即1+0.5。
第四,有的音符后帶一個“—”,表示多加1拍,即1+1。
第五,有的兩個連續的音符上面帶弧線,表示連音,可以稍微改下連音后面那個音的頻率,比如減少或增加一些數值(需自己調試),這樣表現會更流暢,其實不做處理,影響也不大。
** 注:因為我不會看樂譜,編的并不怎么樣,所以。。。如果要改成別的歌曲,改時間和音調就可以了。**
源碼地帶:
beep.c
beep.h
#ifndef __BEEP_H #define __BEEP_H #include "sys.h"#define BEEP PAout(11) void BEEP_Init(void); void Sound(u16 frq); void Sound2(u16 time); void play_music(void); void play_successful(void); void play_failed(void);#endifmain.c
#include "sys.h" #include "delay.h" #include "usart.h" #include "key.h" #include "led.h" #include "beep.h" int main(void){ delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); KEY_Init(); LED_Init(); BEEP_Init(); while(1){ play_music(); } }文件源碼下載鏈接:https://download.csdn.net/download/qq_28056277/10853285
https://download.csdn.net/download/qq_28056277/11429148
(考慮到積分越下載越貴的問題,就再上傳了一次)
轉載總結文章,若有侵權,請聯系作者刪除,謝謝。
總結
以上是生活随笔為你收集整理的STM32 使用STM32F103控制无源蜂鸣器发声播放音乐的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SiTime 硅晶振的可靠性MTBF计算
- 下一篇: 2022年最新山东建筑施工电工(建筑特种