0x9a
0xFe0xc1
0xFe0xe4
0xFf0x03
0xFc0x0c
0xF80x18高八度17
voidtimer0i
terrupt1定时器0中断服务程序
TH0timeh将timeh赋给计时器的高8位
TL0timel将timel赋给计时器的低8位
fmfm定时器每次到时将蜂鸣器反相
f
voiddelayui
tz延时165MS即十六分音符
ui
ty
forzz0z
fory19000ay0y大致时间
voiddelay1ui
tz延时1MS
ui
ty
forzz0z
fory112y0y大致时间
voidmai
ui
ttemp存放简谱数组中的每一个音符的临时变量ui
tlightTemp存放音符
uchari0
ucharjpjp用于取出temp中的高8位和低8位
IT01INT0
IT11INT1
TMOD0x01设置定时器T0工作于方式1
IE0x87允许T0中断
while1
ftempsbi
iftemp0xff
break
jptemp16取数的高4位音频数值
lightTemp1jp1
P2lightTemp0x100
P0lightTemp0x100
ifjp0
timehchuzhijp2构造定时器初值高8位
timelchuzhijp21构造定时器初值低8位
TR01开定时器
else
TR00关定时器
fm1关蜂鸣器
delaytemp16取数的低4位节拍音符总时延TR00唱完一个音停5MS
fm1
delay15
i
f
TR00关定时器
fm1关蜂鸣器
voiddelay_msui
ta
i
tij
foriai0i
forj110j0j
voidINT0_svrvoidi
terrupt0
delay_ms10
ifi
t00
a2000
ifa18000a0
voidINT1_svrvoidi
terrupt2
delay_ms10
ifi
t10
a2000
ifa0a0
f
3运行结果或者测试结果
测试结果利用蜂鸣器实现了播放音乐的功能并有节奏的闪灭二极管可以进行速度的变换。达到了预期的目标测试成功。
4遇到的问题及解决的方法
在设计的过程中主要遇到以下问题
1计算机与单片机的连接不上问题
计算机与单片机的连接需要在电脑端安装相应的USB转串的驱动由于我组没有使用实验室wi
dowsxp系统而使用的是个人计算机wi
dows7系统所以需要针对wi
7的驱动。后来联网搜索下载相应的驱动之后解决了这一问题。
2如何使蜂鸣器发出声音而非BeBe声
为了解决这个问题我们深入研究了蜂鸣器发声原理与乐谱相关的知识。通过学习相关知识发现不同的音符对应不同的音高音高取决于发声频率。所以可以通过构造不同频率的方波来使蜂鸣器发出不同频率的声音具体实现时利用定时器计时定时器每一次累加消耗一个机器周期即12个时钟周期。本实验采用晶振频率为12MHz即定时器每一次累加消耗1us通过设置定时器初值设定蜂鸣器取法的时间间隔从而产生相应的音频。
每个音符不但有频率属性还有节拍属性。对不同节拍的控制可以采用延迟一定的时间来得到。
f3音乐节奏的调节
设置全局变量a似的程序每循环一次就让音符的延时减一次a或加一次a并利用中断让r