6=440Hz,#6=440*1.059463=466.2Hz,7=440*1.059463*1.059463=493.9Hz?
#5=440÷1.059463=415.3Hz
5=440÷1.059463÷1.059463=392Hz
相鄰半音階的關系為1.059463倍,只要知道"A"=440Hz,即可算出其余半音階的頻率,比A高的用"*",比A低的用"÷"
1.059463=12√2(即2開12次根)
440Hz為鋼琴中央C組的A(即"6"音)
ok
這是本人一個產品中的音樂單元,很完整,供愛好者參考.?
???????ORG?????0000H
????????AJMP????CSH?????????????主程序進入點
????????ORG?????000BH
????????LJMP????TIM0????????????定時中斷T0入口
;
;**********
;*?初始化?*
;**********
;
????????ORG?????0020H
CSH:????MOV?????R0,#7FH?????????內部RAM(00H~7FH)清零
CSH1:???MOV?????@R0,#00H
????????DJNZ????R0,CSH1
????MOV?????SP,#60H?????????堆棧60H~7FH,【使用89C51】
????????MOV?????TMOD,#01H???????TMOD=11H,T0作16位計數器(4M晶振)
????????CLR?????TCON.4??????????T0禁止動作
????????SETB????IE.1????????????T0允許中斷
????????SETB????PT0?????????????T0中斷優先
????????SETB????IE.7????????????系統允許中斷
;
;**********
;*?主程序?*
;**********
;
MAIN:???MOV?????5CH,#00?????????取簡碼譜指針
????????LCALL???MUSIC
????MOV?????5CH,#49?????????取簡碼譜指針
????????LCALL???MUSIC
????MOV?????5CH,#66?????????取簡碼譜指針
????????LCALL???MUSIC
????MOV?????5CH,#100????????取簡碼譜指針
????????LCALL???MUSIC
????MOV?????5CH,#108????????取簡碼譜指針
????????LCALL???MUSIC
????MOV?????5CH,#136????????取簡碼譜指針
????????LCALL???MUSIC
????MOV?????5CH,#174????????取簡碼譜指針
????????LCALL???MUSIC
????????AJMP????MAIN
;
;*************************
;*?音樂子程序?MUSIC??????*
;*?入口:?5CH←簡碼譜指針?*
;*************************
;
MUSIC:??MOV?????A,5CH???????????簡碼譜指針裝入A
????????MOV?????DPTR,#TABLE?????至TABLE取簡碼
????????MOVC????A,@A+DPTR
????????MOV?????R2,A????????????取到的簡碼暫存于R2
????????JZ??????END1????????????是否取到00(結束碼)?
????????ANL?????A,#0FH??????????不是,則取低四位(節拍碼)
????????MOV?????R6,A????????????將節拍碼存入R6
????????MOV?????A,R2????????????將取到的簡碼再裝入R2
????????SWAP????A???????????????高低四位交換
????????ANL?????A,#0FH??????????取低四位(音符碼)
????????JNZ?????SING????????????取到的音符碼是否為0?
????????CLR?????TR0?????????????是,則不發音
????????AJMP????D1??????????????跳到D1
;
SING:???DEC?????A???????????????取到的音符碼減1
????????MOV?????4BH,A???????????存入(4BH)
????????RL??????A???????????????乘2
????????MOV?????DPTR,#TABLE1????至TABLE1取相對的高字節計數值
????????MOVC????A,@A+DPTR
????????MOV?????TH0,A???????????取到的高字節存入TH0
????????MOV?????4AH,A???????????取到的高字節存入(4AH)
????????MOV?????A,4BH???????????再裝入取到的音符碼
????????RL??????A???????????????乘2
????????INC?????A???????????????加1
????????MOVC????A,@A+DPTR???????至TABLE1取相對的低位
????????MOV?????TL0,A???????????取到的低字節存入TL0
????????MOV?????49H,A???????????取到的低字節存入(49H)
????????SETB????TR0?????????????啟動TIMER0
D1:?????CALL????DELAY???????????基本單位時間1/4拍187毫秒
????????INC?????5CH?????????????取簡碼譜指針加1
????????AJMP????MUSIC???????????取下一個碼
DD1:????RET
;
STOP:???NOP
;????JB??????P3.7,STOP1????在軟件延時中摻插做其他動作
;???????SETB????P2.7????????????P2.7←"1"
????????NOP
????????NOP
STOP0:??NOP
????????RET
STOP1:??NOP
;????JB??????P3.6,STOP0????在軟件延時中摻插做其他動作
;???????SETB????P2.6????????????P2.6←"1"
????????RET
;
END1:???CLR?????TR0?????????????停止TIMER0
????????RET
;
TIM0:???PUSH????A???????????????將A的值暫存于堆棧區
????????PUSH????PSW?????????????將PSW的值暫存于堆棧區
????????MOV?????TL0,49H?????????重設計數值
????????MOV?????TH0,4AH
????????CPL?????P1.7????????????將輸出端P1.1取反(P1.7接至無源蜂鳴器)
????????POP?????PSW?????????????至堆棧區取回PSW的值
????????POP?????A???????????????至堆棧區取回A的值
????????RETI????????????????????返回主程序
;
DELAY:??MOV?????R7,#02??????????187毫秒
D2:?????MOV?????R4,#24
D3:?????MOV?????R3,#48
????????DJNZ????R3,$
????????ACALL???STOP????????在軟件延時中摻插做其他動作
????????DJNZ????R4,D3
????????DJNZ????R7,D2
????????DJNZ????R6,DELAY????????決定節拍
????????RET
;?????????????????.5???.6?????.7????1
TABLE1:?DW??????65111,65150,65199,65217???4M晶振時的定時中斷時間常數
;??????????????????2????3?????4?????5?????若采用其它頻率,則要根據樂音的
????????DW??????65252,65283,65297,65323???頻率計算,例中央C的A音為440Hz,
;??????????????????6????7?????1`????2`????440Hz=2.273ms,把T0設置為2.273ms
????????DW??????65347,65367,65377,65394???中斷即可發出A音.
;?????????????????3`????4`????#6
????????DW??????65410,65417,65357
;
;***************************************************************
;*?音符代碼??1??2??3??4??5??6??7??8??9??A??B??C??D??E??F???0???*
;*?音高?????.5?.6?.7??1??2??3??4??5??6??7??1`?2`?3`?4`?5`?休止?*
;*-------------------------------------------------------------*
;*?節拍代碼??1???2???3??4???5??????6????8???A????C???F?????????*
;*?節拍?????1/4?2/4?3/4?1?1(1/4)?1(1/2)?2?2(1/2)?3?3(3/4)??????*
;*-------------------------------------------------------------*
;*?結束代碼?00H????????????????????????????????????????????????*
;*-------------------------------------------------------------*
;*?樂譜格式??每字節的高字節為音符代碼,低字節為節拍代碼?????????*??
;*-------------------------------------------------------------*?
;*?例子:????????⑴??⑵??⑶??⑷??⑸??⑹??⑺??⑻??⑼??⑽??⑾?????*
;*??????DB??????A4H,02H,84H,02H,A4H,02H,84H,02H,D8H,04H,00H????*
;*??????⑴?A→唱"7"?,?4→?1?拍?????????????????????????????????*
;*??????⑵?0→休止??,?2→2/4拍?????????????????????????????????*?
;*??????⑶?8→唱"5"?,?4→?1?拍?????????????????????????????????*?
;*??????⑷?0→休止??,?2→2/4拍?????????????????????????????????*?
;*??????⑸?A→唱"7"?,?4→?1?拍?????????????????????????????????*
;*??????⑹?0→休止??,?2→2/4拍?????????????????????????????????*
;*??????⑺?8→唱"5"?,?4→?1?拍?????????????????????????????????*?
;*??????⑻?0→休止??,?2→2/4拍?????????????????????????????????*
;*??????⑼?D→唱"3`",?8→?2?拍?????????????????????????????????*
;*??????⑽?0→休止??,?4→?1?拍?????????????????????????????????*
;*??????⑾?00H→樂曲結束???????????????????????????????????????*
;***************************************************************??
;
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
;
????END
單片機編音樂程序
- 單片機(614606)
- 音樂程序(10708)
相關推薦
單片機怎么寫入程序并燒錄程序?快收藏
單片機是一個微型的控制中心,相當于我們的電腦主機,而沒有燒錄的單片機是沒有任何功能的,那么如何把程序寫進深圳單片機。下次跟安瑪科技小編一起來看看。 首先你需要寫一個好的程序。不同的單片機使用不
2023-05-24 18:03:06
2274


