• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)播放音樂解析

    單片機(jī)播放音樂解析

    作者: 時(shí)間:2011-08-02 來源:網(wǎng)絡(luò) 收藏

    ,或者彈奏電子琴,實(shí)際上是按照特定的頻率,輸出一連串的方波。為了輸出合適的方波,首先應(yīng)該知道音符與頻率的關(guān)系。
    1.音名
    從常見的電子琴的鍵盤談起。
    在下表中,可以看到一列黑白相間的琴鍵(示意)。主要分成低音、中音和高音三個(gè)區(qū)域,每個(gè)區(qū)域都有12個(gè)琴鍵。其中的白鍵,簡譜音符標(biāo)為1、2、3、4、5、6、7,大家一般都讀成哆、來、咪、發(fā)、嗦、拉、西。
    2.頻率
    注意看一下幾個(gè)6(拉)的頻率,它們是整數(shù),容易看出規(guī)律DD是成2倍的關(guān)系。其它的音符,也有同樣的規(guī)律。這些頻率,如220、440等,它們?cè)谇冁I上的位置是世界統(tǒng)一的,無論是鋼琴、手風(fēng)琴,還是電子琴,都是一樣的。
    包括黑鍵和白鍵在內(nèi)的全部音符的頻率數(shù)值,是成“等比數(shù)列”的關(guān)系,它們之間有個(gè)公比,可以按照“2倍”的規(guī)律推算出來。
    已知最低音的6(拉)的頻率是220,設(shè)公比為q,那么:7的頻率就是220*q*q 。
    乘了兩個(gè)q,是因?yàn)?、7之間隔了個(gè)黑鍵。以此類推,兩個(gè)6之間,共有12個(gè)琴鍵,所以:
    低音區(qū)的6(拉)的頻率就是:220*q*q*q*q*q*q*q*q*q*q*q*q = 440。
    馬上就可以看出,12個(gè)q相乘,等于: 440 / 220 = 2。
    那么就可以求出公比:q = 2的12次方根 = 1.059463094。
    用這個(gè)公比,和已知的220進(jìn)行計(jì)算,可以得出全部琴鍵所對(duì)應(yīng)的頻率,如下表中所示。
    3.定時(shí)初值
    頻率的倒數(shù)是周期,用輸出方波,應(yīng)該在半個(gè)周期的時(shí)刻,將輸出取反。
    設(shè)的晶振為12MHz,那么定時(shí)器將在1us進(jìn)行一次加一,加到65536就會(huì)出現(xiàn)中斷。據(jù)此,就可計(jì)算出定時(shí)器定時(shí)半個(gè)周期所需的初值,如下表中所示。

    4.音調(diào)數(shù)據(jù)表
    單片機(jī)發(fā)出不同頻率的方波,人聽起來,就是不同的音調(diào)。
    上表中的頻率數(shù)值,有些過多,去掉不常用的黑鍵頻率,只是把白鍵對(duì)應(yīng)的數(shù)據(jù)存放在單片機(jī)中,即可滿足絕大部分的應(yīng)用需求。把下面這個(gè)數(shù)據(jù)表,放在程序中,需要播音的時(shí)候,就從表中取出一個(gè)數(shù)據(jù)送到定時(shí)器,當(dāng)定時(shí)器溢出中斷的時(shí)候,再對(duì)輸出引腳取反,那么,在揚(yáng)聲器中,即可聽到上表中頻率的聲音。
    定義音調(diào)數(shù)據(jù)表的程序如下:
    DW 63625, 63833, 64019, 64104, 64260, 64400, 64524 ;低音區(qū):1 2 3 4 5 6 7
    DW 64580, 64685, 64778, 64820, 64898, 64968, 65030 ;中音區(qū):1 2 3 4 5 6 7
    DW 65058, 65110, 65157, 65178, 65217, 65252, 65283 ;高音區(qū):1 2 3 4 5 6 7
    DW 65297 ;超高音:1

    本文引用地址:http://www.czjhyjcfj.com/article/172588.htm


    關(guān)鍵詞: 解析 音樂 播放 單片機(jī)

    評(píng)論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 河北区| 山东省| 长白| 天台县| 翁牛特旗| 孝义市| 丘北县| 万源市| 蓬溪县| 莲花县| 乌兰察布市| 宜川县| 昆明市| 平原县| 巴林左旗| 栾城县| 儋州市| 鄂伦春自治旗| 大新县| 遵义县| 房山区| 萍乡市| 株洲县| 玛多县| 商丘市| 连平县| 交城县| 日喀则市| 宁河县| 仁怀市| 娱乐| 宜宾县| 拜泉县| 荣昌县| 图们市| 屏山县| 英超| 黄冈市| 鹤庆县| 芦山县| 彭州市|