|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請(qǐng)教單片機(jī)的音樂(lè)播放程序該怎么編寫 |
| 作者:aptitude 欄目:單片機(jī) |
大蝦好,請(qǐng)教誰(shuí)知道單片機(jī)的音樂(lè)程序怎么編寫呢,我想用無(wú)源蜂鳴器播放類似救護(hù)車的聲音,不知道能實(shí)現(xiàn)不,請(qǐng)指教 |
| 2樓: | >>參與討論 |
| 作者: tyw 于 2006/2/6 9:41:00 發(fā)布:
更換下例中數(shù)據(jù)試一下 把半音都造出來(lái),反復(fù)演奏連續(xù)的半音階,節(jié)拍調(diào)快點(diǎn) 會(huì)玩MIDI的話,裝一套CakeWalk7.0,在里面先寫音譜,試效果,確定后把所用到的音符做到下例的TABLE中去就行了.以前做游戲機(jī)音效時(shí),都是用這方法先試音的. 這是本人一個(gè)產(chǎn)品中的音樂(lè)單元,很完整,供愛(ài)好者參考. 稍加修改還能做成雙音的. ORG 0000H AJMP CSH ;主程序進(jìn)入點(diǎn) ORG 000BH LJMP TIM0 ;定時(shí)中斷T0入口 ; ;********** ;* 初始化 * ;********** ; ORG 0020H CSH: MOV R0,#7FH ;內(nèi)部RAM(00H~7FH)清零 CSH1: MOV @R0,#00H DJNZ R0,CSH1 MOV SP,#60H ;堆棧60H~7FH,【使用89C51】 MOV TMOD,#01H ;TMOD=11H,T0作16位計(jì)數(shù)器(4M晶振) CLR TCON.4 ;T0禁止動(dòng)作 SETB IE.1 ;T0允許中斷 SETB PT0 ;T0中斷優(yōu)先 SETB IE.7 ;系統(tǒng)允許中斷 ; ;********** ;* 主程序 * ;********** ; MAIN: MOV 5CH,#00 ;取簡(jiǎn)碼譜指針 LCALL MUSIC MOV 5CH,#49 ;取簡(jiǎn)碼譜指針 LCALL MUSIC MOV 5CH,#66 ;取簡(jiǎn)碼譜指針 LCALL MUSIC MOV 5CH,#100 ;取簡(jiǎn)碼譜指針 LCALL MUSIC MOV 5CH,#108 ;取簡(jiǎn)碼譜指針 LCALL MUSIC MOV 5CH,#136 ;取簡(jiǎn)碼譜指針 LCALL MUSIC MOV 5CH,#174 ;取簡(jiǎn)碼譜指針 LCALL MUSIC AJMP MAIN ; ;************************* ;* 音樂(lè)子程序 MUSIC * ;* 入口: 5CH←簡(jiǎn)碼譜指針 * ;************************* ; MUSIC: MOV A,5CH ;簡(jiǎn)碼譜指針裝入A MOV DPTR,#TABLE ;至TABLE取簡(jiǎn)碼 MOVC A,@A+DPTR MOV R2,A ;取到的簡(jiǎn)碼暫存于R2 JZ END1 ;是否取到00(結(jié)束碼)? ANL A,#0FH ;不是,則取低四位(節(jié)拍碼) MOV R6,A ;將節(jié)拍碼存入R6 MOV A,R2 ;將取到的簡(jiǎn)碼再裝入R2 SWAP A ;高低四位交換 ANL A,#0FH ;取低四位(音符碼) JNZ SING ;取到的音符碼是否為0? CLR TR0 ;是,則不發(fā)音 AJMP D1 ;跳到D1 ; SING: DEC A ;取到的音符碼減1 MOV 4BH,A ;存入(4BH) RL A ;乘2 MOV DPTR,#TABLE1 ;至TABLE1取相對(duì)的高字節(jié)計(jì)數(shù)值 MOVC A,@A+DPTR MOV TH0,A ;取到的高字節(jié)存入TH0 MOV 4AH,A ;取到的高字節(jié)存入(4AH) MOV A,4BH ;再裝入取到的音符碼 RL A ;乘2 INC A &n |
|
| 3樓: | >>參與討論 |
| 作者: hotpower 于 2006/2/6 9:49:00 發(fā)布:
好東西,要用PWM可能更省心了 |
|
| 4樓: | >>參與討論 |
| 作者: aptitude 于 2006/2/6 10:10:00 發(fā)布:
非常感謝,小弟先試試,謝謝 |
|
| 5樓: | >>參與討論 |
| 作者: tyw 于 2006/2/6 10:44:00 發(fā)布:
音階關(guān)系計(jì)算方法 半音階之間為12√2 (2開(kāi)12次方根),為1.0593631倍. 例如鋼琴中央組的 A=440Hz #A=440Hz x 1.059 =466.16Hz B=440Hz x 1.059 x 1.059 =493.88Hz C=440Hz x 1.059 x 1.059 x 1.059=523.25Hz |
|
| 6樓: | >>參與討論 |
| 作者: 初級(jí)階級(jí) 于 2006/2/6 17:41:00 發(fā)布:
能否將兒歌之類的歌用單片機(jī)"唱"出來(lái)呢? 如果真的能,那可以把很多歌曲編到單片機(jī)中唱出來(lái)!那也蠻好玩的! |
|
| 7樓: | >>參與討論 |
| 作者: tyw 于 2006/2/6 18:53:00 發(fā)布:
可以的,關(guān)鍵在于寫TABLE,把音高,時(shí)值逐個(gè)填入TABLE表 例子中給出了幾段音樂(lè) TABLE: ;【00】 DB 98H,02H,B4H,01H,94H,01H,68H,02H,94H,01H DB 64H,01H,48H,02H,64H,01H,44H,01H,28H,02H DB 64H,01H,94H,01H,B4H,01H,94H,01H,B4H,01H DB 94H,01H,B4H,01H,D4H,01H,94H,01H,64H,01H DB 44H,01H,64H,01H,98H,02H,01H,01H,00H ;【49】 DB A4H,02H,84H,02H,A4H,02H,84H,02H,D8H,04H DB C8H,01H,01H,01H,01H,01H,00H ;【66】 DB 42H,52H,62H,72H,82H,92H,A2H,B2H,42H,52H DB 62H,72H,82H,92H,A2H,B2H,00H ;【100】 DB 61H,81H,B1H,D1H,B1H,81H,61H,00H ;【108】 DB 11H,41H,61H,81H,61H,41H,11H,00H ;【136】 DB 24H,04H,34H,04H,44H,04H,54H,04H,64H,04H,44H,04H,64H,04H,94H,04H DB 83H,01H,93H,01H,83H,01H,63H,01H,46H,02H,66H,02H DB 91H,21H,91H,21H,91H,21H,91H,21H,94H,00H ;【174】 DB 94H,04H,A4H,04H,B4H,04H,C4H,04H,D4H,04H DB B4H,04H,D8H,08H,C4H,04H,F4H,04H,CCH,00H ; |
|
| 8樓: | >>參與討論 |
| 作者: 、 于 2010/11/23 17:11:31 發(fā)布:
有沒(méi)有用c寫的啊 匯編很難的啊 看不懂啊 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |