- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于51单片机音盒程序设计
基于51单片机音乐盒程序设计
功能设计说明
1、电路设计
实物图
矩阵键盘部分电路图
2、运行流程图
3、电子琴模式按键对应发音设计
按键 发音 按键 发音 K1 低 1 K9 中 2 K2 低 2 K10 中 3 K3 低 3 K11 中 4 K4 低 4 K12 中 5 K5 低 5 K13 中 6 按键 发音 按键 发音 K6 低 6 K14 中 7 K7 低 7 K15 高 1 K8 中 1 K16 重新播放小苹果 硬件电路说明
程序下载电路
音乐盒电路图
ISP下载接口
本设计采用的单片机为AT89S52单片机,需使用ISP下载器进行下载程序,程序下载电路图如图中ISP1接口.
音乐发音电路
IO口P10发出不同频率的脉冲,则BUZZER产生各种不同的声音,本设计采用12MHZ晶振,系统频率1MHZ,定时器计数一个1us,其对应关系如下表所示:
音符 频率(HZ) 简谱码(T值) 音符 频率(HZ) 简谱码(T值) 低 1 DO 262 63628 # 4 FA# 740 64860 # 1 DO# 277 63731 中 5 SO 784 64898 低 2 RE 294 63853 # 5 SO# 831 64934 # 2 RE# 311 63928 中 6 LA 880 64968 低 3 M 330 64021 # 6 932 64994 低 4 FA 349 64103 中 7 SI 988 65030 # 4 FA# 370 64185 高 1 DO 1046 65058 低 5 SO 392 64260 # 1 DO# 1109 65085 # 5 SO# 415 64331 高 2 RE 1175 65110 低 6 LA 440 64400 # 2 RE# 1245 65134 # 6 466 64463 高 3 M 1318 65157 低 7 SI 494 64524 高 4 FA 1397 65178 中1 DO 523 64580 # 4 FA# 1480 65198 # 1 DO# 554 64633 高 5 SO 1568 65217 中 2 RE 587 64684 # 5 SO# 1661 65235 # 2 RE# 622 64732 高 6 LA 1760 65252 中 3 M 659 64777 # 6 1865 65268 中 4 FA 698 64820 高 7 SI 1967 65282?、脉冲产生
采用定时器0溢出中断产生脉冲,定时器初始化如下:
TMOD = 0x01; //定时器0工作方式1 ,即十六位计数器计数
TR0 = 1; //启动定时器
ET0 = 1; //定时器0溢出中断使能
EA = 1; //总中断使能
定时器0溢出中断产生脉冲,void Timer0() interrupt 1代码如下:
TH0 = th0;
TL0 = tl0;
if(th0==0)BUZZER=1; //判断停顿,有停顿不发音
else{BUZZER = ~BUZZER;} //无停顿发音
2、音普规则:
a、音普由一个字节十六进制数组成
b、高4位代表节拍,一拍约400MS,将一拍分成8份
c、低4位代表音符,一一对应Note[]列表
d、0x20代表歌曲结束符
e、uint code Note[]={0,64580,64684,64777,64820,64898,64968,65030,/*中音*/
63628,63853,64021,64103,64260,64400,64524,/*低音*/
65058,65110,65157,65178,65217,65252,65282/*高音*/};
该列表为发音所对应的定时器初装值
例如编写如下一段音乐列表:
0x83,0x81,0x82,0x8d,0x43,0x42,0x41,0x42,0x8d,0x8d,0x40 0x40表示停顿4*50MS
/*你是我的小呀小苹果*/
音普列表解读
while(Xiaopingguo[temp]!=0x20) //不停判断音乐是否结尾,结尾跳出
{
jiepai=Xiaopingguo[temp]4; //获取节拍,即高4位数
yinpu=Xiaopingguo[temp]0x0F; //获取音普,即低4位数
Timer_Set(yinpu); //根据列表对应发音
Delay(jiepai*50); //节拍
te
文档评论(0)