選擇分類:當前分類——當前分類
本站推薦:
單片機演奏音樂的實現
文章長度[] 加入時間[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值 存儲地址
F71FH TAB
F93DH TAB+2
FA12H TAB+4
FA67H TAB+6

表3

音符 節拍 代碼 存儲地址
2/4 12H TAB1
2/4 32H TAB1+1
2/4 42H TAB1+2
2/4 32H TAB1+3
4/4 24H TAB1+4
4/4 14H TAB1+5
1、 本站不保證以上觀點正確,就算是本站原創作品,本站也不保證內容正確。
2、如果您擁有本文版權,并且不想在本站轉載,請書面通知本站立即刪除并且向您公開道歉! 以上可能是本站收集或者轉載的文章,本站可能沒有文章中的元件或產品,如果您需要類似的商品請 點這里查看商品列表!
91嫩草黄片动漫版