《电子琴设计报告.docx》由会员分享,可在线阅读,更多相关《电子琴设计报告.docx(56页珍藏版)》请在第一文库网上搜索。
1、电子琴设计报告摘要功能:本作品是基于单片机控制系统的简易电子琴,有各种友好的菜单界面和显示界面,可实现通过按键控制,发出1、2、3、4、5、6、7i等二H一个音符。该电子琴亦能够自动演奏三首乐曲,且其演奏方式(点播、顺序播放和随机播放)可以通过按键选择(其中点播模式还可以点播之前的录音,可以播放掉电之前保存的录音)。操作者还可以在电子琴演奏时对电子琴进行音调(按犍控制)、音量(电位器)的调节,并能以发光二极管显示播放音量的大小。同时在设置模式下能调节音阶和拍长,音阶和拍长在掉电后仍然保存。另外,它可以对手动编奏的乐曲进行录音,在按下放音键时能演奏出来,同时贮存在eeprom里面,掉电不丢失。还
2、有一键关机功能,一键按下关闭整个电路板的电源。一、方案的设计和论证1、 电源控制控制模块方案(1):采用继电器来控制电源的关断,其优点是电路设计比较简单,但是由于继电器的体积偏大,如果以后要做出易于携带的产品的话,不是很方便;方案(2):运用晶体管的开关功能设计电源开关控制电路,通过向单片机输入外部中断来使得单片机自动控制电源的关断。2、 主控模块这模块主要实现的功能有:错误!未找到引用源。接收由键盘输入的信号并输出相应的操作信号;错误!未找到引用源。控制菜单操作显示器基于以上标示,可考虑采用51系列单片机、AVR单片机,或者ARM等都可以实现,但是从性价比考虑,AVR系列优势比较明显,因此选
3、用之作为主控芯片。至于菜单显示部分可以采用以下两种方案:(1) 1602液晶:它能显示16X2个数字或英文字符,信息量较大,用串行通讯可减少I/O口的占用量。1602的成本中等,是值得考虑的选择。(2) 12864是带中文字库的液晶显示屏,可以显示4X16个汉字,甚至可以显示图案,显示功能较为强大。使用12864可以提供大量信息,但是其价格比较1602液晶要贵几倍。考虑到成本因素,决定采用1602液晶来实现该显示功能。掉电保护电路:(1)使用外部存储器不过得加入外部电路,既加大成本又加大功耗。(2)使用AVR单片机自带的EEPRoM不用增加器件,操作简单。综上所述,我们采用第(2)种掉电保护方
4、案。3、 音量调节模块方案(1):采用数字电位器对音量进行调节,这样做的好处是便于数字控制,可以选择的音量大小不多。方案(2):采用可变电阻进行音量调节,这样可实现音量连续可调。另外,在如何显示音量大小的问题上,我们采用的是以数字芯片TA6777来驱动发光二极管,当音量比较大时,发光二极管亮的个数比较多。4、 功放模块方案(1):采用1M386芯片对对输出的音乐信号进行放大,其优点是电路简单,稳定性强;方案(2):采用TDA2822芯片放大音乐信号,但是TDA2822在单电源供电下,工作不是很稳定。考虑到稳定性因素,选用方案(Do5、 键盘输入模块方案(1):采用矩阵键盘(NXM),每个按键占
5、据行列的一个交点,需要的I/O口数目是N+M,容许的最大键数是NXM。方案(2):新型键盘,用N个I/O口以及一个中断口,可以实现NXN个按键,比较节省I/O资源,故采用之。二、系统框图基于Atme1Mega161电子琴系统的硬件总体结构图如图1所示,主要包括中央处理器MCU单键开关机电路,1602显示模块、功放模块、键盘模块、电平灯频谱显示模块等。图1系统硬件总体结构图三、各模块的设计与论证1、中央处理器MCURIYJSJt1g1SONDAREFww*我ITattoISat图2中央处理器MCU连接电路I-ONDPONDPDO(RXD)PD1(TXD)PDI(INTO)PDJ(INT1)PIX
6、(OC1B)PD5(OCIA)PD6C1CF)PD7(OC2)PAO(ADCO)PAI(ADCDPA2(ADC2)PA3(ADC3)PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7XTAUXTA1I(XOCTO)(AINOINT2)PB3(AXN1OCWPB4(SS)PBJ(MOSt)PM(NOSO)PBiaaoPCO(SCX)PCi(SDA)P(TCK)PCJ(TMS)PCJ(TOO)P(TDDPC6CTOSCnPC:(TOSC2)中央处理器选用的是ATMega161,ATmega16是基于增强的AVRRISC结构的低功耗8位CMoS微控制器。具体的电路连接图如图2所示
7、。PBoPB7用于连接键盘输入(INT2用于键盘的中断输入);PDO用于连接单键开关电路的续电;PD2(INTO)用于连接单键开关电路按键的检测;PD5用于音律PWM的输出;PCoPC7用于连接1CD1602显示输出,其中PCOPC2用于控制1602的选通、读写控制等的操作,PC3PC7连接74HC595,实现串行数据转并行数据。单片机输出频率CTC不同的信号来产生各种音符,将歌曲各个音符的转化成相应的数字信号,存放在单片机程序寄存器中,当播放音乐时,程序从该寄存器里读取数据,然后以CTC信号的模式传给功放电路,实现放音乐的功能。当要向单片机录入音乐时,通过键盘上的按键,输入不同的音符,接下来
8、单片机可以记录下音符以及其持续的时间,然后存入程序寄存器中,当录音结束,按下“录入确认键”,按下来就可以从菜单里选择播放刚才录入的音乐。2、单键开关机模块该电路的工作原理是:接通KI(总电源开关,外电源接到PO)后,按动轻触开关S2,三极管Q29012导通,VCC输出高电平,单片机接通电源工作后,第一时间给P_OUT-个高电平,三极管Q19013导通,这样,即使按键S2松开了,Q2也依然导通,电路依然接通。当按键S2再次按下时,单片机检测到PN为低电平,这是单片机可以延时一段时间后,将JOUT置为低电平,QI截止,Q2也同时截止,电路断开。3、电平灯频谱显示模块为了显示的效果更炫,本硬件电路特
9、意增加了一个电平灯频谱显示模块,该模块采用的是一块TP7666芯片,该芯片在老式收音机上非常常见,现在已经很难买到。该芯片具有双路5点电平显示,而且外围电路原件很少。4、6X6键盘模块该电路的工作原理是:待机时,PORT1PORT6输出高电平;当某个键按下时,PORT7由高电平变为低电平,由此产生一个中断;MCU启动按键扫描,如按下的是K30时,置PORT1=H,扫描PORT26的输入结果为1111,没有扫描到所需的结果;继续置P0RT2=H,扫描PORT1、PORT36的输入结果为H111,按键S30就被唯一确定了。o5、1CDI602液晶显示模块该模块的连接比较简单,但是若直接使用并行数据
10、传送的话要用到11个io口,这里为了节省IO口资源,使用也一片74HC595串行数据转并行数据芯片,该芯片与单片机连接最多只需要5个IO口,这样连接一片1602只需要8个IO口,节省了3个IO口。具体的硬件连接图如下图5所示。电位器RW1可用于调节背光的亮度,RW2可用于调节液晶的对比度。VCCD741S593困51CDI602液晶显示模块电路GND6、小功率功放模块这里的功放模块采用了传统的1M386芯片,采用该芯片是因为1M386具有自身功耗低,电压增益可调整,电源电压范围大,外接元件少和总谐波失真小等优点,尤其是在增益为20DB时使用的外围原件极少。具体的单路连接如下图6所示。图6小功率
11、功放模块电路四、软件程序流程图开机各类初始化(包括欢迎界面)手动弹奏初始化手动弹奏点播菜单歌曲3春奏单也音置菜动动录设主HHID3.4.1.2.自动弹卷主菜单1 .点播2 .啖序瘩放3 .乱序播放I嗔序播放乱序播放录音放音歌曲4拍长设置音阶设置五、测量与分析Kdo)2(re)3(mi)4(fa)5(so1)6(1a)7(si)降C131Hz147Hz165Hz174.5Hz196Hz220Hz247Hz中央C261.5Hz293.5Hz329.5Hz349Hz392Hz440Hz494Hz升C523HZ587Hz659Hz698Hz784Hz880Hz988Hz输出音调对应的频率表按C调来说1
12、=261.5HZ2=293.5HZ3=329.5HZ4=349HZ5=392HZ6=440HZ7=494HZ低7个苦调后1=131Hz2=147Hz3=165Hz4=174.5Hz5=196Hz6=220Hz7=247Hz高7个音调后1=523Hz2=587Hz3=659Hz4=698Hz5=784Hz6=88OHz7=988Hz六、总结经过一翻辛苦努力,终于搞定了电子琴了。这个过程中团队合作让我们收获很多。三个同学一起做,不可能每个同学对每项内容都了解得很透彻,需要知识互补。另外,遇到困难的时候不能指望让一个同学独自解决,团队合作不崇尚单打独斗。七、源程序主文件go.c:主文件,包含主函数#
13、inc1ude#inc1ude#inc1ude#defineucharunsignedchar#defineuintunsignedint#definevucharvo1ati1eunsignedchar#definevuintvo1ati1eunsignedint#definerecord_max160变量定义vucharkey_int=0,mode_fr=0,counter_en_fr=0,pop_en_fr=0;vucharrow=0,scro11bar=Uvo1ume,temp,de1ayMs,tona1ity4one;vucharinttemp;ucharmusic1ength,re
14、cord1ength;uintbe11_standard_time;vuintcounter-ms=0;vucharcounter_record;vucharsong_4record_max2;包含头文件子函数清单#inc1ude,functionjist.h数据#inc1ude,data.h延时#inc1udede1ay.h键盘中断inc1ude,int2.h/液晶inc1ude,ts1620.h发声部分inc1ude,be11.h功能函数1#inc1ude,fun.h功能函数2#inc1ude,fun-need-check.hvoidmain()PoWeJinit();/一键关机初始化whiie(1)(ts162(1init(),液晶初始化WeICOme();欢迎界面a11init();各类变量初始化im2_init();键盘中断初始化mode_fr=0;极其的关键变量,记录状态whi1e(key_int!=keyreset)(if(mode_fr=0)menu();主菜单if(mode_fr=1)manu1();/模式1,手动弹奏初始化if(mode_fr=1)manI11CheCk();模式1,手动弹奏if(mode_fr=20)au1op1ay();模式20,自动弹奏主菜单