新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機播放音樂的基本知識

        單片機播放音樂的基本知識

        作者: 時間:2016-11-17 來源:網絡 收藏
        單片機播放音樂,或者彈奏電子琴,實際上是按照特定的頻率,輸出一連串的方波。為了輸出合適的方波,首先應該知道音符與頻率的關系。

        1.音名
        從常見的電子琴的鍵盤談起。
        在下表中,可以看到一列黑白相間的琴鍵(示意)。主要分成低音、中音和高音三個區域,每個區域都有12個琴鍵。其中的白鍵,簡譜音符標為1、2、3、4、5、6、7,大家一般都讀成哆、來、咪、發、嗦、拉、西。
        2.頻率
        注意看一下幾個6(拉)的頻率,它們是整數,容易看出規律――是成2倍的關系。其它的音符,也有同樣的規律。這些頻率,如220、440等,它們在琴鍵上的位置是世界統一的,無論是鋼琴、手風琴,還是電子琴,都是一樣的。
        包括黑鍵和白鍵在內的全部音符的頻率數值,是成“等比數列”的關系,它們之間有個公比,可以按照“2倍”的規律推算出來。
        已知最低音的6(拉)的頻率是220,設公比為q,那么:7的頻率就是220*q*q 。
        乘了兩個q,是因為6、7之間隔了個黑鍵。以此類推,兩個6之間,共有12個琴鍵,所以:
        低音區的6(拉)的頻率就是:220*q*q*q*q*q*q*q*q*q*q*q*q = 440。
        馬上就可以看出,12個q相乘,等于: 440 / 220 = 2。
        那么就可以求出公比:q = 2的12次方根 = 1.059463094。
        用這個公比,和已知的220進行計算,可以得出全部琴鍵所對應的頻率,如下表中所示。
        3.定時初值
        頻率的倒數是周期,用單片機輸出方波,應該在半個周期的時刻,將輸出取反。
        設單片機的晶振為12MHz,那么定時器將在1us進行一次加一,加到65536就會出現中斷。據此,就可計算出定時器定時半個周期所需的初值,如下表中所示。

        本文引用地址:http://www.104case.com/article/201611/315418.htm


        圖表鏈接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/bfbfc7a93f49fd8eca130cd3.html

        4.音調數據表
        單片機發出不同頻率的方波,人聽起來,就是不同的音調。
        上表中的頻率數值,有些過多,去掉不常用的黑鍵頻率,只是把白鍵對應的數據存放在單片機中,即可滿足絕大部分的應用需求。
        定義音調數據表的程序如下:
        DW 63625, 63833, 64019, 64104, 64260, 64400, 64524 ;低音區:1 2 3 4 5 6 7
        DW 64580, 64685, 64778, 64820, 64898, 64968, 65030 ;中音區:1 2 3 4 5 6 7
        DW 65058, 65110, 65157, 65178, 65217, 65252, 65283 ;高音區:1 2 3 4 5 6 7
        DW 65297 ;超高音:1

        把這個數據表,放在程序中,需要播音的時候,就從表中取出一個數據送到定時器,當定時器溢出中斷的時候,再對輸出引腳取反,那么,在揚聲器中,即可聽到上表中頻率的聲音。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 连山| 甘洛县| 宁海县| 永川市| 光山县| 商城县| 潢川县| 巴林左旗| 额敏县| 林甸县| 西畴县| 沂源县| 曲沃县| 临邑县| 东兴市| 泽库县| 偏关县| 当阳市| 桓台县| 新田县| 贡嘎县| 措美县| 荆州市| 湘乡市| 铜山县| 灌南县| 赤城县| 塔城市| 长沙县| 北安市| 青河县| 信阳市| 交口县| 泸溪县| 车致| 济宁市| 互助| 鄱阳县| 巧家县| 建宁县| 沙坪坝区|