我們知道,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單處機某個口線的“高”電平或低電平,則在該口線上就能產(chǎn)生一定頻率的矩形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時程序控制“高”“低”電平的持續(xù)時間,就能改變輸出頻率,從而改變音調(diào)。
例如,要產(chǎn)生200Hz的音頻信號,接入喇叭(若屬臨時實驗,也可將喇叭直接接在P1口線上),實驗程序為:
其中子程序DEL為延時子程序,當(dāng)R3為1時,延時時間約為20us,R3中存放延時常數(shù),對200HZ音頻,其周期為1/200秒,即5ms。這樣,當(dāng)P1.4的高電平或低電平的持續(xù)時間為2.5ms,即R3的時間常數(shù)取2500/20=125(7DH)時,就能發(fā)出200HZ的音調(diào)。將上述程序鍵入學(xué)習(xí)機,并不斷修改R3的常數(shù)可以感到音調(diào)的變化。
樂曲中,每一音符對應(yīng)著確定的頻率,表1給出C調(diào)時各音符頻率及其相應(yīng)的時間常數(shù)。
讀者可以根據(jù)表1所提供的常數(shù),將其16進制代碼送入R3,反復(fù)練習(xí)體會。根據(jù)表1可以奏出音符。僅這還不夠,要準(zhǔn)確奏出一首曲子,必須準(zhǔn)確地控制樂曲節(jié)奏,即一音符的持續(xù)時間。
音符的節(jié)拍我們可以用定時器T0來控制,送入不同的初值,就可以產(chǎn)生不同的定時時間。便如某歌曲的節(jié)奏為每分鐘94拍,即一拍為0.64秒。其它節(jié)拍與時間的對應(yīng)關(guān)系見表2。
但時,由于T0的最大定時時間只能為131毫秒,因此不可能直接用改變T0的時間初值來實現(xiàn)不同節(jié)拍。我們可以用T0來產(chǎn)生10毫秒的時間基準(zhǔn),然后設(shè)置一個中斷計數(shù)器,通過判別中斷計數(shù)器的值來控制節(jié)拍時間的長短。表2中也給出了各種節(jié)拍所對應(yīng)的時間常數(shù)。例如對1/4拍音符,定時時間為0.16秒,相應(yīng)的時間常數(shù)為16(即10H);對3拍音符,定時時間為1.92秒,相應(yīng)時間長數(shù)為192(即C0H)。
我們將每一音符的時間常數(shù)和其相應(yīng)的節(jié)拍常數(shù)作為一組,按順序?qū)非械乃谐?shù)排列成一個表,然后由查表程序依次取出,產(chǎn)生音符并控制節(jié)奏,就可以實現(xiàn)演奏效果。
此外,結(jié)束符和體止符可以分別用代碼00H和FFH來表示,若查表結(jié)果為00H,則表示曲子終了;若查表結(jié)果為FFH,則產(chǎn)生相應(yīng)的停頓效果。
為了產(chǎn)生手彈的節(jié)奏感,在某些音符(例如兩個相同音符)音插入一個時間單位的頻率略有不同的音符。
程序框圖如圖2所示。
下面給出程序序請單,可直接在TD-III型學(xué)習(xí)機上演奏,對其它不同型號的學(xué)習(xí)機,只需相應(yīng)地改變一下地址即可。本程序演奏的是民歌“八月桂花遍地開”,C調(diào),節(jié)奏為94拍/分。讀者也可以自行找出一首歌,按表1和表2給定的常數(shù),將樂曲翻譯成碼表輸入機器,而程序不變。本實驗方法簡便,即使不懂音樂的人,將一首陌生的曲子翻譯成代碼也是易事,和著機器的演奏學(xué)唱一首歌曲,其趣味無窮。
硬件連接說明:
隨便找一個仿真機或者什么單片機實驗板,只要能工作的就行,將程序輸入,運行,然后找個音箱(你計算機旁邊應(yīng)當(dāng)就有一對吧)撥出插頭,插頭的前端接在P1。0上,后面部分找根線接單片機的地,就應(yīng)當(dāng)有聲了,然后怎么改進硬件連接就是你的事了。
-
單片機
+關(guān)注
關(guān)注
6071文章
45260瀏覽量
660256 -
程序
+關(guān)注
關(guān)注
117文章
3832瀏覽量
84400
原文標(biāo)題:單片機音樂程序的設(shè)計原理解析
文章出處:【微信號:changxuemcu,微信公眾號:暢學(xué)單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
單片機燒錄原理是怎樣的?輝芒微單片機燒錄程序詳細步驟講解

怎么測單片機系統(tǒng)頻率
圖解單片機功能與應(yīng)用(完整版)
C51單片機及C語言知識點必備秘籍
單片機C語言編程寶典大全,初學(xué)必備【強推下載!】
單片機編程語言有哪些選擇
基于51單片機的手動數(shù)字時鐘

基于51單片機的遙控開關(guān)仿真(雙機通信)

基于51單片機的遙控音樂系統(tǒng)仿真

基于51單片機的多模式音樂跑馬燈

評論