智能化电子系统设计报告《单片机的电子琴设计》.docx_第1页
智能化电子系统设计报告《单片机的电子琴设计》.docx_第2页
智能化电子系统设计报告《单片机的电子琴设计》.docx_第3页
智能化电子系统设计报告《单片机的电子琴设计》.docx_第4页
智能化电子系统设计报告《单片机的电子琴设计》.docx_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

基于单片机的电子琴设计西华大学电气信息学院智能化电子系统设计报告 目 录 1 前言储蛔馑松菌识彤饫恰堵滤奈埃 . 1 2 总体方案设计荸桧匍昀宋挑贤殚溷姹缁复蔚 . 2 2.1设计内容佴跽件榔娠谂遘袁跬渖噌是夥. 2 2.2方案比较 . 2 2.3 方案选择滔过伉潦甘盐莜纬箕妃楝包讯. 3 3单元模块电路简介与设计敢蜜诚妮厮疵淳突磲鄂噬刮蝈 . 3 3.1 单片机主芯片电路设计渔莼苕箦浑慎忿骚踌迂圆台咦. 4 3.1.1时钟电路设计瞬熏嚏忭咏鸬徊层苤椟飕猹散 . 4 3.1.2复位电路设计穑显渫灏忑钩这捷咆褥罨甏越 . 4 3.2按键模块电路设计梳孙棚秕衡倥聿承喑侨鹁撕虐. 5 3.3 LED数码管显示电路模块设计抉蚬杲叛剀曲叱向弈鞭婊豹室 . 6 3.4扬声器电路模块设计嘣捡泻鸪刈涩丫聋刮叙砷筅莶 . 7 4.软件设计蹭义谲芷鹊掳皤应坦妻煮毳蔹. 8 4.1 Protues、Keil 简介殴首画即谓蠊豳狲戏栓士膘旦 . 8 4.2设计原理和功能氖涫岳拱鸥塄酒恶鼾搋螋滩媸 . 8 4.2.1设计原理封驶翮培潮鲚送淡蚰篮荏溜涤 . 8 4.2.2软件功能迓际赠花枨咭氛枝槌酾掼截辱 . 13 4.3设计框图姊审戊诶肉鞯既休镐骛瀣促编. 14 4.4主程序楂峪踌铁纤菩嶂鲆善镉悔叁缙 . 16 5系统调试譬驻液莅撙攀埯狞恋膝盥诔馀 . 17 5.1硬件调试巾攘妙咬饬醺颅旱犹毵劐忒盔. 17 5.2软件调试龋旗距軎舅喔佩鄞铜憝夏归鳜. 17 5.2.1各功能模块的独立调试滇哦氓狗陡翮济酥焰首讫醚挞 . 18 5.2.2各功能模块的联调顶帝姘鼎肪迪肃趴借什绽蟀擀 . 19 6 指标参数眠粮札燧毵文钽铳莲俄舰碘搋. 20 7 结论怨摹拿敞乱击怂泡浼颤咆哼懒 . 20 8 总结与体会甑佥盎芾堇等啁宦际净倜眭病 . 21 9致谢翰盆啕怦闩瞻萸俏浇瞧趣卧棠 . 22 10参考文献锏轵湛芫恃鹞刎尴跞畏尖晏抱 . 23 附录一:相关设计图坝肌窿涛结裘繁崤雠炖女疾糌 . 25 西华大学电气信息学院智能化电子系统设计报告 附录二:相关设计软件怏变薅脑癌毁裂称玎氐圭谵恂 . 28 1 前言 单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发的控生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89S52单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有8个按键和扬声器,其中7个键用于音符输入,1个键作为功能键。 一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样的方波频率信号,因此,只需把一首歌曲的音阶对应频率关系弄正确即可。 本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴系统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。本系统是简易电子琴的设计,按下键盘矩阵中的按键会使扬声器播放对应的音符,同时数码管显示当前按键及播放时间。在此基础上,我们作进一步的扩展,使其具有回放及自动播放所存曲目的功能。通过设计本系统可了解单片机的基本功能,对单片机的应用有一个更深的认识。 第1页 西华大学电气信息学院智能化电子系统设计报告 2 总体方案设计 2.1设计内容 本系统分为两个部分,一个是音乐播放,另一个就是电子琴弹奏。 关于声音的处理,使用单片机C语言,利用定时器来控制频率,而每个音符的符号只是存在我自己定义的表中。具体要求如下: 1.要求达到电子琴的基本功能,可以用弹奏出简单的乐曲。 2.用键盘作出电子琴的按键,每键代表一个音符。 3.各音符按一定的顺序排列,必须符合电子琴的按键排列顺序。 4.弹奏电子琴时能播放出准确的声音,不弹奏时可以播放内置音乐。 5.记录所弹音符和持续时间,能够回放。 2.2方案比较 方案一:采用CPLD外接扬声器、键盘、数码管等。 8个译码输出显示的数码管,以显示目标芯片的32 位输出信号,且8个发光管也能显示目标器件的8位输出信号。时钟为50MHz ,输出接扬声器。 具体过程:主系统可由两个模块组成:当系统检测到有按键按下时,对应音符的频率由模块1获得,这是一个数控分频器。由其clk端输入一具有较高频率的信号,分频后输出。 音符的持续时间须根据乐曲的速度及每个音符的节拍数决定,模块2的功能是为模块1提供决定所发音的分频预置值,而此数在模块1输入口停留的时间即为此音符的节拍值。 方案二:采用单片机外接扬声器、键盘、数码管等。 具体过程:当系统扫描到键盘上有键子被按下,则快速检测出是那一个键子,然后单片机的定时器被启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。如果在前一个按下的键发声的同时有另一个键被按下,则启用中断系统,前面键的发音停止,转到后按的键的发音程序,发出后按的键的音。 第2页 西华大学电气信息学院智能化电子系统设计报告 2.3 方案选择 对比两套方案各有优缺点,方案一采用CPLD,工作速度快,系统稳定,效果好,但是其价格昂贵;而方案二在设计这样小型电子系统方面,无论是效果还是工作速度与方案一都相差不大,而且价格较为便宜。因此,选择方案二即单片机加外设的方式设计该系统较好。 3单元模块电路简介与设计 基于单片机系统的电子琴设计基本设计结构如下图所示。 1 X 8独立键盘 扬声器 时钟电路 AT89C52LED显示电路复位电路 图3.1 电子琴设计系统原理图 该系统的硬件电路主要由AT89C52单片机、键盘电路、扬声器电路、LED数码显示电路等模块组成,具体原理图如下: 第3页 西华大学电气信息学院智能化电子系统设计报告 3.1 单片机主芯片电路设计 3.1.1时钟电路设计 图3.2 单片机时钟电路 XTAL1、XTAL2分别是系统时钟信号fosc的输入和输出端,晶振电路的设计可以使用两个电容和一个晶振即可,用来产生一个约等于12MHZ的稳定的频率。 3.1.2复位电路设计 第4页 西华大学电气信息学院智能化电子系统设计报告 图3.3单片机复位电路 复位是单片机的初始化操作,其作用是使CPU和系统中其他功能部件都处在确定的状态,并从这个状态开始工作。本系统采用上电复位电路,为了防止干扰串扰复位端,所以再接一个去耦电容。 3.2按键模块电路设计 图3.4 按键模块电路 在P0口连接有8个按键开关加8个上拉电阻,它们一端接5伏电源,一端接地。只要有一个按键被按下,并被单片机扫描到,则会播放发出音符。 第5页 西华大学电气信息学院智能化电子系统设计报告 3.3 LED数码管显示电路模块设计 图3.5 LED数码显示电路 本系统用单片机的P0口来控制LED显示器的数字显示。当七个音符按键17中有被按下时,LED数码管将对应显示出该音符的数字。从而可以通过手动和眼看来确定所按的是哪个音符,应该发出哪个音符的声音。LED显示器还用来显示对记录所弹音符的持续时间。 第6页 西华大学电气信息学院智能化电子系统设计报告 3.4扬声器电路模块设计 图3.6 扬声器电路 电磁式蜂鸣器由振荡器、电磁线圈、磁铁振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振荡膜片在电磁线圈和磁铁的相互作用下,周期性的振动发声。本设计蜂鸣器通过驱动电路与单片机的P1.7口连接,单片机就可以通过P1.7的输出信号频率进行控制。另外,通过示波器接到P1.7可方便我们观察音频信号的波形。 第7页 西华大学电气信息学院智能化电子系统设计报告 4.软件设计 本设计的软件是在Keil中编译,在Protues中进行仿真的。本章先对编译软件Keil和仿真软件Protues进行了简要的介绍,然后对本软件设计的原理、功能及流程图进行了较为详细的说明,最后给出了本设计的主程序。 4.1 Protues、Keil 简介 Proteus是英国Labcenter公司研发的,是目前世界上最先进,最完整的嵌入式系统设计与仿真软件平台。它是一种可视化的支持多种型号单片机(如51,PIC,AVR,Motorola hcll等),并且支持当前流行的单片机开发环境(keil,MPLAB,IAR).是目前电子设计爱好者广泛是用的电子线路设计与仿真软件protel和Multisim功能的联合和进一步扩展。它的功能不是单一的 ,它有强大的软件库,仿真功能可以和Multisin相媲美,并且有它没有的单片机仿真功能,并且还有pcb电路制版功能,可以和protel相媲美。Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。 4.2设计原理和功能 4.2.1设计原理 本课程设计的软件模块是在Keil中编译,在Protues中进行仿真的。而Keil编译软第8页 西华大学电气信息学院智能化电子系统设计报告 件和Protues仿真软件已在前面介绍,这里不再赘述。 软件设计是牢牢地基于硬件结构的,脱离硬件,软件的功能就无法在实际中体现出来。本课程设计中硬件由音符信号输入模块、单片机控制模块、LED显示模块、音频信号输出模块。结合硬件结构,我们将本软件设计分为了手动模式,记录模式,回放模式及自动播放模式,这四个功能模式,它们之间的切换是通过功能键来切换的。 为将本软件设计原理较为清晰的描述出来,下面将设计原理分为音符信号输入原理,音频信号产生原理,多功能键复用原理,自动播放音乐原理,记录、回放功能原理,数码管显示原理这六个部分进行介绍: 第一、音符信号输入原理 我们知道,要有音频信号输出,一方面可以通过读取存储器中已存的数据,另一方面可以通过外部输入实现。本课程设计中的音符信号输入是通过键盘输入的方式实现的。涉及到键盘,则要解决的问题是,如何进行按键消抖,如何完成音符识别,最终实现音符信号的输入。 (1)按键消抖。在按键时,我们希望按键能实现电平的迅速变化,其理想的电平变化波形应是方波,但实际并非如此,这是因为按键中存在抖动现象。这个抖动现象体现为,按键前后,电平并非马上从一个稳定状态变为另一个稳定状态,而是在这两个状态之间进行快速的交替变化。这给我们准确输入音符信号带来极大困难,因此,我们必须进行消抖。而消抖有两种方法,其一是硬件消抖,其二是软件消抖。考虑到用程序进行延时消抖很方便,也能很好的实现消抖功能,因此本设计就是采用软件进行延时消抖的方法。所谓延时消抖,即当单片机检测到有电平发生变化时,调用一个5-10ms的延时子程序以屏蔽抖动中电平变化。然后,再进行电平检测,从而确定键是否按下,这样大大的提高了音符信号输入的准确性。 (2) 音符识别。本课程设计中的核心板中有8个非编码的独立键盘,为充分利用和新板提供的硬件资源,我们组就直接利用这8个键盘而未外扩。当我们按下键时,如何让单片机识别按下的是哪个键呢,又如何识别输入的是哪个音符信号呢,这又是二个问题。因为只有让单片机清楚按下的是哪个键,才能确定该输出那个频率的音频信号。在核心板上,8个独立键盘是与单片机寄存器P0的8个端口依次相连的,程序设计中,P0口先置为高电平,我们再进行键盘扫描,确定P0的那位为低电平,这样就可确定是那个键按下去了。而前7个键盘每个都是与特定音符对应的,这样,单片机可以通过确定按下的键来确定输入的音符信号。例如,键1被人为定义为中音1DO,当单片机扫描出P0.1为低电平时,则单片机确定按下的是键1,经过定时器T0及相关程序处理,则产生中音1DO的音频脉冲,然后输出,经过放大,经扬声器产生能听到的声音。 第二、音频脉冲产生原理 上文中谈到单片机如何识别输入的音符信号,那么之后单片机如何产生对应的音频第9页 西华大学电气信息学院智能化电子系统设计报告 脉冲呢。经过查资料,我们了解到要产生某一音符的音频脉冲只需先清楚该音符对应的频率,然后求出其半周期,再用该半周期除以单片机的一个机器周期,这样就得到了定时器T0的计数次数,然后用65536减去该值,对256求模便得到TH0的初值;对256求余,便得到TL0的初值。这样,就得到了T0的初值,程序中启动T0,每到T0计数溢出,产生溢出中断,在中断程序中给P1.7电平取反,这样,P1.7就可以产生该音符的音频信号了。 例如,中音1DO,频率为523HZ,其半周期为T=1?523?2=956us,则定时器T0的初值为N=956us?1us=956,每到T0计数956次时产生溢出中断,再在中断程序中给P1.7电平取反,则P1.7口就可产生频率为523HZ的音频脉冲了。 注:上述中1us,是晶振为12MHZ情况下的,而实验板上用的是11.0592MHZ,经计算,对中音1DO,T0的计数次数取整后为881,而由881反过来可求出音频频率为523.09462HZ,和523HZ的相对误差仅为0.018,,可见对于晶振为11.0592MHZ的单片机计算T0初值时仍可将单片机机器周期当做1us来计算,这样提高了计算效率。下面是定时器T0初值即T值的计算公式: T=65536,Fi?2?Fr,其中Fi为1us的倒数即1000000MHZ,Fr为对应音符的频率。下面是C调各音符频率与定时器T0的初值T值的对照表: 频率简谱码频率简谱码(T音符 (HZ) (HZ)(T值)音符 值) 休止 中 4 FA 0 0 698 64820 低1 DO 中 5 SO 63628 784 64898 262低2 RE中 6 LA294 63835 880 64968 低 3 MI 中 7 SI330 64021 988 65030 低 4 FA 高 1 DO349 64103 104665058 低 5 SO 高 2 RE392 64260 1175 65110低 6 LA高 3 MI 440 64400 131865157 低 7 SI 高 4 FA494 64524 1397 65178中 1 DO高 5 SO 523 64580 156865217 第10页 西华大学电气信息学院智能化电子系统设计报告 中 2 RE 高 6 LA587 64684 176065252中 3 MI 高 7 SI659 64777 1967 65283表4.1 音符频率与T值对照表 了解以上原理后,要实现由按键输入的音符信号转变成对应的音频脉冲,我们可以为各个音符建立一个表格,单片机通过查表的方式来获得相应的数据。因为在本课程设计中,我组仅采用了7个键,则我们仅输入中频的7个音符信号,下面是用C语言编的T值表,当输入某个音符信号时,如输入中音2RE,则我们可以把下表中的tab2值赋给T0,从而产生中音2RE。 uint code tab= 0,64580, 64684, 64777, 64820, 64898, 64968, 65030,; 第三、多功能键复用原理 在硬件结构中的音符信号输入模块中,键8,即与P3.2直接相连的键,是功能键,且实现多个功能。单键多功能是通过单片机外部中断来实现的。而核心板中,键8和P0.7均与外部中断接口P3.2无电气连接,实现时可通过外扩接口用带帽的的导线实现二者的电气连接。程序中,定义一个计数变量,每当单片机检测到键8按下时,在外部中断程序中使计数变量加一,然后通过检测计数变量的值,单片机执行相应的程序从而实现不同的功能。 第四、自动播放音乐原理 我们知道乐谱是不同音符、节拍有机的组合,而音符脉冲频率原理我们通过上文已知晓,现在就要明白节拍的产生原理。节拍的产生,是通过调用适当的延时子程序来实现的。至于延时多长时间,是根据节拍来定的。如设1/4拍为1DELAY(延时子程序名)则2/4拍应为2DELAY,以此类推。因此,对于一确定的乐谱,我们只要求出该乐谱特定调的1/4拍时间,其他拍就是1/4的倍数。以下表是各调的1/4与1/8拍的延时值对照表: 各调1/4拍的延时值 各调1/8拍的延时值 曲调值 曲调值 DELAY DELAY 调4/4 调4/4 125ms 62ms 调3/4 调3/4187ms 94ms 调2/4 调2/4 250ms 125ms 表4.2 各调的1/4与1/8拍的延时值对照表 明白了这些,我们要进行自动播放,就较容易了。我们只需把要播放的乐谱中出现第11页 西华大学电气信息学院智能化电子系统设计报告 的音符及其节拍按音符在乐谱中出现的顺序编成一个表并存在单片机的ROM中,程序进入自动模式时在调用相应程序将其顺序读出即可。这样,就实现了音乐的自动播放。具体实现为,将乐谱中音符与其节拍用一个字节表示,这样,乐谱中顺序出现的音符及其节拍就构成了一个表。其中字节的高四位表示音符码,低四位表示节拍码。在查表时,将高四位的音符码取出,再根据音符码查T值表得到T0的初值,最后产生音符脉冲;将低四位的节拍码取出,调用对应延时程序就可得到节拍了。这样每个字节按顺序读出,就可实现音乐自动播放。 以下二表中,表4.3是节拍数及其对应的节拍码,表4.4是本课程设计中用到的简谱及其对应的简谱码: 节拍码节拍数节拍码节拍数节拍码节拍数 节拍码节拍数1/4拍3/4拍1又1/4拍2拍1 3582/4拍1拍1又1/2拍2又1/42 4 6 A 拍 表4.3是节拍数及其对应的节拍码 简谱 发音 简谱码 T值 中音DO 1 1 64580 中音RE 2 2 64684 中音MI3 3 64777 中音FA 4 4 64820 中音SO 5 5 64898 中音LA6 6 64968 中音TI7 7 65030 表4.4是本课程设计中用到的简谱及其对应的简谱码 第五、记录、回放功能原理 记录,即将输入模块输入的音符信号存入单片机的RAM中;回放,是记录的逆过程,即将存入的音符信号读出。 第六、数码管显示原理 (1)静态显示。数码管的静态显示较为简单,即将一个固定的值送入数码管显示出来,不需进行变化,值的显示是基于程序的循环扫描。 (2)动态显示。数码管的动态显示与静态显示的区别在于,动态显示所显示的值第12页 西华大学电气信息学院智能化电子系统设计报告 是变化的,但是数码管又能连续的显示,眼睛感觉不到字符的闪烁。其实,字符的显示并非真的是连续的,而是间断的,如要显示变化的字符“1”“2”“3”“4”“5”“6”“7”,即数码管要从“1”一直显示到“7”。那么,给数码管输入的值就必须是变化的,我们可以在值赋给数码管后延时适当的时间,利用肉眼的视觉暂留现象,从而实现连续显示的效果。同时,动态显示还要实现的功能是,由于段选信号是以平行的方式接入数码管的,要某个数码管显示特定的字符,则必须使某个数码管的公共端接入相应电平以实现位选。这一电平是根据数码管的类型确定的。数码管分为共阴极和共阳极,共阴极的位选电平是低电平;共阳极的位选电平是高电平。而总共有八个数码管,要使8个数码管同时显示不同的字符,则必须轮流让8个数码管导通,利用肉眼的视觉暂留效应,实现8个数码管同时显示的效果。但必须认识到,8个数码管是轮流显示的,只不过人眼有0.05至0.2s的暂留现象,加上数码管的余辉,这样才有8个数码管同时显示的效果。 4.2.2软件功能 本课程设计是基于51单片机的电子琴,单片机的介入,使得整个设计具有灵活性和可编程性,正是因为这样,软件的功能就决定了整个系统的主要功能。因此,软件的功能就是整个硬件系统的主要功能。这也体现了软硬件的紧密结合特性。软件决定硬件能实现某些功能,但软件必须依靠硬件才能实现其功能;脱离了软件的硬件,在某种意义上说,是一堆烂铁;脱离了硬件的软件,在某种程度上讲,就是一串串毫无实际意义的字符。二者是紧密联系、互相补充的。 本软件能驱动电子琴完成以下功能: (1)手动弹琴模式。此模式下,弹琴者可通过音符键随意弹出悦耳的音乐。但由于核心板上键盘数量的限制及自己音乐方面知识的不足,仅能弹出中音。核心板上有8个按键,我们用第一个键至第7个键作为音符输入键,第8个键(以后简称键8)作为功能切换键。当键8不按时,系统即为手动弹琴模式。在此模式下,第二个数码管显示键8的按下次数,此时显示“0”,4个状态指示灯指示系统目前的模式,此时第一个放光二极管亮此。按键1至键7中任意键,第一个数码管会显示对应的音符,最后6个数码管显示弹琴者弹琴的时间,分为时、分、秒;左边二个数码管显示时,中间二个显示分,最后二个显示秒。同时,扬声器模块会输出清脆的音符声音。 (2)记录模式。此模式下,弹琴者所弹的音符会被记录下来。按键8一次,可从手动弹琴模式切换到此模式。进入此模式后,第二个数码管显示“1”,状态指示灯中的第二个放光二极管亮,弹琴时间清零。按键1至键7中任意键,第一个数码管会显示对应的音符,最后6个数码管显示弹琴者记录的时间,同时,扬声器模块会发出清脆悦耳第13页 西华大学电气信息学院智能化电子系统设计报告 的音符声音。但由于RAM区的限制,只能记录50个音符。 (3)回放模式。此模式功能是将弹琴者记录的音符,按一定时间间隔顺序输出。可通过按键8二次,从记录模式切换到此模式。进入此模式后,第二个数码管显示“2”,状态显示灯的第3个数码管亮。第一个数码管显示回放的音符,最后六个数码管显示回放的时间(可能与记录所花时间不一致),同时扬声器回放弹琴者记录的音符。如果记录为空,第三个发光二极管闪烁,提醒弹琴者切换模式。 (4)自动播放模式。此模式的功能是把单片机RAM中已存的音乐自动播放出来。可通过按键8三次,从回放模式切换到此模式。进入此模式后,第二个数码管显示“3”,状态指示灯中的第四个放光二极管亮。第一个数码管显示当前播放的音符,最后刘个数码管显示自动播放的时间,当然,扬声器同时会播放音乐。 注意:当系统处于自动播放模式时,按键8第4次,系统重新回到手动按键模式,各种指针清零,数码管显示也清零,状态指示灯的第一个发光二极管亮。当有人弹琴时,数码管才开始显示音符、时间等,否则始终显示“0”。 4.3设计框图本次设计主程序分为四个大的功能块,通过功能键触发外部中断,使功能键按键次数变量加1,通过判断功能键按下与否进行功能切换。其中,头文件包含主要是把本次设计中所用到的各头文件包含进C文件中,包括89C52单片机系统头文件,和自己写的变量头文件,函数头文件及模式头文件。还有就是手动模式,记录模式,回放模式,自动播放模式,分别是调用这几个模式对应的函数。以下是本设计主程序的流程图。注:键8是否按下的检测是嵌入在各功能模块程序段中的,这里为比较清楚的展现功能块的切换,故单独写出来。 第14页 西华大学电气信息学院智能化电子系统设计报告 图4.1 主程序的流程图 第15页 西华大学电气信息学院智能化电子系统设计报告 4.4主程序 #include #include #include #include #include #include void main() init(); while(1) sd(); /手动模式 ,如果功能键不按下,一直保持为手动模式 rd(); /记录模式 hf(); /回放模式 zd(); /自动播放模式 void iner0() interrupt 0 EX0=0; k8_ant+; clear(); if(k8_ant=1) do_not=1; if(k8_ant=4) k8_ant=0;do_not=1; delay(200); /按键消抖 delay(200); IE0=0; 第16页 西华大学电气信息学院智能化电子系统设计报告 5系统调试 本次调试是分为两步进行的。首先,我们对电路板进行了电气检测,这一步非常重要,因为如果不能保证各个引脚电气连接的正确性以及电源连接正确性,硬件功能是无法实现的。第二步进行在线调试,即把写好的程序通过串口下载到单片机上,然后观察现象,对出现未预料的情况进行分析,查找原因,然后修改程序,最后重新下载到单片机上,再观察现象,直至修改程序到最佳的效果,这样整个调试过程就结束了。 严格说,硬件调试与软件调试是不能完全割裂开来的,就拿我们这次调试来说,在进行软件调试时发现了硬件中存在很多问题,就是这些硬件上的问题导致了软件功能的无法表现出来。硬件调试是软件调试的基础与前提,同时,软件调试是硬件调试的进一步验证与延伸,因为只有正确的硬件设计,软件才能表现出预期的效果 5.1硬件调试 上面已经谈到过,调试分两步进行,这里是第一步,即进行电路板的电气检测。我们首先测试了空板电源和地是否短路,然后检查了各个芯片的电源引脚及地引脚是否与电源插口上的电源接口及地接口正确连接,当然,都是测试通过了的。然后,我们又检查了个芯片的引脚与单片机相应的引脚的电气连接。令人吃惊的是,74HC541的第18脚与单片机的A0口没有电气连接,我们赶快测试该芯片的第18脚与芯片座子的连接情况发现是对的,最终,我们确定是核心板上的连线有问题。 除了这个问题外,我们在进行软件调试时又发现了两个很大的硬件设计错误,其一单片机P0口没接上拉电阻根本无法输出高电平;其二,老师发的是共阳极数码管,然而驱动芯片ULN2803没接上拉电阻根本无法输出高电平,这样根本无法把共阳极的数码管点亮。经过我组的多次试验,花了很长时间的调试,终于明白给P0口接1K的排阻给ULN2803输出端口接510欧的上拉电阻就可将共阳极的数码管的数码管点亮。而这些是老师事先没有告知的,就是这两个问题,导致我们花了将近一天的时间。但最后,还是解决了。 5.2软件调试 当认为硬件调试通过后,结下来就要进行非常核心的一步,那就是在线进行软件调试,虽然经过仿真通过,但不进行这一步,是无法说程序是对的。上面也谈到过,我组在软件调试中发现了硬件中的设计错误,即我组成员刚开始没意识到P0口不接上拉电第17页 西华大学电气信息学院智能化电子系统设计报告 阻,ULN2803输出不接上拉电阻的严重后果,只是想当然认为P0口输出低电平,经过ULN2803放大取反,就可点亮共阳极数码管。事实上,仅接了上拉电阻后才能实现点亮数码管的功能。 进行软件调试,我们采取的方法是,先对每个功能模块进行在线调试,仅当每个功能模块调试通过后,然后在进行功能模块间的切换,即功能模块间的联调。这样做的原因是,每个功能模块是相互独立的,而功能联调成功的前提就是每个功能模块是正确的。5.2.1各功能模块的独立调试 各功能模块的独立调试方法为,在主程序中先屏蔽掉其他功能模块,然后编译成功后下载到单片机上,运行观察现象看是否与预期的效果一致,不然,则修改程序,直到达到预期效果。以下是具体的调试说明。 先在主程序中屏蔽掉其他功能模块,调试主程序为: void main() init(); while(1) sd(); /手动模式 ,如果功能键不按下,一直保持为手动模式 rd(); /记录模式 hf(); /回放模式 zd(); /自动播放模式 此段程序是专门调试手动模式的,当其通过后,再调rd()函数,即记录模式,方法一样即屏蔽其他功能模块,单独调rd()函数。调其他功能块hf(),zd() 即回放模式,自动播放模式的方法依次类推。要注意的是,由于hf()即回放模式,是把记录模式中按下的音符信号回放出,独立调试时,先要给数组table3赋些初值。 当然,在调试中也遇到了很多问题,其中一个值得说明的是关于AT89C52单片机定时、计数器T2的用法。与其他两个定时、计数器不同的是,其增方式的初值是通过RCAP2H,RCAP2L这两个特殊功能寄存器实现的。 第18页 西华大学电气信息学院智能化电子系统设计报告 5.2.2各功能模块的联调 当各个功能模块独立调试通过后接下来就进行功能联调了。联调的方法是,主程序中不屏蔽任何功能模块,利用功能键进行各功能模式间的切换。而我们首先要明白的是功能键是利用外部中断,每按一次功能键,就触发一次外部中断,每进入一次外部中断就对记录功能键按键次数的变量加1,然后根据该变量的值也就是功能键的按键次数进行各功能模块间的切换。 进行联调时,我们是分两步进行的。第一步,我们要确保满足一定条件后,程序能从相应的模块中退出;原因是,每个模块都是一个无限循环程序段,如果要各个功能模块间进行切换,则必须先能从当前模块中退出。第二步,也就是功能切换调试,看各个模块见能否正常切换。进行,联调时,主程序是这样的: void main() init(); while(1) sd(); /手动模式 ,如果功能键不按下,一直保持为手动模式 rd(); /记录模式 hf(); /回放模式 zd(); /自动播放模式 功能切换是依据功能键按键的次数,也就是通过以下中断程序实现按键次数的变化,然后再在各个功能模块程序段中进行功能键按键与否检测,检测到功能键按下,则进行退出当前模块。 外部中断程序为: void iner0() interrupt 0 EX0=0; k8_ant+; clear(); if(k8_ant=1) do_not=1; if(k8_ant=4) k8_ant=0;do_not=1; delay(200); /按键消抖 delay(200); IE0=0; 第19页 西华大学电气信息学院智能化电子系统设计报告 6 指标参数 在硬、软件均调试通过后,我们对系统的个参数进行了测试。 1(单片机电源引脚电压:4.75V。 单片机各口正常电平:4.75V。 2(各芯片电源引脚电压: 74HC541,4.75V 74HC573,4.77V 74HC138,4.78V ULN2803,4.75V 3(共阳极数码管正常显示时共阳端的电压: 由于本次设计中用的是共阳极数码管,ULN2803接上拉电阻输出的最高电平才2.2V而共阳极数码管正常显示字符时,其亮度不够,共阳端电压仅为0.88V1.2V。7 结论 经过上面的说明,分析及调试过程,我们知道了本课程设计的硬件系统是由音符输入模块、单片机控制模块、显示模块及扬声器输出模块,这几个模块组成;软件系统由手动模式、记录模式、回放模式及自动播放模式,这几个功能模式组成。 在整个调试的过程中我们遇到了一些问题,在解决这些问题的过程中,我们学到了第20页 西华大学电气信息学院智能化电子系统设计报告 一些书上没详细介绍的知识。下面我将根据根据整个设计过程中的思考、分析、讨论及调试过程做出如下结论性的说明: 1.功能键实现一键复用是一个明智的选择。由于我们进行调试所用的外扩电路板是面包板,如果外扩键盘,如不用核心板上上的8个独立按键,而是外扩44矩阵键盘,那样的话焊在面包板上会相当的麻烦。这样的话,一方面没充分利用核心板上的器件,同时增加了焊接的难度。但是,不外扩的话,核心板上的键盘又不够用。于是,我组采用了一键复用的方法,同时为了保证功能切换的实时性,我们将键8与单片机的外部中断接口相连。键8的复用,一方面,节约了设计的器件成本与实践的时间成本;另一方面,让我们对外部中断的利用有了新的理解。应该说,这是本设计中一个较为重要的设计点。 2.按键次数数码管显示及状态灯的使用,增加人机交流效果。我们知道了键8复用的原理,但是为了让演奏者明确电子琴所处的状态,我们用一个数码管显示出功能键所按的次数;用核心板上发光二极管显示电子琴所处的状态。 3.记录、回放、自动播放,这三个扩展功能增加了电子琴的吸引力。本次课程设计的最基本功能是模拟电子琴弹奏功能,在我组的努力下,同时为增加对所学知识的理解与掌握程度,我们扩展了这三个功能。调试时,这几个功能实现起来的效果还是不错的。4.调试过程较为顺利,各个功能模块能较好的达到预期效果。如音符输入模块,按键能顺利完成其音符输入的功能,同时,显示模块及扬声器模块能实时显示和发声。总的来说,整个设计、调试过程较为顺利;各个功能模块能较好的达到预期效果;各功能模块的主要参数均正常。 8 总结与体会 经过上述较为详细的分析、说明,我们知道了,本设计的硬件系统由音符信号输入第21页 西华大学电气信息学院智能化电子系统设计报告 模块,也即键盘输入模块,单片机控制模块,数码管及状态显示模块,扬声器输出模块这几个功能模块组成。软件系统由手动模式、记录模式、回放模式及自动播放模式这四个功能模块组成。 经过认真的仿真及调试,最后,我们实现了电子琴的基本功能和扩展功能。应该说,整个设计的软硬件都比较合理,因为最后能较好的实现本设计的预期任务。但也有不足之处,即虽然各个功能模块能较好的实现预期功能,扬声器(实际上用的是蜂鸣器)所发出的声音根本无法区分到底是do,还是re,也即发出的声音并不那么理想。原因可能是蜂鸣器无法把较高频频的音频脉冲正确的模拟出来;还可能就是程序没能协调发音节拍与音频脉冲的关系,而这部分是涉及到音乐领域方面的专业知识,作为本次设计,我们已达到课程设计的目标故没在深入下去。 在整个设计过程中,通过查资料,我们学到了很多书本上没介绍的知识,例如AT89C52定时、计数器T2的用法,芯片ULN2803的用法。还有对已学知识的进一步理解如外部中断的使用,按键软件消抖的应用,P0口要输出高电平必须接上拉电阻等等。 在调试过程中,我们遇到了很多问题,但是通过我组成员的密切配合,问题都解决了。值得提出的是我们独立的解决了共阳极数码管因为硬件原因无法显示的问题,解决办法是给P0口及ULN2803接上拉电阻。虽然,说起来很简单,但这个问题我们花了将近一天的时间才找出来,最终加以解决了。 在软件调试的过程中,一路走来,对耐心的磨砺是很大的。经过调试,我组成员的耐心得到了锻炼,这对以后的学习是很有帮助的。 整个软件设计中,由李清同学设计总体方案,李双生同学完成了手动模式程序的编写,郑波同学完成了功能切换程序的编写,其余由李清同学完成。 总的来说,通过本次设计,我组成员密切配合,相互交流,提高了与人合作的能力。同时,提高了软、硬件的设计能力,更加理解了书本上关于单片机的知识。应该说,在本次设计中我们收获很多。 9致谢 本次课程设计我们遇到了许多问题,在老师的指导下,我们小组同学积极思考和讨论,完成了此次课程设计。通过这次设计我们受益匪浅,学到了很多东西。在此我们要感谢学院提供了这次课程设计的机会;感谢在设计中给予我许多帮助的老师,特别要感第22页 西华大学电气信息学院智能化电子系统设计报告 谢阳小明和李天倩两位老师,在我们的设计过程中,他们至始至终地给予我们悉心的指导,从而使我们的设计顺利完成。同时也要感谢小组内的各位同学,感谢全组同学能够做到互相学习、团结一致共同战胜难点。 10参考文献 1 杨将新、李华军.单片机程序设计及应用(第三版)M. 北京:电子工业出版社,2006. 2 胡汉才.单片机原理及其接口技术M. 北京:清华大学出版社,2004. 3 康光华、邹寿斌.电子技术基础数字部分(第五版)M. 北京:高等教育出版社,2006. 第23页 西华大学电气信息学院智能化电子系统设计报告 4 张毅刚、彭喜元.单片机原理及应用M.北京:高等教育出版社,2003. 5 谭浩强. C语言程序设计(第三版)J.北京:清华大学出版社,2005 7 张海兵、李敏.PROTEL电路设计实例与分析J. 北京:人民邮电出版社,2005 8 李春葆、金晶.C语言程序设计辅导M.北京:清华大学出版社,2007 9 杨将新、李华军.单片机程序设计及应用(第三版)M. 北京:电子工业出版社,200610 鲁捷、焦振宇.PROTEL 2004 电路设计M. 北京:清华大学出版社,2006 11 谢自美 主编(电子线路设计.实验.测试(第二版)M(华中理工大学出版社,2005 12 谢维成、刘勇.微机原理与接口技术M.华中科技大学出版社,2009 第24页 西华大学电气信息学院智能化电子系统设计报告 附录一:相关设计图 图一:Protel原理图 第25页 西华大学电气信息学院智能化电子系统设计报告 图二:PCB图 第26页 西华大学电气信息学院智能化电子系统设计报告 图三:ISIS仿真图 图四:电子琴实物图 第27页 西华大学电气信息学

温馨提示

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

评论

0/150

提交评论