基于51單片機的播放音樂實驗設計資料源程序文件
基于51單片機的播放音樂實驗設計資料源程序文件
經常看到一些剛學單片機的朋友對單片機演奏音樂比較有興趣,本人也曾是這
樣。在此,本人將就這方面的知識做一些簡介,但愿能對單片機演奏音樂比較有興
2023-04-27 15:06:25
0

基于51單片機的單片機播放音樂實驗設計資料源程序
經常看到一些剛學單片機的朋友對單片機演奏音樂比較有興趣,本人也曾是這
樣。在此,本人將就這方面的知識做一些簡介,但愿能對單片機演奏音樂比較有興
趣而又不知其解的朋友能有所啟迪。
一般說來
2023-04-26 15:38:17
0

單片機里的程序是如何運行?
我們想要理解單片機是如何運行程序的,我們首先需要了解單片機的組成,我們這里以80C51單片機為例來理解程序在單片機中是如何運行的。
2023-02-17 10:47:57
1944


關于單片機程序的執行過程
我們想要理解單片機是如何運行程序的,我們首先需要了解單片機的組成,我們這里以80C51單片機為例來理解程序在單片機中是如何運行的。
2022-10-12 15:02:10
3180

單片機音樂程序設計(含源程序代碼)
單片機音樂程序設計(含源程序代碼)利用單片機(或單板機)奏樂大概是無線電愛好者感興趣的問題之一。本文從單片機的基本發間實驗出發,談談音樂程序的設計原理,并給出具體實例,以供參考。 單片機的基本發音
2009-05-15 23:27:00
單片機中級項目12丨蜂鳴器音樂之八月桂花
] C51音樂程序(八月桂花) [功能] 通過單片機演奏音樂 /********************************************************...
2021-11-22 09:36:09
9

單片機音樂演奏(STC89C51)
/************************************************************************ [文件名] C51音樂程序(八月桂花) [功能] 通過單片機演奏音樂 接線說明:參考蜂鳴器實驗接線 /*************************************
2021-11-21 21:06:05
9

評論