三电实验-简易电子琴设计.doc_第1页
三电实验-简易电子琴设计.doc_第2页
三电实验-简易电子琴设计.doc_第3页
三电实验-简易电子琴设计.doc_第4页
三电实验-简易电子琴设计.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子系统设计工程设计报告简易电子琴设计作 者 姓 名: 作 者 单 位: 提交报告日期: 2012 年 2 月 25 日 二一二年二月目录一、 功能及性能指标11、功能12、 性能指标2二、 设计方案21、 设计思路22、 设计方案3三、 系统结构设计31、相关系统介绍32、部分电路设计6四、 材料8五、 调试方案81、键盘的选择82、音频放大电路的选择103、音量控制电路选择104、端口选择105、焊接问题11六、 测试结果及分析111、仿真设计112、 实际调试123、 出现的问题12七、程序附录12一、 功能及性能指标1、功能本次实验是利用51单片机为核心控制,加上其他辅助电路和器件自制了一个简易电子乐器实物,具体实现的功能如下:(1) 、自己按键演奏音乐:通过两个18键盘组,实现两个八度音阶,自己通过按键演奏歌曲的功能。(2) 、播放音乐:当外部控制播放/按键按键切换到播放音乐模式时,可以通过第一个18键盘组按键,实现8首不同歌曲的自动播放。(3) 、显示按键功能:有键按下时,可以通过7段数码显示管可以显示出对应的按键。(4) 、调音功能:可以实现音量的手动调节。2、 性能指标通过对本次实验的深入分析,我们得出对我们性能影响因素,并得到了相应的解决如下。(1) 、各功能协调程度:通过51单片机的软件解决了16个按键,两个控制键,灯的显示各个部分的协调。(2) 、放音质量的好坏:我们通过在51单片机输出到喇叭之间增加lm386功放,和相应的旁路滤波电路,实现放音质量的改善。(3) 、音色的好坏:我们通过两个18键盘组实现两个八度音阶,相比基本要求的一阶,有了很大的改善。(4) 、播放歌曲:我们可以播放8首已存的歌曲,并且,通过外部播放/按键控制的切换,实现该八个键盘的分时利用。(5) 、按键的准确识别:通过软件控制识别,并延时去抖动,等过程进行准确的识别。(6) 、音量的大小:通过在51单片机输出和扬声器的输入端增加一个滑动变阻器,控制扬声器输入电流的大小,俩实现音量控制的大小。二、 设计方案1、 设计思路我们实验设计思路是以51单片机为主控核心,本系统分为三部分:音乐播放部分,电子琴弹奏部分,音频功放部分。与矩阵键盘、低压音频功率放大器LM386、扬声器、LED显示管模块一起组合而成。其图如下,通过c语言进行编程控制,51单片机的几个口分别接键盘、led显示器、放歌/演奏控制键、控制显示led灯,首先,初始化时是按键演奏功能,有演奏按键按下时,调用中断服务程序,判断对应的按键,然后,通过程序控制led显示器的显示,和扬声器的对应音调的发音,并且按键的长短决定放音时间的长短。其次,当演奏控制键,按下时,切换到放歌模式,可以通过上述按键,进行选择放哪首歌,并进行放歌,并显示按的哪个键,进而得知放哪首歌。我们结合设计思路和实际情况,我们设计思路的实践主要通过两步,首先通过仿真进行设计,主要通过proteus进行仿真实际电路,利用Keil uVision进行c语言的程序控制,仿真出我们想要的功能,然后根据我们的仿真进行实物的连接和验证,最后完成实验任务。2、 设计方案通过对实验要求,和实验内容进行深入分析,只能选51单片机为主控核心,我们针对各个部分选择了以下几种不同设计方案:(1) 、演奏键盘的选择:我们前期设计方案是用一个的16个键盘组,其控制原理是两个4分别控制按键的横坐标和纵坐标,当有键按下时,通过坐标形式得到对应的按键,这种设计主要是用到的端口少,结构紧凑,但是电路焊接麻烦,容易出错,又我们结合实验室中实际器材,实验室中只有18共阴极按键,我们就选择了两个18的这种按键,使我们实物结构更为合理,方便了实验。(2) 、音乐播放:针对音乐播放,前期思考的是用独立的按键控制放歌,但是这样的话,就需要更多的按键,并且51单片机的接口比较少,这样的话,就能放的歌就少了,所以我们通过两个放歌、演奏控制按键,进行切换后,利用演奏按键进行放歌,实现放多首歌,且键盘减少,分时复用。(3) 、扬声器发声:扬声器发声的话就得有驱动,考虑到实验板P0口自带有驱动,我们可以让扬声器输入接P0,但是考虑到实际情况,这样出来的声音没有滤波,效果不好,我们就在扬声器输入端增加一个音频功放lm386和相应的滤波电路,使扬声器的声音好听。三、 系统结构设计1、相关系统介绍(1)、AT89C51简介AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,俗称单片机。AT89C205是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图所示。(2) 、放音原理:一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P3.7反相,然后重复计时再反相。就可在P3.7引脚上得到此频率的脉冲。利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T1/5231912s,因此只要令计数器计时956s/1s956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。 计数脉冲值与频率的关系式是: Nfi2fr 式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。其计数初值T的求法如下: T65536N65536fi2fr例如:设K65536,fi1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。 T65536N65536fi2fr6553610000002fr 65536500000/fr低音DO的T65536500000/26263628中音DO的T65536500000/52364580高音DO的T65536500000/104665058 单片机12MHZ晶振,高中低音符与计数T0相关的计数值如表所示 音符频率表音符频率(HZ)简谱码(T值)音符频率(HZ)简谱码(T值)休止00中 4 FA69864820低1DO26263628中 5 SO78464898低2RE29463835中 6 LA88064968低 3 M33064021中 7 SI98865030低 4 FA34964103高 1 DO104665058低 5 SO39264260高 2 RE117565110低 6 LA44064400高 3 M131865157低 7 SI49464524高 4 FA139765178中 1 DO52364580高 5 SO156865217中 2 RE58764684高 6 LA176065252中 3 M65964777高 7 SI196765283我们要为这个音符建立一个表格,单片机通过查表的方式来获得相应的数 uint code tab= 0,63628,63835,64021,64103,64260,64400,64524, 64580,64684,64777,64820,64898,64968,65030, 65058,65110,65157,65178,65217,65252,65283 音乐的音拍,一个节拍为单位(C调)(如表所示) 曲调值表曲调值DELAY曲调值DELAY调4/4125ms调4/462ms调3/4187ms调3/494ms调2/4250ms调2/4125ms2、部分电路设计本系统分为三部分:音乐播放部分,电子琴弹奏部分,音频功放部分。具体如下: (1)、音乐播放部分乐音实际上是一组固定频率的波动,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,利用LM386放大这个音频信号,通过扬声器发出乐音。因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。乐曲中,每一音符对应着确定的频率,我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏效果。播放音乐程序流图如下: 该程序实现的是单首曲目循环播放,无法在程序内部实现歌曲的切换,可通过外部功能键来实现曲目及功能的切换。 (2)、电子琴弹奏部分实际上就是把每个按键所对应的值经过处理后发给单片机,再在单片机内把数字当作指针指向所对应的音符。程序设计流图:该系统通过电子琴按键随意键入所要表达的音符,作为电平送给主体电路,中央处理器通过识别,解码输出音符,在扬声器中发出有效的声音,通过适当的时间延迟可使声音更加自然。这样就可以不断的弹奏音乐。 (3)、音频功放部分在一定频率范围内,具有固定频率的震动就能产生乐音,但是单片机产生的音频脉冲直接驱动扬声器并不能产生所要实现的音乐,因为它没有足够的驱动能力,这就需要音频功率放大电路。LM386适合于电池工作,供电范围为4-12V,电压增益范围为20200V,且增益可调。GAIN(1脚、8脚):增益控制引脚。如果此两脚悬空,则增益为20V;如果两脚之间接一个大的极性电容,则增益可达到200V;如果再和电容串接一个电阻,增益可在20200V之间变化,实现对音量的调节。四、 材料单片机AT89C51一片;18键盘两片;按键2个;低压音频功率放大器LM386一片;扬声器一个; 电路板一块;导线若干;LED数码管一只;1K电位器一个;1uf电容一个,0.0047uf电容一个;10uf电解电容一个,47uf电解电容一个;10k电阻两个,470k电阻一个;发光二极管两个。五、 调试方案在设计电路时,增加了LED数字显示,使显示数字与按键音阶对应,同时在一定程度上可检测电路是否连通,即在确保AT89C51正常的情况下,若LED 灯不亮,表示电路可能没有连通,需检查电源线路;若LED灯亮,但按键不响,可能是连线问题,检查各端口插线和放音线路。1、键盘的选择 电子琴的键盘一般有两种,44键盘和116键盘。(1)、44键盘 优点:占用I/O口少,在需要的键数比较多时,采用矩阵法来做键盘较好。 缺点:矩阵式结构的键盘比直接法复杂,识别也要复杂一些。 按键识别方法:“行扫描法”。 1)、判断键盘中有无键按下 将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 2)、判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 程序如下: uchar getkey(void) uchar scancode,tmpcode;if (P0&0xf0)=0xf0)return(0);scancode = 0xfe;while(scancode&0x10)!=0)/ 逐行扫描P0 = scancode;/ 输出行扫描码if (P0&0xf0)!=0xf0)/ 本行有键按下tmpcode = (P0&0xf0)|0x0f; / 返回特征字节码,为1的位即对应于行和列 return(scancode)+(tmpcode);else scancode = (scancode1)|0x01;/ 行扫描码左移一位(2)、116键盘 优点:查询简单,程序简单 缺点:占用I/O端口较多。 按键识别:所有键接低电平,查询端口,若为低电平,则返回端口值。 刚开始设计时使用的是44键盘,但发下器件后因为只有18键盘,因此选择了116键盘的模式。同时因为端口够用,116键盘模式更为简便。2、音频放大电路的选择由AT89C51产生的音频信号较为微弱,不能直接驱动扬声器发声。因此需要放大电路放大音频信号。放大电路有三种选择:AT89C51的P0口的驱动电路,利用三极管构造放大电路,利用放大芯片LM386。(1)、AT89C51的P0口的驱动电路直接放大电流,没有选频功能,因此虽能驱动喇叭,但音质不好。(2)、利用三极管构造放大电路可利用所学知识构造放大电路,并有选频功能。(3)、利用放大芯片LM386LM386拥有很多优点,并可改变增益,且电路较为简单,性能较好。因此最后选择了这种放大电路。3、音量控制电路选择扬声器的音量由其电流强度控制,电流越强音量越大,反之音量越小。改变增益有两种选择:利用LM386的增益改变功能,或直接在输出电路连接一个电位器。(1)、利用LM386的增益改变功能在1脚和8脚间连接一个电容和一个电位器,通过改变电阻大小可使增益在20200之间变换。(2)、在输出电路连接一个电位器简单方便,连接简单,所以选择这种方法改变音量。4、端口选择刚开始使用P0和P1连接16个音阶按键,利用P2用于LED数字显示。刚开始时播放正常,但是之后P0口的键盘发生了故障,声音频率不正常,但是选歌功能正常,因此可断定P0口的选址没有故障;之后检查了程序,并通过仿真确定程序正常;之后将程序拷入新的AT89C51芯片,装入电路后故障仍然存在,说明与芯片无关;音乐播放功能及P1口高八阶音阶播放正常,说明音频放大及播放电路正常;之后装入新的P0口的驱动芯片,故障依然存在,因此与驱动芯片无关;之后经过分析,确定是电路板故障,但并不是很大。查询资料后发现,P0口一般用于信号输出,其他端口可用于信号控制,因此将程序改变,将P0口与P2口功能调换。经检查功能实现,故障消除。这次通过分析一步步确定故障原因并解决故障,收获很大。5、焊接问题电子琴设计焊接主要在音频功放部分。开始焊接时使用配发工具包中的电烙铁,由于焊锡不粘电路板同时电烙铁头比较粗,使焊接点成球状,不很好。后来改用实验室电烙铁(头较尖),并注意焊接手法,焊接较为成功。六、 测试结果及分析1、仿真设计我们实验仿真电路图如图所示: 其中,51单片机的P0口接七段led显示灯,P1、P2口接演奏按键,P3口的P3.0接蓝色放音控制选择显示灯,P3.1接红色按键演奏控制选择显示灯,P3.2接放音控制选择键,P3.3接演奏控制选择键。P3.7接输出。初始状态是演奏模式,在演奏模式下,当有键按下时,51单片机识别按键,并使在P0口显示按键的数值,并控制扬声器发声。当切换到放歌模式时,P2口的8个按键对应有8首歌,可以进行选择放歌。通过仿真,我们可以得到我们想要的结果,能够对实验的各个功能进行仿真,达到了实验仿真的目的,为实际电路打好基础。2、 实际调试实际调试是按照仿真的结果进行的,连接好电路后,接电源,可以得到,当有键按下时,可以看到七段数码显示管显示出相应的按键,在演奏模式下,可以听到对应的声音。可以通过放歌控制按键切换到放歌模式,在放歌模式下,可以通过P1口的8个按键,放不同的8首歌曲,并且在扬声器的输入端增加一个滑动变阻器来实现音量的调节,实验达到了实验目的。3、 出现的问题(1) 、在实验过程中,前期仿真时,在扬声器输入端,未加音频放大电路lm386时,可以听到音质挺好,但是在加了音频放大电路时,在放音时就会听到持续的噪音,但是在实际电路中加了该音频放大电路后,音质就很好,听教员讲解,和自己分析,得到扬声器输入接的是51单片机的一个输出端,为数字的高低电平,而扬声器放音是,模拟的信号,从频率来说,就是多频和单频,仿真时,由于仿真软件的自己缺陷,有可能时应该滤除的频率,未滤除,导致出现了该结果。(2) 、在实际调试过程中,P0口存在问题,使得我们刚开始有一组按键是接在P0口的,显示管接在P2口,但是当P0有键按下时会出现很多噪音,音质不好,我们就将P0口和P2口互换,软件等也做了相应的调整,得到了解决,但是可以看出P0口的显示还是有一些问题。七、程序附录#include #include #include #include #define uchar unsigned char#define uint unsigned intuchar STH0; /定时器计数初值uchar STL0; bit FY=0; /放乐曲时FY=1, 电子琴弹奏时FY=0uchar Song_Index=0,Tone_Index=0; /放音乐的参数uchar k, key;sbit SPK=P37;sbit LED1=P30;sbit LED2=P31;uchar code DSY_CODE= 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71 ;uchar code Song50= /任意选几首音乐的旋律 1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1,3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,5,3,3,2,1,1,-1,3,2,1,3,2,1,1,2,3,2,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,3,2,1,3,2,1,1,-1,10,10,10,9,10,9,10,9,9,6,6,7,8,9,8,7,6,5,6,-1,10,10,10,9,10,13,12,13,12,12,9,9,10,11,12,11,10,9,8,10,10,-1,13,14,13,12,12,10,12,10,12,9,13,12,10,9,10,10,-1,9,13,13,13,8,13,13,13,13,14,15,14,13,14,13,14,10,10,-1,13,14,13,12,12,10,12,10,12,13,14,13,14,13,14,10,-1;uchar code Len50= /上面几首音乐的旋律每个音符对应的节拍 1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,-1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,-1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,-1,1,1,1,1,2,1,1,1,1,0,1,1,0,1,1,0,1,1,2,-1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,3,1,-1,0,1,1,0,1,1,2,1,1,0,1,1,0,1,1,2,-1,0,1,1,2,0,1,1,0,1,1,0,1,1,0,1,1,2,1,-1,0,1,1,0,1,1,2,1,1,0,1,1,0,1,1,4,-1;/* 音符与计数值对应表 */uint code tab= 0,63628,63835,64021,64103,64260,64400,64524, 64580,64684,64777,64820,64898,64968,65030, 65058,65110,65157,65178,65217,65252,65283; void delay1(uint ms) /播放歌曲时实现节拍的延时函数 uchar t; while(ms-) for (t=0;t0;i-);/* 键扫描函数 */* 外部中断0 ,这里是弹唱按键*/void EX0_INT() interrupt 0 FY=0; LED1=1; LED2=0; /* 外部中断1 ,这里是播放按键*/void EX1_INT() interrupt 2 FY=1; LED1=0; LED2=1; /* 定时器0中断服务子程序 */void time0_int(void) interrupt 1 using 0/* 设置计数初值 */ TH0 = STH0; TL0 = STL0; SPK=!SPK; / 反相,产生输出脉冲 P0=DSY_CODEk ;void main(void) LED1=1; LED2=0; P0=0x3f; IE=0x87; TMOD=0x11; IT0=1; IT1=1; while(1) P2 = 0xff; / 发全0列扫描码if (P1&0xff)!=0xff|(P2&0xff)!=0xff)/ 若有键按下 delay();/ 延时去抖动if (P2&0xff)!=0xff|(P1&0xff)!

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论