因为用到一个扬声器所以就可以不能区分它的正负极性了,它的电路框图如图所示。
LS1SOUNDER 4.4 显示电路
显示部分主要是由一个共阴极的八段数码管和上拉电阻共同来组成的。它们接在AT89C52单片机P0口上。这样数码管就可以正常显示所播放的歌曲的曲目数了,具体的显示器电路图如图所示。
RP1RESPACK-8123456789 4.5 控制电路
这部分电路主要是用来控制歌曲的播放/暂停及选择。采用了三个按钮来进行控制来实现歌曲播放的上一曲、下一曲及开始/暂停的功能。
暂停/开始last/上一曲next/下一曲
第5章 软件设计
5.1程序设计
详细的程序设计见附录1
5.2 程序流程图
开始 初始参数、引脚设定 定时/计数器工作方式设定 中断优先级设定 歌 曲 播 放
取第N首歌曲第M个音符 确定音阶频率 确定节拍延时时音符播放song函数 P3.2/P3.3修改N 键按下? P3.1按下? 暂停/开始 (0,0,0)字符结束? 结束 注:此为播放一个音符的程序流程
第6章 系统调试
6.1 常用调试工具
6.1.1 Proteu仿真软件介绍
Proteu仿真软件用来画硬件电路原理图,在其中我们可以同时调用各样的单片机,但是其中存放的是普通的单片机可能不存在我们所要的芯片,因此我们也可以用Auto CAD或protel 99来画此硬件电路图,而我在此次设计中采用了Proteu这个软件。在画图过程中一定要注意的是,元器件之间的连接线不可以是非线一定要导线,因此完成电路图后再调试这个硬件电路是否能实现它的功能。
6.1.2 Keil编译环境介绍
Keil编译软件用来编程,可以用汇编语言也可以用C语言来进行编程实现某些功能。当打开keil后,首先新建一个项目保存在相应位置,后再新建一个文本,将你已经编好的程序复制到这个文本中或是在这个文本进行编写程序,之后一再将其保存为一个以.Asm或是.c作为后缀名的文本,再在我们建立的组中将程序文件添加到工程中,再经过编译,然后生成.Hex文件再编译,若提示没有出现错误errors(不含警告warnings)则说明调试成功,反之则应该对程序进行检查分析,直到调试成功为止。
结论及设计缺陷
结论:过这次比较完整的单片机音乐发生器的设计,我摆脱了单纯的
理论知识学习状态,和实际设计的结合锻炼了我的综合运用所学的专业基础知识,同时也提高我查阅文献资料、设计规范以及电脑画图等其他专业能力水平,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,经验得到了丰富,并且意志品质力。其次,就是在此次毕业设计中关系到了音乐的一些基础知识,音乐是由不同的音符组成,不同的音符对应着不同的频率产生,产生有规律的频率乐音。了解音乐的产生,音乐体系中中音高关系的最小计量单位及音符的定义,同时也知道了音符又分为了以下几种:全音符、
二分音符、四分音符、八符分音符、十六分音符、三十二分音符、六十四分符。
设计缺陷:由于本设计的程序的发音设计限制,在执行暂停开始时不能通过TR0=0,只能通过ET0=0;所以在执行暂停开始不能切换上下曲。
附 录
附录1 程序清单
#include
sbit key_next = P3^2; //上一曲按钮 sbit key_last = P3^3; //下一曲按钮 sbit player = P3^1; //定义暂停/播放
sbit speaker = P1^2; //定义音乐输出端口,需要连接到对应的喇叭
unsigned char timer0high,timer0low,time;// unsigned char m,n,x,y;
signed char k;
unsigned char i; //用来判断暂停开始的变量
code unsigned char music[3][500]={
{ 5,0,1, 5,0,1, 3,1,1, 2,1,1, 2,1,1, 1,1,1, 3,1,1, 3,1,1, 2,1,1, 2,1,4,
5,0,1, 5,0,1, 3,1,1, 2,1,1, 2,1,1, 2,1,1, 1,1,1, 2,1,1, 3,1,1, 3,1,4, 5,0,1, 5,0,1, 3,1,1, 2,1,1, 2,1,1, 1,1,1, 3,1,1, 3,1,1, 2,1,1, 2,1,4, 2,1,1, 1,1,1, 3,1,1, 2,1,1, 1,1,1, 2,1,1, 1,1,1, 1,1,8, 3,1,1, 2,1,1, 2,1,1, 1,1,1, 1,1,1, 2,1,1, 2,1,6, 3,1,1, 2,1,2, 1,1,1, 1,1,1, 5,0,1, 6,0,1, 5,0,1, 5,0,6, 3,1,1, 2,1,1, 2,1,1, 1,1,1, 1,1,1, 2,1,1, 2,1,6, 5,0,1, 3,1,1, 2,1,2, 1,1,1, 2,1,2, 3,1,1, 3,1,4,5,0,1, 3,1,1, 5,1,2, 6,1,1, 3,1,1, 0,0,0}, //一辈子孤单数据表
{ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1, 6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1, 6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2, 5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,
2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0 }, //世上只有妈妈好数据表