STM32學習過程記錄8 蜂鳴器

2021-10-02 19:58:16 字數 1473 閱讀 8254

原理就是這個:人之所以能聽見聲音,是因為聲音在震動。那麼不同的震動頻率帶給我們的就是不同的聲調。所以我們只需要知道每個音調的發聲頻率就可以用微控制器模擬出它的音調。

這是一張標準的音高與頻率的關係對照表:

我們只需要記住這一點,其中的就是八度音階,也就是我們的xx調,比如你熟悉的g大調就是我們的音級,也就是我們熟悉的do re mi

我們可以簡單的理解為:有很多很多台階,我們認為規定8個台階為一層。

我們在演奏的時候會規定基準調,就類似於零重力勢能點、零電位、零電勢點的選擇。假設我們規定了某個調是基準調,那麼這個簡譜裡的1就是這個調,然後234依次提高。比如我們規定了440hz是基準調,那麼這個譜子裡的2就是466hz、3就是493hz……

音調如同上圖,假設我們的1上面有乙個點,那它就比沒有點的1高八階(一度)。如果下面有乙個點,那它就低一度。比如假設我們的的c調do 1 是261.6hz 那麼 它頭上有個點就是523.2hz,它下面乙個點就是130.8hz。兩個點就再高(低)一度。

節拍數就是我們左上角"分數",比如2/4我們讀作"以乙個4分音符為1拍,每個小節兩拍"。

每一節結束後因該是有一段小豎線作為我們的小節線。

音符就是每乙個數字,但是數字的標記不同,就代表他發的音的長短不同。例如:1 這是乙個4分音符,假設它發1秒的音;1就是8分音符,它發0.5秒的音;1-就是2分音符,它發2秒的音。根據乙個音符下的-或者的數量不同,依次加倍減半。

例如小紅帽:它是2/4拍的。我們每乙個小節算出來應該是2個4分音符。所以我們來算算?

1 2 3 4 | 5 3 1 | 你看滿不滿足這個規則?

一秒鐘震動很多次,那麼一次我們需要的時間就是1/頻率。那麼我們就算出了其週期。那麼我們讓一半週期高電平,一半週期低電平,我們就得到了其一次震動。我們再用週期x頻率=1s就可以控制每個調的時間。

for

(i =

0; i < hz; i++

)//這是一秒乙個音 此時整乘除hz可以擴大縮小一拍的時間

#include

"stm32f10x.h"

#include

"sys.h"

u32 play_hz=

;u32 play_tone=

;u32 play_time=

;void

play

(u32 sta)}}

intmain

(void)}

}

STM32學習記錄 叫吧!蜂鳴器!

程式設計方法 庫函式 原理 stm32的io口輸出電流經過三極體放大後,驅動無源蜂鳴器工作。目標 讓蜂鳴器間隔兩秒發聲,led隨蜂鳴器一起工作。第一步 初始化與無源蜂鳴器相連的io口 void beep init void 第二步 初始化led 蜂鳴器工作時led點亮 void led init v...

STM32學習篇 蜂鳴器

思路與跑馬燈類似,還是通過位帶操作來實現某個io 口的輸出控制,beep 就直接代表了 pb8 的輸出狀態。我們只需要令 beep 1 就可以讓蜂鳴器發聲。直接上 beep.c include beep.h 初始化pb8為輸出口,並是能這個口的時鐘 led io初始化 void beep init ...

stm32蜂鳴器實驗

一 蜂鳴器的硬體連線 原理圖如下 二 蜂鳴器的實驗步驟 1.使能io口時鐘。呼叫rcc apb2periphcolckcmd 不同的io組,呼叫的時鐘使能函式不同。2.初始化io口模式。呼叫函式beep init 3.操作io口,輸出高低電平。三 示例 beep.h ifndef beep defi...