天才教育網(wǎng)合作機構 > 培訓機構 >

                                                                                        東莞電工培訓網(wǎng)

                                                                                        歡迎您!
                                                                                        朋友圈

                                                                                        全國統一學(xué)習專(zhuān)線(xiàn) 9:00-21:00

                                                                                        位置:培訓資訊 > 單片機音樂(lè )程序設計

                                                                                        單片機音樂(lè )程序設計

                                                                                        日期:2010-01-02 10:48:55     瀏覽:315    來(lái)源:東莞電工培訓網(wǎng)

                                                                                        利用單片機(或單板機)奏樂(lè )大概是無(wú)線(xiàn)電愛(ài)好者感興趣的問(wèn)題之一。本文從單片機的基本發(fā)間實(shí)驗出發(fā),談?wù)勔魳?lè )程序的設計原理,并給出具體實(shí)例,以供參考。

                                                                                        單片機的基本發(fā)音實(shí)驗

                                                                                        我們知道,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來(lái)控制單處機某個(gè)口線(xiàn)的“高”電平或低電平,則在該口線(xiàn)上就能產(chǎn)生一定頻率的矩形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時(shí)程序控制“高”“低”電平的持續時(shí)間,就能改變輸出頻率,從而改變音調。

                                                                                        例如,要產(chǎn)生200HZ的音頻信號,按圖1接入喇叭(若屬臨時(shí)實(shí)驗,也可將喇叭直接接在P1口線(xiàn)上),實(shí)驗程序為:

                                                                                        其中子程序DEL為延時(shí)子程序,當R3為1時(shí),延時(shí)時(shí)間約為20us,R3中存放延時(shí)常數,對200HZ音頻,其周期為1/200秒,即5ms。這樣,當P1.4的高電平或低電平的持續時(shí)間為2.5ms,即R3的時(shí)間常數取2500/20=125(7DH)時(shí),就能發(fā)出200HZ的音調。將上述程序鍵入學(xué)習機,并持續修改R3的常數能感到音調的變化。樂(lè )曲中,每一音符對應著(zhù)確定的頻率,表1給出C調時(shí)各音符頻率及其對應的時(shí)間常數。讀者能根據表1所供給的常數,將其16進(jìn)制代碼送入R3,反復練習體會(huì )。根據表1能奏出音符。僅這還不夠,要準確奏出一首曲子,必須準確地控制樂(lè )曲節奏,即一音符的持續時(shí)間。

                                                                                        音符的節拍我們能用定時(shí)器T0來(lái)控制,送入不一樣的初值,就能產(chǎn)生不一樣的定時(shí)時(shí)間。便如某歌曲的節奏為每分鐘94拍,即一拍為0.64秒。其它節拍與時(shí)間的對應關(guān)系見(jiàn)表2。

                                                                                        但時(shí),由于T0的*定時(shí)時(shí)間只能為131毫秒,因此不可能直接用改變T0的時(shí)間初值來(lái)實(shí)現不一樣節拍。我們能用T0來(lái)產(chǎn)生10毫秒的時(shí)間基準,然后設置一個(gè)中斷計數器,通過(guò)判別中斷計數器的值來(lái)控制節拍時(shí)間的長(cháng)短。表2中也給出了各種節拍所對應的時(shí)間常數。例如對1/4拍音符,定時(shí)時(shí)間為0.16秒,對應的時(shí)間常數為16(即10H);對3拍音符,定時(shí)時(shí)間為1.92秒,對應時(shí)間長(cháng)數為192(即C0H)。

                                                                                        我們將每一音符的時(shí)間常數和其對應的節拍常數作為一組,按次序將樂(lè )曲中的所有常數排列成一個(gè)表,然后由查表程序依次取出,產(chǎn)生音符并控制節奏,就能實(shí)現演奏效果。此外,結束符和體止符能分別用代碼00H和FFH來(lái)表示,若查表結果為00H,則表示曲子終了;若查表結果為FFH,則產(chǎn)生對應的停頓效果。為了產(chǎn)生手彈的節奏感,在某些音符(例如兩個(gè)相同音符)音插入一個(gè)時(shí)間單位的頻率略有不一樣的音符。

                                                                                        下面給出程序序清單,可直接在TD-III型學(xué)習機上演奏,對其它不一樣型號的學(xué)習機,只需對應地改變一下地址即可。本程序演奏的是民歌“八月桂花遍地開(kāi)”,C調,節奏為94拍/分。讀者也能自行找出一首歌,按表1和表2給定的常數,將樂(lè )曲翻譯成碼表輸入機器,而程序不變。本實(shí)驗辦法簡(jiǎn)便,即使不懂音樂(lè )的人,將一首陌生的曲子翻譯成代碼也是易事,和著(zhù)機器的演奏學(xué)唱一首歌曲,其趣味無(wú)窮。

                                                                                        程序清單(略,請參看源程序的說(shuō)明)。

                                                                                        程序框圖如圖2所示。


                                                                                        <單片機音樂(lè )程序的設計圖>

                                                                                        本課由單片機教程網(wǎng)提供,有問(wèn)題指出.

                                                                                        硬件連接說(shuō)明:

                                                                                        隨便找一個(gè)仿真機或者什么單片機實(shí)驗板,只要能工作的就行,將程序輸入,運行,然后找個(gè)音箱(你計算機旁邊應當就有一對吧)撥出插頭,插頭的前端接在P1。0上,后面部分找根線(xiàn)接單片機的地,就應當有聲了,然后怎么改進(jìn)硬件連接就是你的事了。。。。

                                                                                        音樂(lè )程序匯編代碼代碼1 -------------Voice.asm--------------------------

                                                                                                ORG     0000H
                                                                                                LJMP    START
                                                                                                ORG     000BH
                                                                                                INC     20H     ;中斷服務(wù),中斷計數器加1
                                                                                                MOV     TH0,#0D8H
                                                                                                MOV     TL0,#0EFH  ;12M晶振,形成10毫秒中斷
                                                                                                RETI
                                                                                        START: 
                                                                                                MOV     SP,#50H
                                                                                                MOV     TH0,#0D8H
                                                                                                MOV     TL0,#0EFH
                                                                                                MOV     TMOD,#01H
                                                                                                MOV     IE,#82H
                                                                                        MUSIC0:
                                                                                                NOP
                                                                                                MOV     DPTR,#DAT      ;表頭地址送DPTR
                                                                                                MOV     20H,#00H        ;中斷計數器清0
                                                                                                MOV     B,#00H          ;表序號清0
                                                                                        MUSIC1:
                                                                                                NOP
                                                                                                CLR     A
                                                                                                MOVC    ;查表取代碼
                                                                                                JZ      END0     ;是00H,則結束
                                                                                              &nbs

                                                                                        如果本頁(yè)不是您要找的課程,您也可以百度查找一下:

                                                                                        奇米在线7777在线精品|国产成人精品免费视|精品无码不卡一区二区三区|国内综合精品午夜久久资源|亚洲视频在线观看..