| 單片機演奏音樂的實現 文章長度[ ] 加入時間[ 2007/7/14] 更新時間[ 2024/9/8 20:54:59] 級別[ 0] [ 評論] [ 收藏]
要單片機8031產生音頻脈沖,只要算出某一音頻的周期,然后用計數器計數1/2 此周期,計時到即將輸出脈沖的I/O管腳反相,再重計時輸出,既可在此I/O管腳得到此音頻的脈沖。
用8031內部定時/計數器計數,使其工作于模式1,要得到不同頻率的音頻信號,只要改變其計數值即可。如要產生頻率為f的音頻信號,計數器計數如下: N=2-10/f(采用6M晶振)
表1為C調各音符頻率與計數值N的對照表 一、硬件 用廣州單片機實驗室設計開發的ZH5101單板機,從其擴展口P1口的P1.0管腳拉出一根線,外加如右下圖所示的電路,就做成了會奏樂的單片機。 二、軟件設計 要輸出某一曲調,必須知道此曲調所包括的音符以及每個音符所占的節拍。本軟件將一個音符用一個字節的代碼表示。字節高四位代表簡碼,低四位代表音符的節拍數,設1/4拍所占時間為T,則一個節拍的時間為4T,如某一音符節拍為2/4拍,則聲音的延續時間為2T,在2T時間里,P1.0輸出的即為此音符的音頻脈沖。
 為使讀者能進一步了解此軟件的設計思想,現舉例如下: 如要輸出曲調|63 43 26|,此譜只有4個音符,可先對這4個音符建一計數值表TAB如表2,再根據每個音符的簡碼號極其節拍數依次將其代碼存于TAB1地址開始的存儲單元,高四位存簡碼號,低四位存節拍。如6的簡碼號為1,節拍數為2/4,即2T,則寫入的數據代碼為12H,高四位為1,低四位為2(2T),這樣根據以上曲調從TAB1開始處依次寫入:12H,32H,42H,32H,24H,14H便組成了音符代碼表(表3)。 程序運行時,從代碼表中依次讀出各音符代碼,根據高位的簡碼號從TAB表中取出相應的計數值送THO TLO,再根據低位的節拍數確定每個音符相應的延時時間。本程序流程圖如下: 如果讀者手頭沒有單片機實驗板,不妨向本站郵購。郵購價:¥110(包括郵費)
表1
音符 |
頻率(Hz) |
簡碼(N值) |
音符 |
頻率(Hz) |
簡碼(N值) |
低1 |
262 |
F117H |
#4 |
740 |
FAB8H |
#1 |
277 |
F1E5H |
中5 |
784 |
FB04H |
低2 |
294 |
F2B6H |
#5 |
831 |
FB4CH |
#2 |
311 |
F370H |
中6 |
880 |
FB8FH |
低3 |
330 |
F429H |
#6 |
932 |
FBCFH |
低4 |
349 |
F4CEH |
中7 |
988 |
FC0BH |
#4 |
370 |
F571H |
高1 |
1046 |
FC43H |
低5 |
392 |
F608H |
#1 |
1109 |
FC7AH |
#5 |
415 |
F696H |
高2 |
1175 |
FCACH |
低6 |
440 |
F71FH |
#2 |
1245 |
FCDCH |
#6 |
466 |
F79EH |
高3 |
1318 |
FDO9H |
低7 |
494 |
F817H |
高4 |
1397 |
FD34H |
中1 |
523 |
F887H |
#4 |
1480 |
FD5CH |
#1 |
554 |
F8F2H |
高5 |
1568 |
FD82H |
中2 |
578 |
F93DH |
#5 |
1661 |
FDA5H |
#2 |
622 |
F9B8H |
高6 |
1760 |
FDC7H |
中3 |
659 |
FA12H |
#6 |
1865 |
FDE7H |
中4 |
698 |
FA67H |
高7 |
1976 |
FE05H |
表2
音符 |
簡碼 |
N值 |
存儲地址 |
6 |
1 |
F71FH |
TAB |
2 |
2 |
F93DH |
TAB+2 |
3 |
3 |
FA12H |
TAB+4 |
4 |
4 |
FA67H |
TAB+6 |
表3
音符 |
節拍 |
代碼 |
存儲地址 |
6 |
2/4 |
12H |
TAB1 |
3 |
2/4 |
32H |
TAB1+1 |
4 |
2/4 |
42H |
TAB1+2 |
3 |
2/4 |
32H |
TAB1+3 |
2 |
4/4 |
24H |
TAB1+4 |
6 |
4/4 |
14H |
TAB1+5 | | 1、 本站不保證以上觀點正確,就算是本站原創作品,本站也不保證內容正確。 2、如果您擁有本文版權,并且不想在本站轉載,請書面通知本站立即刪除并且向您公開道歉! |