基于单片机的音乐播放器设计
1 设计目的
单片机是芯片级计算机系统,它可以嵌入到任何对象体系中去,实现智能化控制。独具魅力的单片机能令使用者体会到电脑的真谛。利用单片机播放音乐大概是单片机爱好者最感兴趣的问题之一,而对于初学者来说,亲自动手用单片机设计播放简单音乐程序,是完全可以实现的。此次课程设计从单片机的基本发音原理出发,运用单片机音乐播放器的设计原理,实现了一个音乐播放器的基本功能,完成了一个单片机设计实例,同时整个设计制作过程,也让设计者体会到了灵活运用功能强大的单片机的乐趣。
2 设计内容
音乐播放器可以循环播放五首歌曲片段,也可以通过按键选择播放上一首或者下一首,其中一首为《夜夜夜夜》。
3 设计方案
3.1 硬件电路设计
3.1.1 总体设计电路图
音乐播放器的总体设计电路图如图1所示。
图1 总体设计电路图
3.1.2 晶振时间电路设计
晶振电路由两个30pF的电容和一个12Mhz的晶体振荡器组成。晶振电路如图3所示。节点1与单片机的XTAL2相连接,节点2与单片机的XTAL1相连接,从而为单片机提供时间信号,为音乐的播放节拍控制提供基本时间单位。当晶体振荡频率为12MHz,定时器工作在方式1下。在音乐播放器实际设计时,由于所选用的单片机开发板上已具备晶振电路,故而不再另外焊接晶振电路,而是直接接入使用。
图2 晶振电路
3.1.3 输入、输出电路设计
发声电路由数字扬声器连接P2.3接口实现音乐的输出,由控制电路发出操作指令后,单片机调用相应程序,并将音乐信号由P2.3口输出,通过驱动扬声器发出美妙的音乐。输入、输出电路如图3所示。
图3 声音输出电路
3.2 软件系统设计
3.2.1 系统总流程图
开始要定义音频输出端口,以及每首歌的入口地址;然后对定时器初始化,确定工作方式,付初值,开放中断,启动定时器工作;对音频输出端口初始化;设置音节起始位置和节拍间距,把音节和节拍的入口地址信息存放在固定存储单元中;将取出的音符数+节拍数保存在存储单元中;并循环读取歌曲的节拍编码;并由中断来控制音乐的播放到上一曲,或者下一曲。
系统设计流程图如图4
图4 系统流程图
3.2.2曲目选择程序
现在程序里预先存好歌曲的编码,歌曲标志为uchar count。由子程序调用,利用延时与简谱想结合的方式编码,高四位为歌曲简谱,低四位为音节所持续的时间,打开开关后一次播放曲目,也可以通过中断,来选择跳过正在播放的曲目,跳到上一曲。或者下一曲。
曲谱的源程序为:
uchar code music_1[]= {//我和你
0x64,0x84,0x44,0x04,0x54,0x64,0x14,0x04,0x44,0x54,0x64,0x84,0x54,0x04,0x04,0x04,
0x64,0x84,0x44,0x04,0x54,0x64,0x24,0x04,0x54,0x14,0x54,0x64,0x44,0x04,0x04,0x04,
0x94,0x04,0x84,0x04,0x94,0x04,0x44,0x04,0x54,0x94,0x64,0x84,0x54,0x04,0x04,0x04,
0x64,0x84,0x44,0x04,0x54,0x64,0x24,0x04,0x54,0x14,0x54,0x64,0x44,0x04,0x04,0x04
};
uchar code music_2[]= {//两只老虎
0x42,0x52,0x62,0x42,0x42,0x52,0x62,0x42,0x62,0x72,0x84,0x62,0x72,0x84,0x81,0x91,
0x81,0x71,0x62,0x42,0x81,0x91,0x81,0x71,0x62,0x42,0x52,0x12,0x44,0x52,0x12,0x44
};
uchar code music_3[]= {//北京欢迎你
0x62,0x82,0x62,0x52,0x62,0x52,0x64,0x62,0x52,0x22,0x42,0x62,0x54,
0x52,0x42,0x22,0x42,0x52,0x62,0x82,0x52,0x62,0x92,0x82,0x12,0x52,0x44,
0x52,0x42,0x22,0x42,0x52,0x62,0x82,0x52,0x62,0x92,0x82,0x82,0x62,0x04,
0x52,0x62,0x52,0x42,0x82,0x92,0x64,0x22,0x82,0x64,0x54,0x64
};
uchar code music_4[]= {//生日快乐
0x13,0x13,0x24,0x14,0x44,0x34,0x04,0x13,0x13,0x24,0x14,0x54,0x44,0x04,
0x13,0x13,0x84,0x64,0x44,0x34,0x24,0x76,0x73,0x64,0x44,0x54,0x44,0x04
};
uchar code music_5[]= {//你那里下雪了吗
0x34,0x62,0x32,0x72, 0x51,0x71, 0x64,0x51, 0x51,0x61,0x61,0x12,0x51,0x51,0x61,0x33,
0x32,0x04,0x31,0x32,0x31,0x62,0x32,0x41,0x51,0x41,0x32,0x23,0x21,0x21,0x21,0x31,0x11,0x11,0x71,0x62,0x36,0x04
};
4原件的介绍
此次设计中用到了AT89S52单片机、蜂鸣器、晶振、等等。
4.1 单片机
仿真时我用了AT89C51,但是在实际操作时,我用的是STC89C52。
AT89C51
图5 AT89C51引脚排列
AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
STC89C52
图6 SCT89C52引脚排列
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。
4.2 晶振
1.晶振作用:给单片机正常工作提供稳定的时钟信号。
原理:在石英晶体的两个极板上加一个电场,晶片会产生机械变形,对极板施加机械力使其变形,又会在极板上产生相应的电荷,这叫压电效应。如果在两个极板上加上交变的电压,晶片便会产生机械变形震荡,同时这种机械震荡还会产生交变的电场(比较的微小),但是当外加交变的电压的频率与晶片固有的频率(由其形状和尺寸决定)相等时,机械振动的幅度会加剧,产生交变电场也增大。叫做压电谐波。
2.即使去掉晶振,电路照样的能振荡,并且如果把那两个电容改成可调电容的话也能得到想要的某个频率,那还要晶振干什么:晶振、陶瓷谐振槽路、RC振荡器以及硅振荡器是适用于微控制器的四种时钟源。针对具体应用优化时钟源设计依赖于以下因素:成本、精度和环境参数。RC振荡器能够快速启动,成本也比较低,但通常在整个温度和工作电源电压范围内精度较差,会在标称输出频率的5%至50%范围内变化;但相对RC振荡器而言,基于晶振与陶瓷谐振槽路的振荡器通常能提供非常高的初始精度和较低的温度系数。
4.3 蜂鸣器
蜂鸣器的作用就是输出音频。
5测试结果
播放器很好的实现了播放和选曲功能,当电源接通但是没有开关打输入选择歌曲上一曲还是下一曲时,播放自动播放曲目1到曲目5循环播放。当按下开关,则会一条过正在播放的曲目,播放上一曲,或者下一曲。按下抚慰开关后,歌曲将又从第一首歌曲开始播放。
6 课程设计的体会
课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为自动化专业的学生来说掌握单片机的开发技术是十分重要的。我的题目是音乐播放器硬软件的设计,对于我们这些工科学生来说,这是一次考验。怎么才能找到课堂所学与实际应用的最佳结合点?怎样让自己的业余更接近专业?怎样让自己的计划更具有序性,而不会忙无一用?这都是我们所要考虑和努力的。这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。这次课程设计通过自己的努力,同学的帮助,还有老师的辛勤指导下,最终顺利完成了。
7 参考文献
[1] 郑郁正.单片机原理及应用[M].四川大学出版社,2003.7.
[2] 谭浩强.C程序设计(第二版)[M].清华大学出版社,1999.6.
[3] 王晓君.安国臣等. MCS—51及兼容单片机原理与选型[Z]. 北京-电子工业出版社, 2003.2.
[4] 杨全胜.胡有彬。现代微机原理与接口技术[M]。北京:电子工业出版社,2002.4.
附 录
附录一 元件清单