【51单片机】用51单片机定时器/计数器产生音乐的练习(实验报告)
1、8051單片機晶振頻率為6MHz,利用T0中斷產(chǎn)生周期20ms定時的方波,從P1.0輸出點亮LED,并連接一個模擬示波器,編寫C語言程序并畫出Proteus仿真電路進行仿真。
#include<reg52.h> sbit L1=P1^0; timer0() interrupt 1 using 2{TH0=0xEC;TL0=0x78;L1=~L1;} void main(){TMOD=0x01;//定時器0,方式1TH0=0xEC;TL0=0x78;IE=0x82;TR0=1;while(1); }Tips:由于要產(chǎn)生的是方波,所以計算初值的時候周期要除以2
2、利用定時器產(chǎn)生生日快樂歌
聲音的頻譜范圍約在幾十到幾千赫茲,利用單片機定時器的定時中斷功能,可以從一個I/O口線上形成一定頻率的脈沖,經(jīng)過濾波和功率放大,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時程序控制輸出脈沖的頻率來改變音調(diào),即可實現(xiàn)音樂發(fā)生器功能。
要讓單片機產(chǎn)生音頻脈沖,只要計算出某一音頻的周期,在將此周期除以2得到半周期,利用定時器對此半周期進行定時,每當定時時間到,將某個I/O口線上的電平取反,從而在I/O口線上得到所需要的音頻脈沖。
例如中音DO的頻率為523Hz,若單片機工作頻率為12MHz,定時器T0設置為工作方式1,按公式計算得定時器初值為64580;高音DO的頻率為1047Hz,計算得定時器初值為65058。
例如一段延時程序DELAY為1/4拍,則1拍只要調(diào)用4次DELAY程序,依此類推。
編寫音樂程序時,先把樂譜的音符找出,按表建立對應的簡譜碼及定時器初值表,按表建立節(jié)拍碼表。每個音符使用1個字節(jié),字節(jié)的高4位存放音符的高低,低4位存放音符的節(jié)拍。“生日快樂”樂譜如下:
|5.5 6 5|1 7 -||5.5 6 5|2 1 -|5.5 5 3|1 7 6|4.4 3 1|2 1 -|
請設計樂譜對應的音符節(jié)拍碼表和音符對應的定時器的初值表。
按照上述原理編寫出“生日快樂”樂曲的C語言程序。
使用Proteus仿真電路進行仿真,點擊Play按鈕執(zhí)行程序,從計算機的音箱中聽到“生日快樂”樂曲。
總結(jié)
以上是生活随笔為你收集整理的【51单片机】用51单片机定时器/计数器产生音乐的练习(实验报告)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20年了啊:那年冬天
- 下一篇: java自行车怎么调档_这也许是史上最详