可編程樂曲演奏器程序設(shè)計.doc
約9頁DOC格式手機打開展開
可編程樂曲演奏器程序設(shè)計,基于at89c51音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單處機某個口線的“高”電平或低電平,則在該口線上就能產(chǎn)生一定頻率的矩形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時程序控制“高”“低”電平的持續(xù)時間,就能改變輸出頻率,從而改變音調(diào)。通過控制聲音頻率和發(fā)聲時間長短即可完成一般的音樂演奏。在實驗中,通...
內(nèi)容介紹
此文檔由會員 會飛的豬 發(fā)布
基于AT89C51 音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單處機某個口線的“高”電平或低電平,則在該口線上就能產(chǎn)生一定頻率的矩形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時程序控制“高”“低”電平的持續(xù)時間,就能改變輸出頻率,從而改變音調(diào)。
通過控制聲音頻率和發(fā)聲時間長短即可完成一般的音樂演奏。在實驗中,通過控制輸出方波的頻率可得到不同的聲音頻率。人耳可分辨的聲音頻率在17Hz—10Hz之間。實際上,利用單片機內(nèi)部定時器,計數(shù)初值不同,即可得到不同的輸出方波頻率。由于MCS-51單片機的計算能力較弱,對應不同音頻的計數(shù)值可事先計算好,通過查表取得。
不同聲音的發(fā)聲時間長短依樂曲而定,該值通常為0.1~1S。
通過控制定顯示器的定時時間產(chǎn)生不同頻率的方波,驅(qū)動喇叭發(fā)出不同音階的聲音,現(xiàn)利用延時不控制發(fā)音時間的長短,即可控制節(jié)拍,把樂譜中的音符和相應的節(jié)拍變換成定常和延時常數(shù),作為數(shù)據(jù)表格存在存貯器中。自程序查表得到定時常數(shù)和延遲常數(shù),分別用以控制定時器產(chǎn)生方波的頻率和發(fā)出該頻率方波的持續(xù)時間。當延時時間到,再查下一個音符的定時常數(shù)和延時常數(shù)。依次進行下去。
音符的節(jié)拍我們可以用定時器T0來控制,送入不同的初值,就可以產(chǎn)生不同的定時時間。便如某歌曲的節(jié)奏為每分鐘94拍,即一拍為0.64秒。其它節(jié)拍與時間的對應關(guān)系下表。
但時,由于T0的最大定時時間只能為131毫秒,因此不可能直接用改變T0的時間初值來實現(xiàn)不同節(jié)拍。我們可以用T0來產(chǎn)生10毫秒的時間基準,然后設(shè)置一個中斷計數(shù)器,通過判別中斷計數(shù)器的值來控制節(jié)拍時間的長短。表2中也給出了各種節(jié)拍所對應的時間常數(shù)。例如對1/4拍音符,定時時間為0.16秒,相應的時間常數(shù)為16(即10H);對3拍音符,定時時間為1.92秒,相應時間長數(shù)為192(即C0H)。我們將每一音符的時間常數(shù)和其相應的節(jié)拍常數(shù)作為一組,按順序?qū)非械乃谐?shù)排列成一個表,然后由查表程序依次取出,產(chǎn)生音符并控制節(jié)奏,就可以實現(xiàn)演奏效果。
此外,結(jié)束符和體止符可以分別用代碼00H和FFH來表示,若查表結(jié)果為00H,則表示曲子終了;若查表結(jié)果為FFH,則產(chǎn)生相應的停頓效果。
為了產(chǎn)生手彈的節(jié)奏感,在某些音符(例如兩個相同音符)音插入一個時間單位的頻率略有不同的音符。
通過控制聲音頻率和發(fā)聲時間長短即可完成一般的音樂演奏。在實驗中,通過控制輸出方波的頻率可得到不同的聲音頻率。人耳可分辨的聲音頻率在17Hz—10Hz之間。實際上,利用單片機內(nèi)部定時器,計數(shù)初值不同,即可得到不同的輸出方波頻率。由于MCS-51單片機的計算能力較弱,對應不同音頻的計數(shù)值可事先計算好,通過查表取得。
不同聲音的發(fā)聲時間長短依樂曲而定,該值通常為0.1~1S。
通過控制定顯示器的定時時間產(chǎn)生不同頻率的方波,驅(qū)動喇叭發(fā)出不同音階的聲音,現(xiàn)利用延時不控制發(fā)音時間的長短,即可控制節(jié)拍,把樂譜中的音符和相應的節(jié)拍變換成定常和延時常數(shù),作為數(shù)據(jù)表格存在存貯器中。自程序查表得到定時常數(shù)和延遲常數(shù),分別用以控制定時器產(chǎn)生方波的頻率和發(fā)出該頻率方波的持續(xù)時間。當延時時間到,再查下一個音符的定時常數(shù)和延時常數(shù)。依次進行下去。
音符的節(jié)拍我們可以用定時器T0來控制,送入不同的初值,就可以產(chǎn)生不同的定時時間。便如某歌曲的節(jié)奏為每分鐘94拍,即一拍為0.64秒。其它節(jié)拍與時間的對應關(guān)系下表。
但時,由于T0的最大定時時間只能為131毫秒,因此不可能直接用改變T0的時間初值來實現(xiàn)不同節(jié)拍。我們可以用T0來產(chǎn)生10毫秒的時間基準,然后設(shè)置一個中斷計數(shù)器,通過判別中斷計數(shù)器的值來控制節(jié)拍時間的長短。表2中也給出了各種節(jié)拍所對應的時間常數(shù)。例如對1/4拍音符,定時時間為0.16秒,相應的時間常數(shù)為16(即10H);對3拍音符,定時時間為1.92秒,相應時間長數(shù)為192(即C0H)。我們將每一音符的時間常數(shù)和其相應的節(jié)拍常數(shù)作為一組,按順序?qū)非械乃谐?shù)排列成一個表,然后由查表程序依次取出,產(chǎn)生音符并控制節(jié)奏,就可以實現(xiàn)演奏效果。
此外,結(jié)束符和體止符可以分別用代碼00H和FFH來表示,若查表結(jié)果為00H,則表示曲子終了;若查表結(jié)果為FFH,則產(chǎn)生相應的停頓效果。
為了產(chǎn)生手彈的節(jié)奏感,在某些音符(例如兩個相同音符)音插入一個時間單位的頻率略有不同的音符。