1、简易电子琴组员:柳一江、姜小通、张华恩、郭晶晶、王欢、朱敏口号:只要团结一心!只要团结一心!Nothing is impossible 学期项目选题的依据学期项目选题的依据(摘要)o电子琴做为电子乐器的一种,可以模仿很多种音色,甚至可以奏出常规乐器无法发出的声音。由于它音域较宽,和声丰富。而且表现力极其丰富。所以它是现代电声乐器中不可缺少的一部分。o我们对于电子琴如何实现其功能感到好奇,为了验证书本上所学的知识,所以我们做了一个基于单片机的简易电子琴,并实现了电子琴基本功能。o电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵
2、活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89S52单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。目录o 方案论证o 系统设计o 功能模块介绍o 发声原理及程序流程图o 调试步骤o 总结o 参考文献方案论证o 方案一:方案一:用可控硅制作电子琴,将220V交流电经变压器降压,再经过滤波,整形获得+13.5V直流电压,将单向可控硅SCR和电阻、电容组成驰张
3、振荡器电路。但该方案制作成本高且复杂。故不采用。o 方案二:方案二:采用AT89C52单片机进行控制,但由于AT89C52在属于低档的单片机,已经面临淘汰,且仿真器价格昂贵,不易擦除。故不采用。o 方案三:方案三:采用两个555集成定时器组成简易电子琴,整个电路由主振荡器,颤音振荡器,扬声器和琴键按钮等部分组成。由于555产生的信号不稳定且精度不高。故不采用。o 方案四:方案四:采用采用AT89S52单片机进行控制,以AT89S52单片机为核心控制元件,与键盘、蜂鸣器等模块组成核心主控制模块,在主控模块上设有16个按键和蜂鸣器。程序易擦除,比较方便。o根据以上比较可知应采用四种方案根据以上比较
4、可知应采用四种方案系统设计o 本电子琴系统主要包括AT89S52单片机,4x4键盘,发声模块,数码管显示单元,系统框图如图1所示。4x4键盘复位电路晶振12MHZ AT89S52数码管显示单元发声模块电源电路图1三、功能模块介绍三、功能模块介绍o3.1 时钟电路分析(单片机的晶振电路)o此系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。AT89S52内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容CX1和CX2构成并联谐振电路,接在放大器的反
5、馈回路中。对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为30pF。在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。o单片机的18,19脚接外部晶体振荡器。3.2复位电路的论证和分析o AT89S52的复位是由外部的复位电路来实现的。片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。复位
6、电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路,当时钟频率选用12MHz时,C取10F,Rs约为100,Rk约为10K。o 实际上为了方便,我们的硬件电路里面单片机的9脚RST直接接高电位,电源接通后复位3.3音频放大电路 o音频放大电路(图2)的选用对电子琴的音色及音量具有决定性的作用。本设计发声模块主要采用 LM386,LM386是一种音频集成功放,具有自身功耗低,电压增益可调整,电源电压范围大,外接元件少和总谐波失真小等优点。广泛应用于录音机和收音机之中。LM386内部电路原理图(图3)所示与通用型集成运放相类似,它是一个三级放大电路第一级为差分放大电路
7、T1和T3 T2和T4分别构成复合管作为差分放大电路的放大管T5和T6组成镜像电流源作为T1和T2的有源负载T3和T4信号从管的基极输入,T2管的集电极输出 为双端输入单端输出差分电路,使用镜像电流源作为差分放大电路有源负载可使单端输出电路的增益近似等于双端输出电容的增益第二级为共射放大电路,T7为放大管,恒流源作有源负载,以增大放大倍数第三级中的T8和T9管复合成PNP型管,与NPN型管T10 构成准互补输出级。二极管D1和D2为输出级提供合适的偏置电压可以消除交越失真。引脚2为反相输入端,引脚3为同相输入端。电路由单电源供电故为OTL电路。输出端引脚5应外接输出电容后再接负载。电阻R7从输
8、出端连接到T2的发射极,形成反馈通路,并与R5和R6构成反馈网络,从而引入了深度电压串联负反馈使整个电路具有稳定的电压增益。图2 音频放大器电路图3 LM386内部电路原理图3.4 键盘模块o当按键较多时会占用更过的控制器端口,为减少对端口的占用,本设计采用44矩阵键盘(图4),键盘矩阵行线连接P2.0P2.3,列线连接P2.4P2.7,扫描过程如下:o程序首先判断是否有键按下,为判断16个按键中是否有键按下,程序首先在4条行线上放置4个0,即在 P2端口输出0XF0,如果有任一按键按下,则4条列线上必有一位为0.如果已有键按下,则判断按键所在行、列位置,并返回按键序号。代码中行扫描码初值为0
9、 xFE,通过将该值循环右移,可对P2.0P2.3对应的4 行逐行发送 0,每次发送扫描码后即判断高 4位的4个1中是否有0 出现,如果出现0 说明按键在该行上,这时可将发送的低4 位于读取的高4 位取反,也就是P2取反,这样P2 中将出现2 个 1,其余位均变为0,2个1分别处在低4位和高4位中,高低4位中1所处的位置各有4种可能,共有16种可能,对应十六个不同的按键,根据取反后的值查询键盘矩阵按键特征码表,即可得到按键序号。图4 4x4键盘3.5供电电路 o 采用9v直流供电,分出两个电源,9v直接供给音频发大电路,另一部分经7805稳压到5v然后供给单片机。四四.发声原理即程序流程图发声
10、原理即程序流程图o 4.1音乐发声原理o 因此我们只要把一首歌曲的音阶对应频率关系弄正确,即可利用AT89S52 的内部定时器使其工作计数器模式MODE1 下改变计数值TH0及TL0以产生不同频率的方法产生不同音阶。o 表1.作品采用的音符频率与简谱码对应表音符频率(Hz)简谱码音符频率(Hz)简谱码低音mi33064021中音fa69864820低音fa34964103中音so78464898低音so39264260中音la88064968低音la44064400中音xi98865030低音xi49464524高音do104665058中音do52364580高音re117565110中音r
11、e58764684高音mi131865157中音mi65964777高音fa1397651784.2音乐发声程序框图(图5)图5 音乐发声程序框六、总结六、总结o6.1课程设计心得及体会:课程设计心得及体会:o通过这次单片机课程设计,我弄懂了不少课本上的知识,还扩展了一些课本没有的知识,再通过去图书馆查阅资料,很好的完成了这次课程设计。o首先在课程设计刚开始的调研阶段,我学会了怎么通过各种方式查询相关的资料。通过对这些资料的学习,我大致了解了单片机的发展现状以及未来的发展趋势,认识到目前单片机在各方面的应用。了解了单片机方面的先进技术,这些都为我的未来的学习指明了方向。o我的课程设计主要涉及硬
12、件和软件两方面的内容,通过这些我的硬件和软件开发能力都获得了提高。首先硬件方面,基本了解了电子产品的开发流程和所要做的工作。虽然本次课程设计的硬件焊接工序对大二焊接了一年的我来说不算什么难事,但是在焊接过程中我没有半点马虎,对电路的分析在指导老师卢毓俊老师的帮助下更是步步深入。o在软件方面,因为程序的编写都是我的弱项,所以我是先从网上找来类似的程序模板,然后借助各方面的资料对程序的每一步进行分析,按题目的需求进行修改,最终才得到我现在的程序方案。6.2不足之处不足之处o1.可弹奏的音符数较少,只能在一定范围内满足用户需要。可通过改进键盘识别模块和发生模块来增加其复杂度。2.音色不可调,只有一种
13、波形的频率输出。可以在外围电路设计滤波电路,接在不同的输出口,通过软件实现不同端口的输出,从而接入不同的滤波电路,输出不同的波形,从而获得不一样的音色。o3.不能以和弦形式演奏,只能单个键按下输出单个的音阶。o4.由于没有足够的设计经验,本次选用的按键不易按下,所以导致演奏时不够流畅。电路原理图电路原理图源程序源程序 o项目:可演奏电子琴o/-o/在键盘矩阵上模拟演奏电子琴,数码管显示按键号o/-o#include o#define uchar unsighed charo#define uint unsighed into o/共阳数码管编号ouchar code DSY_Table=o0
14、xc0,0 xf9,0 xa4,0 xb0,0 x,0 x99,0 x92,0 x82,0 x f8,0 x80,/0、1、2、3、4、5、6、7、8o0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e,0 xBF;/9、A、B、C、D、E、F、-o/各音符对应的延时ouint code Tone_Delay_Table=o64021,64103,64400,64524,64580,64684,64777,o64820,64898,64968,65030,65058,65110,65110,65157,65178;osbit BEEP=P30;/蜂鸣器oucha
15、r KeyNo;/按键序号o/-o/延时o/-ovoid DelayMS(uchar x)oo uchar i;o while(x-)for(i=0;i4)0 x0F;o/对03行分别附加起始值0,4,8,12oswitch(Tmp)oo case 1:k+=0;break;ocase 2:k+=4;break;ocase 4:k+=8;break;ocase 8:k+=12;break;odefault:return;ooKeyNo=k;oo/-o/键盘矩阵扫描子程序 o/-ovoid key_Scan()oo uchar Tmp,k;o/高四位置0,放入四行o P1=0 x0F;o Del
16、ayMS(2);o/按键后00001111将变成0000 xxxx,x中1个为0,3个仍为1o/下面的异或操作会把3个1变成0,唯一的0变成1oTmp=P1 0 x0F;o/判断按键发生于03列的那一项oSwitch(Tmp)oo case 1:k=0;break;ocase 2:k=1;break;ocase 4:k=2;break;ocase 8:k=3;break;odefault:return;/无键按下oo/低四位置0,放入四列o/-o/定时器0中断程序,不同频率的声音由该中断产生o/-ovoid Play_Tone()interrupt 1oo TH0=Tone_Delay_Tab
17、leKeyNo/256;oTH0=Tone_Delay_TableKeyNo%256;oBEEP=BEEP;oo/-o/主程序o/-ovoid main()oo P0=0 xBF;/初始显示“-”o TMOD=0 x01;o IE=0 x82;owhile(1)oo P1=0 xF0;/发送扫描码o if(p1!=0 xF0)/如果有键按下o o Keys_Scan();/扫描键盘矩阵o P0=DSY_Table KeyNo;/显示按键o TR0=1;/启动定时器,根据KeyNo 发音ooelseoo TR0=0;/停止播放ooDelayMS(2);oo 实物图元器件清单故障排除o将单片机烧录
18、好后o板子焊好后,接上5V稳压源,发现板子没有工作。o我们接上示波器观察ALE脚的输出,为1/6Fosc频率o这说明单片机的正常工作,至少有能保证我们的晶振电路也是正常的。o老师说软件到硬件的实现是一个很复杂的过程,没有人一下子就仿真成功就可以立马调出板子,第一次焊好就能正常的可能性为零,要我们从中发现故障的可能性。o老师说:既然你们的故障,不是出自单片机上,那么你们好好看看输出输到蜂鸣器(负载的波形)o我们先把单片机的P3.0接到示波器观察其波形。o每次按钮的按下,我们能看到一个不同频率从低到高的电压的电压变化的波形,说明送往蜂鸣器的两端都没有反映o排除了焊接上的虚焊和引脚之间的短路发现电路
19、还是驱动不起来,看起来应该是输出的功率不够一开始所采用的电路图增加了三极管驱动电路 在老师的指导下改进的电路在老师的指导下改进的电路电路调试 市场调查市场调查名称:AT89C51 单价:1.6元 名称:电解电容 单价:1.00元名称:瓷介电容 单价:0.25元 名称:数码管 单价:2元 名称:晶振 单价:0.8元名称:碳膜电阻 单价:0.3元 项目体会o 通过对电路的实际操作。既能提高我们的动手。也让我们可以更加的熟悉数字电路!这样对两者之间都一种促进!堪称双赢!o 1、更深入的了解了单片机的程序及电路操作。o 2、一定要每人参与到项目中,了解项目需求,明确项目进度计划。o 3、工作计划很重要,当排好计划后,工作就会有条不紊的进行。o 4、在项目中沟通很重要。o 5、项目拓展。要知其然还要知其所以然。o 6、多花点心思在项目上,只要努力,没有什么不可能的。