下载

0下载券

加入VIP
  • 专属下载券
  • 上传内容扩展
  • 资料优先审核
  • 免费资料无限下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 基于单片机的电子琴设计

基于单片机的电子琴设计.doc

基于单片机的电子琴设计

受伤勒-
2018-01-10 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《基于单片机的电子琴设计doc》,可适用于IT/计算机领域

基于单片机的电子琴设计西华大学电气信息学院智能化电子系统设计报告目录前言储蛔馑松菌识彤饫恰堵滤奈埃总体方案设计荸桧匍昀宋挑贤殚溷姹缁复蔚设计内容佴跽件榔娠谂遘袁跬渖噌是夥方案比较方案选择滔过伉潦甘盐莜纬箕妃楝包讯单元模块电路简介与设计敢蜜诚妮厮疵淳突磲鄂噬刮蝈单片机主芯片电路设计渔莼苕箦浑慎忿骚踌迂圆台咦时钟电路设计瞬熏嚏忭咏鸬徊层苤椟飕猹散复位电路设计穑显渫灏忑钩这捷咆褥罨甏越按键模块电路设计梳孙棚秕衡倥聿承喑侨鹁撕虐LED数码管显示电路模块设计抉蚬杲叛剀曲叱向弈鞭婊豹室扬声器电路模块设计嘣捡泻鸪刈涩丫聋刮叙砷筅莶软件设计蹭义谲芷鹊掳皤应坦妻煮毳蔹Protues、Keil简介殴首画即谓蠊豳狲戏栓士膘旦设计原理和功能氖涫岳拱鸥塄酒恶鼾搋螋滩媸设计原理封驶翮培潮鲚送淡蚰篮荏溜涤软件功能迓际赠花枨咭氛枝槌酾掼截辱设计框图姊审戊诶肉鞯既休镐骛瀣促编主程序楂峪踌铁纤菩嶂鲆善镉悔叁缙系统调试譬驻液莅撙攀埯狞恋膝盥诔馀硬件调试巾攘妙咬饬醺颅旱犹毵劐忒盔软件调试龋旗距軎舅喔佩鄞铜憝夏归鳜各功能模块的独立调试滇哦氓狗陡翮济酥焰首讫醚挞各功能模块的联调顶帝姘鼎肪迪肃趴借什绽蟀擀指标参数眠粮札燧毵文钽铳莲俄舰碘搋结论怨摹拿敞乱击怂泡浼颤咆哼懒总结与体会甑佥盎芾堇等啁宦际净倜眭病致谢翰盆啕怦闩瞻萸俏浇瞧趣卧棠参考文献锏轵湛芫恃鹞刎尴跞畏尖晏抱附录一:相关设计图坝肌窿涛结裘繁崤雠炖女疾糌西华大学电气信息学院智能化电子系统设计报告附录二:相关设计软件怏变薅脑癌毁裂称玎氐圭谵恂前言单片微型计算机是大规模集成电路技术发展的产物属第四代电子计算机它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发的控生变革。因此单片机的开发应用已成为高科技和工程领域的一项重大课题。电子琴是现代电子科技与音乐结合的产物是一种新型的键盘乐器。它在现代音乐扮演着重要的角色单片机具有强大制功能和灵活的编程实现特性它已经溶入现代人们的生活中成为不可替代的一部分。本文的主要内容是用ATS单片机为核心控制元件设计一个电子琴。以单片机作为主控核心与键盘、扬声器等模块组成核心主控制模块在主控模块上设有个按键和扬声器其中个键用于音符输入个键作为功能键。一首音乐是许多不同的音阶组成的而每个音阶对应着不同的频率这样我们就可以利用不同的频率的组合即可构成我们所想要的音乐了当然对于单片机来产生不同的频率非常方便我们可以利用单片机的定时计数器T来产生这样的方波频率信号因此只需把一首歌曲的音阶对应频率关系弄正确即可。本文主要对使用单片机设计简易电子琴进行了分析并介绍了基于单片机电子琴系统硬件组成。利用单片机产生不同频率来获得我们要求的音阶最终可随意弹奏想要表达的音乐。并且本文分别从原理图主要芯片各模块原理及各模块的程序的调试来详细阐述。本系统是简易电子琴的设计按下键盘矩阵中的按键会使扬声器播放对应的音符同时数码管显示当前按键及播放时间。在此基础上我们作进一步的扩展使其具有回放及自动播放所存曲目的功能。通过设计本系统可了解单片机的基本功能对单片机的应用有一个更深的认识。第页西华大学电气信息学院智能化电子系统设计报告总体方案设计设计内容本系统分为两个部分一个是音乐播放另一个就是电子琴弹奏。关于声音的处理使用单片机C语言利用定时器来控制频率而每个音符的符号只是存在我自己定义的表中。具体要求如下:要求达到电子琴的基本功能可以用弹奏出简单的乐曲。用键盘作出电子琴的按键每键代表一个音符。各音符按一定的顺序排列必须符合电子琴的按键排列顺序。弹奏电子琴时能播放出准确的声音不弹奏时可以播放内置音乐。记录所弹音符和持续时间能够回放。方案比较方案一:采用CPLD外接扬声器、键盘、数码管等。个译码输出显示的数码管以显示目标芯片的位输出信号且个发光管也能显示目标器件的位输出信号。时钟为MHz输出接扬声器。具体过程:主系统可由两个模块组成:当系统检测到有按键按下时对应音符的频率由模块获得这是一个数控分频器。由其clk端输入一具有较高频率的信号分频后输出。音符的持续时间须根据乐曲的速度及每个音符的节拍数决定模块的功能是为模块提供决定所发音的分频预置值而此数在模块输入口停留的时间即为此音符的节拍值。方案二:采用单片机外接扬声器、键盘、数码管等。具体过程:当系统扫描到键盘上有键子被按下则快速检测出是那一个键子然后单片机的定时器被启动发出一定频率的脉冲该频率的脉冲经喇叭驱动电路放大滤波后就会发出相应的音调。如果在前一个按下的键发声的同时有另一个键被按下则启用中断系统前面键的发音停止转到后按的键的发音程序发出后按的键的音。第页西华大学电气信息学院智能化电子系统设计报告方案选择对比两套方案各有优缺点方案一采用CPLD工作速度快系统稳定效果好但是其价格昂贵而方案二在设计这样小型电子系统方面无论是效果还是工作速度与方案一都相差不大而且价格较为便宜。因此选择方案二即单片机加外设的方式设计该系统较好。单元模块电路简介与设计基于单片机系统的电子琴设计基本设计结构如下图所示。X独立键盘扬声器时钟电路ATCLED显示电路复位电路图电子琴设计系统原理图该系统的硬件电路主要由ATC单片机、键盘电路、扬声器电路、LED数码显示电路等模块组成具体原理图如下:第页西华大学电气信息学院智能化电子系统设计报告单片机主芯片电路设计时钟电路设计图单片机时钟电路XTAL、XTAL分别是系统时钟信号fosc的输入和输出端晶振电路的设计可以使用两个电容和一个晶振即可用来产生一个约等于MHZ的稳定的频率。复位电路设计第页西华大学电气信息学院智能化电子系统设计报告图单片机复位电路复位是单片机的初始化操作其作用是使CPU和系统中其他功能部件都处在确定的状态并从这个状态开始工作。本系统采用上电复位电路为了防止干扰串扰复位端所以再接一个去耦电容。按键模块电路设计图按键模块电路在P口连接有个按键开关加个上拉电阻它们一端接伏电源一端接地。只要有一个按键被按下并被单片机扫描到则会播放发出音符。第页西华大学电气信息学院智能化电子系统设计报告LED数码管显示电路模块设计图LED数码显示电路本系统用单片机的P口来控制LED显示器的数字显示。当七个音符按键~中有被按下时LED数码管将对应显示出该音符的数字。从而可以通过手动和眼看来确定所按的是哪个音符应该发出哪个音符的声音。LED显示器还用来显示对记录所弹音符的持续时间。第页西华大学电气信息学院智能化电子系统设计报告扬声器电路模块设计图扬声器电路电磁式蜂鸣器由振荡器、电磁线圈、磁铁振动膜片及外壳等组成。接通电源后振荡器产生的音频信号电流通过电磁线圈使电磁线圈产生磁场。振荡膜片在电磁线圈和磁铁的相互作用下周期性的振动发声。本设计蜂鸣器通过驱动电路与单片机的P口连接单片机就可以通过P的输出信号频率进行控制。另外通过示波器接到P可方便我们观察音频信号的波形。第页西华大学电气信息学院智能化电子系统设计报告软件设计本设计的软件是在Keil中编译在Protues中进行仿真的。本章先对编译软件Keil和仿真软件Protues进行了简要的介绍然后对本软件设计的原理、功能及流程图进行了较为详细的说明最后给出了本设计的主程序。Protues、Keil简介Proteus是英国Labcenter公司研发的是目前世界上最先进最完整的嵌入式系统设计与仿真软件平台。它是一种可视化的支持多种型号单片机(如PIC,AVR,Motorolahcll等)并且支持当前流行的单片机开发环境(keilMPLAB,IAR)是目前电子设计爱好者广泛是用的电子线路设计与仿真软件protel和Multisim功能的联合和进一步扩展。它的功能不是单一的它有强大的软件库仿真功能可以和Multisin相媲美并且有它没有的单片机仿真功能并且还有pcb电路制版功能可以和protel相媲美。KeilC是美国KeilSoftware公司出品的系列兼容单片机C语言软件开发系统与汇编相比C语言在功能上、结构性、可读性、可维护性上有明显的优势因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN、NT、WIN、WINXP等操作系统。如果你使用C语言编程那么Keil几乎就是你的不二之选即使不使用C语言而仅用汇编语言编程其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。KeilC软件提供丰富的库函数和功能强大的集成开发调试工具全Windows界面。另外重要的一点只要看一下编译后生成的汇编代码就能体会到KeilC生成的目标代码效率非常之高多数语句生成的汇编代码很紧凑容易理解。在开发大型软件时更能体现高级语言的优势。设计原理和功能设计原理本课程设计的软件模块是在Keil中编译在Protues中进行仿真的。而Keil编译软第页西华大学电气信息学院智能化电子系统设计报告件和Protues仿真软件已在前面介绍这里不再赘述。软件设计是牢牢地基于硬件结构的脱离硬件软件的功能就无法在实际中体现出来。本课程设计中硬件由音符信号输入模块、单片机控制模块、LED显示模块、音频信号输出模块。结合硬件结构我们将本软件设计分为了手动模式记录模式回放模式及自动播放模式这四个功能模式它们之间的切换是通过功能键来切换的。为将本软件设计原理较为清晰的描述出来下面将设计原理分为音符信号输入原理音频信号产生原理多功能键复用原理自动播放音乐原理记录、回放功能原理数码管显示原理这六个部分进行介绍:第一、音符信号输入原理我们知道要有音频信号输出一方面可以通过读取存储器中已存的数据另一方面可以通过外部输入实现。本课程设计中的音符信号输入是通过键盘输入的方式实现的。涉及到键盘则要解决的问题是如何进行按键消抖如何完成音符识别最终实现音符信号的输入。()按键消抖。在按键时我们希望按键能实现电平的迅速变化其理想的电平变化波形应是方波但实际并非如此这是因为按键中存在抖动现象。这个抖动现象体现为按键前后电平并非马上从一个稳定状态变为另一个稳定状态而是在这两个状态之间进行快速的交替变化。这给我们准确输入音符信号带来极大困难因此我们必须进行消抖。而消抖有两种方法其一是硬件消抖其二是软件消抖。考虑到用程序进行延时消抖很方便也能很好的实现消抖功能因此本设计就是采用软件进行延时消抖的方法。所谓延时消抖即当单片机检测到有电平发生变化时调用一个ms的延时子程序以屏蔽抖动中电平变化。然后再进行电平检测从而确定键是否按下这样大大的提高了音符信号输入的准确性。()音符识别。本课程设计中的核心板中有个非编码的独立键盘为充分利用和新板提供的硬件资源我们组就直接利用这个键盘而未外扩。当我们按下键时如何让单片机识别按下的是哪个键呢,又如何识别输入的是哪个音符信号呢,这又是二个问题。因为只有让单片机清楚按下的是哪个键才能确定该输出那个频率的音频信号。在核心板上个独立键盘是与单片机寄存器P的个端口依次相连的程序设计中P口先置为高电平我们再进行键盘扫描确定P的那位为低电平这样就可确定是那个键按下去了。而前个键盘每个都是与特定音符对应的这样单片机可以通过确定按下的键来确定输入的音符信号。例如键被人为定义为中音DO当单片机扫描出P为低电平时则单片机确定按下的是键经过定时器T及相关程序处理则产生中音DO的音频脉冲然后输出经过放大经扬声器产生能听到的声音。第二、音频脉冲产生原理上文中谈到单片机如何识别输入的音符信号那么之后单片机如何产生对应的音频第页西华大学电气信息学院智能化电子系统设计报告脉冲呢。经过查资料我们了解到要产生某一音符的音频脉冲只需先清楚该音符对应的频率然后求出其半周期再用该半周期除以单片机的一个机器周期这样就得到了定时器T的计数次数然后用减去该值对求模便得到TH的初值对求余便得到TL的初值。这样就得到了T的初值程序中启动T每到T计数溢出产生溢出中断在中断程序中给P电平取反这样P就可以产生该音符的音频信号了。例如中音DO频率为HZ其半周期为T==us则定时器T的初值为N=usus=每到T计数次时产生溢出中断再在中断程序中给P电平取反则P口就可产生频率为HZ的音频脉冲了。注:上述中us是晶振为MHZ情况下的而实验板上用的是MHZ经计算对中音DOT的计数次数取整后为而由反过来可求出音频频率为HZ和HZ的相对误差仅为,可见对于晶振为MHZ的单片机计算T初值时仍可将单片机机器周期当做us来计算这样提高了计算效率。下面是定时器T初值即T值的计算公式:T=,FiFr,其中Fi为us的倒数即MHZFr为对应音符的频率。下面是C调各音符频率与定时器T的初值T值的对照表:频率简谱码频率简谱码(T音符(HZ)(HZ)(T值)音符值)休止中FA低DO中SO低RE中LA低MI中SI低FA高DO低SO高RE低LA高MI低SI高FA中DO高SO第页西华大学电气信息学院智能化电子系统设计报告中RE高LA中MI高SI表音符频率与T值对照表了解以上原理后要实现由按键输入的音符信号转变成对应的音频脉冲我们可以为各个音符建立一个表格单片机通过查表的方式来获得相应的数据。因为在本课程设计中我组仅采用了个键则我们仅输入中频的个音符信号下面是用C语言编的T值表当输入某个音符信号时如输入中音RE则我们可以把下表中的tab值赋给T从而产生中音RE。uintcodetab={,,,,,,,第三、多功能键复用原理在硬件结构中的音符信号输入模块中键即与P直接相连的键是功能键且实现多个功能。单键多功能是通过单片机外部中断来实现的。而核心板中键和P均与外部中断接口P无电气连接实现时可通过外扩接口用带帽的的导线实现二者的电气连接。程序中定义一个计数变量每当单片机检测到键按下时在外部中断程序中使计数变量加一然后通过检测计数变量的值单片机执行相应的程序从而实现不同的功能。第四、自动播放音乐原理我们知道乐谱是不同音符、节拍有机的组合而音符脉冲频率原理我们通过上文已知晓现在就要明白节拍的产生原理。节拍的产生是通过调用适当的延时子程序来实现的。至于延时多长时间是根据节拍来定的。如设拍为DELAY(延时子程序名)则拍应为DELAY以此类推。因此对于一确定的乐谱我们只要求出该乐谱特定调的拍时间其他拍就是的倍数。以下表是各调的与拍的延时值对照表:各调拍的延时值各调拍的延时值曲调值曲调值DELAYDELAY调调msms调调msms调调msms表各调的与拍的延时值对照表明白了这些我们要进行自动播放就较容易了。我们只需把要播放的乐谱中出现第页西华大学电气信息学院智能化电子系统设计报告的音符及其节拍按音符在乐谱中出现的顺序编成一个表并存在单片机的ROM中程序进入自动模式时在调用相应程序将其顺序读出即可。这样就实现了音乐的自动播放。具体实现为将乐谱中音符与其节拍用一个字节表示这样乐谱中顺序出现的音符及其节拍就构成了一个表。其中字节的高四位表示音符码低四位表示节拍码。在查表时将高四位的音符码取出再根据音符码查T值表得到T的初值最后产生音符脉冲将低四位的节拍码取出调用对应延时程序就可得到节拍了。这样每个字节按顺序读出就可实现音乐自动播放。以下二表中表是节拍数及其对应的节拍码表是本课程设计中用到的简谱及其对应的简谱码:节拍码节拍数节拍码节拍数节拍码节拍数节拍码节拍数拍拍又拍拍拍拍又拍又A拍表是节拍数及其对应的节拍码简谱发音简谱码T值中音DO中音RE中音MI中音FA中音SO中音LA中音TI表是本课程设计中用到的简谱及其对应的简谱码第五、记录、回放功能原理记录即将输入模块输入的音符信号存入单片机的RAM中回放是记录的逆过程即将存入的音符信号读出。第六、数码管显示原理()静态显示。数码管的静态显示较为简单即将一个固定的值送入数码管显示出来不需进行变化值的显示是基于程序的循环扫描。()动态显示。数码管的动态显示与静态显示的区别在于动态显示所显示的值第页西华大学电气信息学院智能化电子系统设计报告是变化的但是数码管又能连续的显示眼睛感觉不到字符的闪烁。其实字符的显示并非真的是连续的而是间断的如要显示变化的字符“”“”“”“”“”“”“”即数码管要从“”一直显示到“”。那么给数码管输入的值就必须是变化的我们可以在值赋给数码管后延时适当的时间利用肉眼的视觉暂留现象从而实现连续显示的效果。同时动态显示还要实现的功能是由于段选信号是以平行的方式接入数码管的要某个数码管显示特定的字符则必须使某个数码管的公共端接入相应电平以实现位选。这一电平是根据数码管的类型确定的。数码管分为共阴极和共阳极共阴极的位选电平是低电平共阳极的位选电平是高电平。而总共有八个数码管要使个数码管同时显示不同的字符则必须轮流让个数码管导通利用肉眼的视觉暂留效应实现个数码管同时显示的效果。但必须认识到个数码管是轮流显示的只不过人眼有至s的暂留现象加上数码管的余辉这样才有个数码管同时显示的效果。软件功能本课程设计是基于单片机的电子琴单片机的介入使得整个设计具有灵活性和可编程性正是因为这样软件的功能就决定了整个系统的主要功能。因此软件的功能就是整个硬件系统的主要功能。这也体现了软硬件的紧密结合特性。软件决定硬件能实现某些功能但软件必须依靠硬件才能实现其功能脱离了软件的硬件在某种意义上说是一堆烂铁脱离了硬件的软件在某种程度上讲就是一串串毫无实际意义的字符。二者是紧密联系、互相补充的。本软件能驱动电子琴完成以下功能:()手动弹琴模式。此模式下弹琴者可通过音符键随意弹出悦耳的音乐。但由于核心板上键盘数量的限制及自己音乐方面知识的不足仅能弹出中音。核心板上有个按键我们用第一个键至第个键作为音符输入键第个键(以后简称键)作为功能切换键。当键不按时系统即为手动弹琴模式。在此模式下第二个数码管显示键的按下次数此时显示“”个状态指示灯指示系统目前的模式此时第一个放光二极管亮此。按键至键中任意键第一个数码管会显示对应的音符最后个数码管显示弹琴者弹琴的时间分为时、分、秒左边二个数码管显示时中间二个显示分最后二个显示秒。同时扬声器模块会输出清脆的音符声音。()记录模式。此模式下弹琴者所弹的音符会被记录下来。按键一次可从手动弹琴模式切换到此模式。进入此模式后第二个数码管显示“”状态指示灯中的第二个放光二极管亮弹琴时间清零。按键至键中任意键第一个数码管会显示对应的音符最后个数码管显示弹琴者记录的时间同时扬声器模块会发出清脆悦耳第页西华大学电气信息学院智能化电子系统设计报告的音符声音。但由于RAM区的限制只能记录个音符。()回放模式。此模式功能是将弹琴者记录的音符按一定时间间隔顺序输出。可通过按键二次从记录模式切换到此模式。进入此模式后第二个数码管显示“”状态显示灯的第个数码管亮。第一个数码管显示回放的音符最后六个数码管显示回放的时间(可能与记录所花时间不一致)同时扬声器回放弹琴者记录的音符。如果记录为空第三个发光二极管闪烁提醒弹琴者切换模式。()自动播放模式。此模式的功能是把单片机RAM中已存的音乐自动播放出来。可通过按键三次从回放模式切换到此模式。进入此模式后第二个数码管显示“”状态指示灯中的第四个放光二极管亮。第一个数码管显示当前播放的音符最后刘个数码管显示自动播放的时间当然扬声器同时会播放音乐。注意:当系统处于自动播放模式时按键第次系统重新回到手动按键模式各种指针清零数码管显示也清零状态指示灯的第一个发光二极管亮。当有人弹琴时数码管才开始显示音符、时间等否则始终显示“”。设计框图本次设计主程序分为四个大的功能块通过功能键触发外部中断使功能键按键次数变量加通过判断功能键按下与否进行功能切换。其中头文件包含主要是把本次设计中所用到的各头文件包含进C文件中包括C单片机系统头文件和自己写的变量头文件函数头文件及模式头文件。还有就是手动模式记录模式回放模式自动播放模式分别是调用这几个模式对应的函数。以下是本设计主程序的流程图。注:键是否按下的检测是嵌入在各功能模块程序段中的这里为比较清楚的展现功能块的切换故单独写出来。第页西华大学电气信息学院智能化电子系统设计报告图主程序的流程图第页西华大学电气信息学院智能化电子系统设计报告主程序#include<regh>#include<regh>#include<bianliangh>#include<shujuh>#include<hanshuh>#include<moshih>voidmain(){init()while(){sd()手动模式,如果功能键不按下一直保持为手动模式rd()记录模式hf()回放模式zd()自动播放模式}}voidiner()interrupt{EX=kantclear()if(kant=)donot=if(kant==){kant=donot=}delay()按键消抖delay()IE=}第页西华大学电气信息学院智能化电子系统设计报告系统调试本次调试是分为两步进行的。首先我们对电路板进行了电气检测这一步非常重要因为如果不能保证各个引脚电气连接的正确性以及电源连接正确性硬件功能是无法实现的。第二步进行在线调试即把写好的程序通过串口下载到单片机上然后观察现象对出现未预料的情况进行分析查找原因然后修改程序最后重新下载到单片机上再观察现象直至修改程序到最佳的效果这样整个调试过程就结束了。严格说硬件调试与软件调试是不能完全割裂开来的就拿我们这次调试来说在进行软件调试时发现了硬件中存在很多问题就是这些硬件上的问题导致了软件功能的无法表现出来。硬件调试是软件调试的基础与前提同时软件调试是硬件调试的进一步验证与延伸因为只有正确的硬件设计软件才能表现出预期的效果硬件调试上面已经谈到过调试分两步进行这里是第一步即进行电路板的电气检测。我们首先测试了空板电源和地是否短路然后检查了各个芯片的电源引脚及地引脚是否与电源插口上的电源接口及地接口正确连接当然都是测试通过了的。然后我们又检查了个芯片的引脚与单片机相应的引脚的电气连接。令人吃惊的是HC的第脚与单片机的A口没有电气连接我们赶快测试该芯片的第脚与芯片座子的连接情况发现是对的最终我们确定是核心板上的连线有问题。除了这个问题外我们在进行软件调试时又发现了两个很大的硬件设计错误其一单片机P口没接上拉电阻根本无法输出高电平其二老师发的是共阳极数码管然而驱动芯片ULN没接上拉电阻根本无法输出高电平这样根本无法把共阳极的数码管点亮。经过我组的多次试验花了很长时间的调试终于明白给P口接K的排阻给ULN输出端口接欧的上拉电阻就可将共阳极的数码管的数码管点亮。而这些是老师事先没有告知的就是这两个问题导致我们花了将近一天的时间。但最后还是解决了。软件调试当认为硬件调试通过后结下来就要进行非常核心的一步那就是在线进行软件调试虽然经过仿真通过但不进行这一步是无法说程序是对的。上面也谈到过我组在软件调试中发现了硬件中的设计错误即我组成员刚开始没意识到P口不接上拉电第页西华大学电气信息学院智能化电子系统设计报告阻ULN输出不接上拉电阻的严重后果只是想当然认为P口输出低电平经过ULN放大取反就可点亮共阳极数码管。事实上仅接了上拉电阻后才能实现点亮数码管的功能。进行软件调试我们采取的方法是先对每个功能模块进行在线调试仅当每个功能模块调试通过后然后在进行功能模块间的切换即功能模块间的联调。这样做的原因是每个功能模块是相互独立的而功能联调成功的前提就是每个功能模块是正确的。各功能模块的独立调试各功能模块的独立调试方法为在主程序中先屏蔽掉其他功能模块然后编译成功后下载到单片机上运行观察现象看是否与预期的效果一致不然则修改程序直到达到预期效果。以下是具体的调试说明。先在主程序中屏蔽掉其他功能模块调试主程序为:voidmain(){init()while(){sd()手动模式,如果功能键不按下一直保持为手动模式rd()记录模式hf()回放模式zd()自动播放模式}}此段程序是专门调试手动模式的当其通过后再调rd()函数即记录模式方法一样即屏蔽其他功能模块单独调rd()函数。调其他功能块hf()zd()即回放模式自动播放模式的方法依次类推。要注意的是由于hf()即回放模式是把记录模式中按下的音符信号回放出独立调试时先要给数组table赋些初值。当然在调试中也遇到了很多问题其中一个值得说明的是关于ATC单片机定时、计数器T的用法。与其他两个定时、计数器不同的是其增方式的初值是通过RCAPHRCAPL这两个特殊功能寄存器实现的。第页西华大学电气信息学院智能化电子系统设计报告各功能模块的联调当各个功能模块独立调试通过后接下来就进行功能联调了。联调的方法是主程序中不屏蔽任何功能模块利用功能键进行各功能模式间的切换。而我们首先要明白的是功能键是利用外部中断每按一次功能键就触发一次外部中断每进入一次外部中断就对记录功能键按键次数的变量加然后根据该变量的值也就是功能键的按键次数进行各功能模块间的切换。进行联调时我们是分两步进行的。第一步我们要确保满足一定条件后程序能从相应的模块中退出原因是每个模块都是一个无限循环程序段如果要各个功能模块间进行切换则必须先能从当前模块中退出。第二步也就是功能切换调试看各个模块见能否正常切换。进行联调时主程序是这样的:voidmain(){init()while(){sd()手动模式,如果功能键不按下一直保持为手动模式rd()记录模式hf()回放模式zd()自动播放模式}}功能切换是依据功能键按键的次数也就是通过以下中断程序实现按键次数的变化然后再在各个功能模块程序段中进行功能键按键与否检测检测到功能键按下则进行退出当前模块。外部中断程序为:voidiner()interrupt{EX=kantclear()if(kant=)donot=if(kant==){kant=donot=}delay()按键消抖delay()IE=}第页西华大学电气信息学院智能化电子系统设计报告指标参数在硬、软件均调试通过后我们对系统的个参数进行了测试。(单片机电源引脚电压:V。单片机各口正常电平:V。(各芯片电源引脚电压:HCVHCVHCVULNV(共阳极数码管正常显示时共阳端的电压:由于本次设计中用的是共阳极数码管ULN接上拉电阻输出的最高电平才V而共阳极数码管正常显示字符时其亮度不够共阳端电压仅为VV。结论经过上面的说明分析及调试过程我们知道了本课程设计的硬件系统是由音符输入模块、单片机控制模块、显示模块及扬声器输出模块这几个模块组成软件系统由手动模式、记录模式、回放模式及自动播放模式这几个功能模式组成。在整个调试的过程中我们遇到了一些问题在解决这些问题的过程中我们学到了第页西华大学电气信息学院智能化电子系统设计报告一些书上没详细介绍的知识。下面我将根据根据整个设计过程中的思考、分析、讨论及调试过程做出如下结论性的说明:功能键实现一键复用是一个明智的选择。由于我们进行调试所用的外扩电路板是面包板如果外扩键盘如不用核心板上上的个独立按键而是外扩×矩阵键盘那样的话焊在面包板上会相当的麻烦。这样的话一方面没充分利用核心板上的器件同时增加了焊接的难度。但是不外扩的话核心板上的键盘又不够用。于是我组采用了一键复用的方法同时为了保证功能切换的实时性我们将键与单片机的外部中断接口相连。键的复用一方面节约了设计的器件成本与实践的时间成本另一方面让我们对外部中断的利用有了新的理解。应该说这是本设计中一个较为重要的设计点。按键次数数码管显示及状态灯的使用增加人机交流效果。我们知道了键复用的原理但是为了让演奏者明确电子琴所处的状态我们用一个数码管显示出功能键所按的次数用核心板上发光二极管显示电子琴所处的状态。记录、回放、自动播放这三个扩展功能增加了电子琴的吸引力。本次课程设计的最基本功能是模拟电子琴弹奏功能在我组的努力下同时为增加对所学知识的理解与掌握程度我们扩展了这三个功能。调试时这几个功能实现起来的效果还是不错的。调试过程较为顺利各个功能模块能较好的达到预期效果。如音符输入模块按键能顺利完成其音符输入的功能同时显示模块及扬声器模块能实时显示和发声。总的来说整个设计、调试过程较为顺利各个功能模块能较好的达到预期效果各功能模块的主要参数均正常。总结与体会经过上述较为详细的分析、说明我们知道了本设计的硬件系统由音符信号输入第页西华大学电气信息学院智能化电子系统设计报告模块也即键盘输入模块单片机控制模块数码管及状态显示模块扬声器输出模块这几个功能模块组成。软件系统由手动模式、记录模式、回放模式及自动播放模式这四个功能模块组成。经过认真的仿真及调试最后我们实现了电子琴的基本功能和扩展功能。应该说整个设计的软硬件都比较合理因为最后能较好的实现本设计的预期任务。但也有不足之处即虽然各个功能模块能较好的实现预期功能扬声器(实际上用的是蜂鸣器)所发出的声音根本无法区分到底是do,还是re也即发出的声音并不那么理想。原因可能是蜂鸣器无法把较高频频的音频脉冲正确的模拟出来还可能就是程序没能协调发音节拍与音频脉冲的关系而这部分是涉及到音乐领域方面的专业知识作为本次设计我们已达到课程设计的目标故没在深入下去。在整个设计过程中通过查资料我们学到了很多书本上没介绍的知识例如ATC定时、计数器T的用法芯片ULN的用法。还有对已学知识的进一步理解如外部中断的使用按键软件消抖的应用P口要输出高电平必须接上拉电阻等等。在调试过程中我们遇到了很多问题但是通过我组成员的密切配合问题都解决了。值得提出的是我们独立的解决了共阳极数码管因为硬件原因无法显示的问题解决办法是给P口及ULN接上拉电阻。虽然说起来很简单但这个问题我们花了将近一天的时间才找出来最终加以解决了。在软件调试的过程中一路走来对耐心的磨砺是很大的。经过调试我组成员的耐心得到了锻炼这对以后的学习是很有帮助的。整个软件设计中由李清同学设计总体方案李双生同学完成了手动模式程序的编写郑波同学完成了功能切换程序的编写其余由李清同学完成。总的来说通过本次设计我组成员密切配合相互交流提高了与人合作的能力。同时提高了软、硬件的设计能力更加理解了书本上关于单片机的知识。应该说在本次设计中我们收获很多。致谢本次课程设计我们遇到了许多问题在老师的指导下我们小组同学积极思考和讨论完成了此次课程设计。通过这次设计我们受益匪浅学到了很多东西。在此我们要感谢学院提供了这次课程设计的机会感谢在设计中给予我许多帮助的老师特别要感第页西华大学电气信息学院智能化电子系统设计报告谢阳小明和李天倩两位老师在我们的设计过程中他们至始至终地给予我们悉心的指导从而使我们的设计顺利完成。同时也要感谢小组内的各位同学感谢全组同学能够做到互相学习、团结一致共同战胜难点。参考文献杨将新、李华军单片机程序设计及应用(第三版)M北京:电子工业出版社胡汉才单片机原理及其接口技术M北京:清华大学出版社康光华、邹寿斌电子技术基础数字部分(第五版)M北京:高等教育出版社第页西华大学电气信息学院智能化电子系统设计报告张毅刚、彭喜元单片机原理及应用M北京:高等教育出版社谭浩强C语言程序设计(第三版)J北京:清华大学出版社张海兵、李敏PROTEL电路设计实例与分析J北京:人民邮电出版社李春葆、金晶C语言程序设计辅导M北京:清华大学出版社,杨将新、李华军单片机程序设计及应用(第三版)M北京:电子工业出版社鲁捷、焦振宇PROTEL电路设计M北京:清华大学出版社谢自美主编(电子线路设计实验测试(第二版)M(华中理工大学出版社谢维成、刘勇微机原理与接口技术M华中科技大学出版社第页西华大学电气信息学院智能化电子系统设计报告附录一:相关设计图图一:Protel原理图第页西华大学电气信息学院智能化电子系统设计报告图二:PCB图第页西华大学电气信息学院智能化电子系统设计报告图三:ISIS仿真图图四:电子琴实物图第页西华大学电气信息学院智能化电子系统设计报告附录二:相关设计软件电子琴设计主程序(dianziqinc):#include<regh>#include<bianliangh>#include<shujuh>#include<hanshuh>#include<moshih>voidmain(){init()while(){sd()手动模式rd()记录模式hf()回放模式zd()自动播放模式}}voidiner()interrupt{EX=clear()kant=kantif(kant=)donot=if(kant==){kant=donot=}delay()delay()delay()delay()IE=}各函数定义头文件(hanshuh):sbitD=P^sbitD=P^定义特殊位变量sbitD=P^sbitD=P^第页西华大学电气信息学院智能化电子系统设计报告sbitD=P^sbitSC=P^sbitPXU=P^sbitPXU=P^sbitPXU=P^voidinit()voidclear()voidjpys()voidshuchu(uchar)声明音频输出函数给T开启及赋值以产生音频脉冲及输出voidjpsmshow()声明键盘扫描函数voiddelay(uchar)声明延时函数voidduxu(bit,bit,bit)声明段选函数voidwexu(bit,bit,bit)声明位选函数voidjaxu(bit,bit,bit)声明键盘选通函数voidzhishilamp(uchar)声明状态灯显示函数voidwriteRAM(uchar,uchar)声明记录音符函数voidledshow(uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar)声明数码显示函数voidzhishilamp(uchara)定义状态灯显示函数{if(a==){D=D=D=D=}elseif(a==){D=D=D=D=}elseif(a==){D=D=D=D=}else{D=D=D=D=}}voidledshow(ucharyf,ucharkant,ucharhshi,ucharhge,ucharmshi,ucharmge,ucharsshi,ucharsge)定义数码管显示函数{duxu(,,)段选开P=tableyfduxu(,,)段选关P=x消隐wexu(,,)位选开P=xfe选中第一个数码管wexu(,,)位选关delay()delay()duxu(,,)P=tablekant第页西华大学电气信息学院智能化电子系统设计报告duxu(,,)P=xwexu(,,)P=xfdwexu(,,)delay()*以下功能与上述注释的类似故不再注释*duxu(,,)P=tablehshiduxu(,,)P=xffwexu(,,)P=xfbwexu(,,)delay()duxu(,,)P=tablehgeduxu(,,)P=xwexu(,,)P=xfwexu(,,)delay()duxu(,,)P=tablemshiduxu(,,)P=xwexu(,,)P=xefwexu(,,)delay()duxu(,,)P=tablemgeduxu(,,)P=xwexu(,,)P=xdfwexu(,,)delay()第页西华大学电气信息学院智能化电子系统设计报告duxu(,,)P=tablesshiduxu(,,)P=xwexu(,,)P=xbfwexu(,,)delay()duxu(,,)P=tablesgeduxu(,,)P=xwexu(,,)P=xfwexu(,,)delay()duxu(,,)此二段程序用于把数码管关掉P=xduxu(,,)P=xwexu(,,)P=xffwexu(,,)delay()}voidinit(){D=WR=RD=EA=EX=IT=ET=ET=ET=TR=TR=TR=PX=第页西华大学电气信息学院智能化电子系统设计报告PT=PT=PT=TMOD=xRCAPH=()此二句给定时器T赋初值RCAPL=()SC=}voidduxu(bita,bitb,bitc)定义段选函数{PXU=aPXU=bPXU=c}voidwexu(bita,bitb,bitc)定义位选函数{PXU=aPXU=bPXU=c}voidjaxu(bita,bitb,bitc)定义键盘选通函数{PXU=aPXU=bPXU=c}voiddelay(ucharz){ucharx,yfor(x=zx>x)for(y=y<y)}voidjpsmshow(){ucharPX,PY,x=jaxu(,,)开缓冲器键盘有效。SC=防止蜂鸣器长鸣PX=P判断有无键按下PY=PX|Xwhile(donot)刚进入时判断有无键按下有打开外部中断及定时器同时第页西华大学电气信息学院智能化电子系统设计报告{while((PY==Xf)||(PY==Xff))让按键指示变量donot置使此段程序下次按键扫描时不执行{PX=PPY=PX|X}donot=EX=TR=开外部中断及定时器,}PX=PPY=PX|Xwhile(PY!=XfPY!=Xff){delay()延时消抖PX=PPY=PX|Xwhile(PY!=XfPY!=Xff){PX=PPY=PX|Xswitch(PY)键盘识别{casexfe:key=breakcasexfd:key=breakcasexfb:key=breakcasexf:key=breakcasexef:key=breakcasexdf:key=breakcasexbf:key=breakcasexf:key=break}while(PY!=XfPY!=Xff)松手检测{PX=PPY=PX|X}if(jlable==)把按下的音符信息存入对应的RAM区中{writeRAM(key,jlant)jlantif(jlant==)jlant=第页西华大学电气信息学院智能化电子系统设计报告}jp=限时次数jpys()此二句给每次弹琴音符发声限时,即产生节拍信号。shuchu(key)}}SC=ledshow(key,kant,hshi,hge,mshi,mge,sshi,sge)SC=防止蜂鸣器不受控制地长鸣}voidshuchu(uchart){if(key<){TH=tabletTL=tabletTR=}}voidjpys(){TH=()TL=()TR=}voidtimer()interrupt{TH=tablekeyTL=tablekeySC=~SCD=~D}voidtimer()interrupt这里中断用于给每次发声限时解决了上述问题{TH=()TL=()numif(num==jp)第页西华大学电气信息学院智能化电子系统设计报告{TR=TR=num=SC=}这里sc=,是为了确定蜂鸣器不再响}不受控制的长鸣。解决办法想出来了就是在jpsm()函数中加上sc=经测试很好的解决了这个问题voidtimer()interrupt定时器T产生时间显示的数{TF=定时器T的中断标志必须软件清零RCAPH=()RCAPL=()numif(num==){num=sif(s==){s=mif(m==){m=hif(h==){h=}hshi=hhge=h}mshi=mmge=m}sshi=ssge=s}}voidclear(){TR=h=m=s=第页西华大学电气信息学院智能化电子系统设计报告hshi=hge=mshi=mge=sshi=sge=num=TR=TR=SC=jlant=jp=key=donot=RCAPH=()RCAPL=()jaxu(,,)duxu(,,)此二段程序用于把数码管关掉P=xduxu(,,)P=xwexu(,,)P=xffwexu(,,)}voidwriteRAM(ucharkey,ucharjlant)把每次弹的音符记录到内部的RAM中{tablejlant=keyD=~D}各变量定义头文件(bianliangh):#defineuintunsignedint#defineucharunsignedcharucharkant=uchardonot=ucharnum=ucharnum=ucharkey=ucharjp=节拍码ucharjlant=ucharjlable=存入音符个数最多次uchartable为记录音符开辟RAM存储空间,最多能记录第页西华大学电气信息学院智能化电子系统设计报告个音符ucharh=,m=,s=,hshi=,hge=,mshi=,mge=,sshi=,sge=各模式定义头文件(moshih):voidsd()手动模式voidrd()记录模式voidhf()回放模式voidzd()自动播放模式voidsd(){ucharx=kant=jlable=jaxu(,,)zhishilamp()while(x)指示灯显示{ledshow(,,,,,,,)问候语“HELLOboy”x}x=延时一秒while(x){ledshow(,,,,,,,)日期显示x}while(){SC=jpsmshow()if(kant==)功能键按第一次退出循环进入下一功能{break}}}voidrd(){ucharx=kant=jlable=clear()zhishilamp()指示灯显示第页西华大学电气信息学院智能化电子系统设计报告while(x)本程序调试日期显示{ledshow(,,,,,,,)x}x=while(x){ledshow(,,,,,,,)x}x=while(x){ledshow(,,,,,,,)清零显示kant显示与上面功能一样。x}while(){jpsmshow()if(kant==)功能键按第二次退出循环进入下一功能{break}}}voidhf(){ucharx=uchary=kant=clear()jaxu(,,)zhishilamp()指示灯显示while(x){ledshow(,,,,,,,)此程序调试的日期显示x}x=while(x){ledshow(,,,,,,,)显示提示语“replayst”x第页西华大学电气信息学院智能化电子系统设计报告}x=while(x){ledshow(,,,,,,,)清零显示kant显示与上面功能一样。x}EX=TR=while(){if(kant==)功能键按第三次退出循环进入下一功能{break}jp=jpys()决定每次发音的时间key=tabley读出已存RAM中的音符。if(key==){y=key=tabley}shuchu(key)delay()SC=if(kant==)功能键按第三次退出循环进入下一功能{break}x=while(x){if(kant==)功能键按第三次退出循环进入下一功能{break}ledshow(key,,hshi,hge,mshi,mge,sshi,sge)x}yif(y>=)y=if(kant==)功能键按第三次退出循环进入下一功能{break第页西华大学电气信息学院智能化电子系统设计报告}}}voidzd(){ucharx=uchary=ucharkeyjpkant=clear()jaxu(,,)zhishilamp()指示灯显示while(x){ledshow(,,,,,,,)此程序调试的日期显示x}x=while(x){ledshow(,,,,,,,)显示“autoplay”x}x=while(x){ledshow(,,,,,,,)清零显示kant显示与上面功能一样。x}EX=TR=while(){if(kant==)功能键按第次退出循环进入手动模式功能{break}keyjp=tableyif(keyjp==x)检测是否把音乐播完{y=x=clear()SC=第页西华大学电气信息学院智能化电子系统设计报告while(x){ledshow(,,hshi,hge,mshi,mge,sshi,sge)x}keyjp=tabley}key=(keyjpxf)>>jp=table(keyjpxf)shuchu(key)jpys()SC=x=while(x){ledshow(key,,hshi,hge,mshi,mge,sshi,sge)x}yif(kant==)功能键按第次退出循环进入手动模式功能{break}}}各表格数据储存头文件(shujuh):ucharcodetable={共阳极数码管的数据编码xc,xf,xa,xb,“”到“F”的编码x,x,x,xf,x,x,x,x,xc,xa,x,xe,x,x,xc,xc,“HELLOboy”的编码xc,x,xa,x,x,x,xc,xc,“recordst”的编码x,xa,x,x,x,x,xc,xc,“replayst”的编码xa,x,x,x,xa,xc,x,xc,“autoplay”的编码xc,xc,xa,x}uintcodetable={C调中音音符T值编码表,,,,,,,}ucharcodetable={ROM中内部存储的音乐,《义勇进军曲》,高四位是音符码低四位是节拍码。G调x,x,x,x,第页西华大学电气信息学院智能化电子系统设计报告x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x}uintcodetable={,,,,,}ROM中所存的音符的节拍表未赋值,原理为把节拍延时转换为计时器的及时数,为拍是TR计时时间ms的倍为拍是TR计时时间ms的倍数为拍是TR即使时间ms的倍为拍TR计时时间的ms的倍数为又拍是TR计时时间的倍为拍是TR计时时间ms的倍数,是手动模式中用以决定每次发音的时间。发音时间为*ms注意:每拍为ms第页西华大学电气信息学院智能化电子系统设计报告第页

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/60

VIP

意见
反馈

免费
邮箱