用单片机演奏电子乐曲课程设计报告.doc_第1页
用单片机演奏电子乐曲课程设计报告.doc_第2页
用单片机演奏电子乐曲课程设计报告.doc_第3页
用单片机演奏电子乐曲课程设计报告.doc_第4页
用单片机演奏电子乐曲课程设计报告.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、 课程设计目的: 我们学习了一个学期的单片机,这次课程设计就是以现有的基础和能力,利用本次设计加以运用,从而达到对所学知识的巩固,更深一步的理解,面对一个电子设计,应对出系统的方案,分析出各个板块来,在对各个板块进一步的具体的设计,先进行硬件电路设计,此时一定要考虑好要用什么元件、各个元件的具体参数、是否能实现应有功能,从而得到一个完整的硬件电路。在根据该电路设计出软件的功能模块、从而完成程序流程图,在跟据程序流程图完成程序的设计,并通过反复的调试、运行、更正,直至完成既定功能为止,最后将软件,硬件结合进行调试、运行,对其功能进行最终测试,并反复思考其测试中遇到相应问题的原因,并将其一一处理,从而完成本次设计的实验要求,以及本次课程设计的最终目的。 本课程设计教学根据课程的教学大纲的要求和单片机原理与接口实验室建设所提供的条件,安排了单片机控制系统的设计课题,从而使我们更好地掌握课堂学习的理论知识,掌握基本实践技能,并能进行一定的综合应用和探索。通过课程设计的教学,使我们巩固和深化已学的理论知识,加强综合应用能力,训练学生掌握分析问题、解决问题的方法,培养较强的动手能力和一定的单片机应用系统的设计和调试能力。2、 课程设计要求: 本次课程设计要求在一周的时间内利用实验室的现有条件或者自己的设备完成程序的编写和调试,具体要求如下: 1、设计题目都需要进行硬件设计和软件设计,并调试成功;2、设计的硬件电路要包含I/O设备,并使用I/O功能;3、尽可能使用单片机的定时计数器和中断资源4、硬件可使用THDPJ-1/2型单片机开发综合实验箱,也可使用自己的硬件电路5、可用C51或汇编语言编程3、设计题目分析31 题目简介 用单片机演奏电子乐曲,相当于制作一个带有录音播放功能的电子琴。电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本次课程设计的主要内容是用AT89C51单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、蜂鸣器等模块组成核心主控制模块,在主控模块上设有16个弹奏按键、1个播放键,1个暂停键和蜂鸣器。该课题则增强了我们对于44矩阵式键盘的了解和使用能力,在扫键,取键值,赋值三个方面的进行了加强和巩固。另外也对存储区域和空间进行了复习和使用,加深了我们对于单片机内部结构的认知,为我们进一步学习单片机提供了更深厚的能力。另外,通过实践和成果展示,我们也能在学习中获得学习的兴趣,让我们的学习充满了乐趣。32 设计要求本设计是以AT89C51芯片的电路为基础,利用蜂鸣器进行音乐的播放,并且利用44的键盘进行弹奏,并把弹奏的音录入存储单元内,然后将弹奏的音符播放出来。并且添加了LED指示灯来区别模式的不同。归纳总结为以下四个功能:1、可以播放若干首程序自带的音乐库里的歌曲;2、使用44矩阵式键盘设计出16个音符,随意弹奏;3、将演奏的音符存放到单片机的存储单元中,并且可以作为音乐库里的音乐播放;4、用LED指示灯来区分播放与演奏两个功能。4、课程设计内容41 总体设计4.1.1总体设计框架:该系统结构以AT89C51单片机位控制核心,4*4矩阵键盘,加上2个按键、时钟复位电路、蜂鸣器等模块组成。单片机负责接收按键的输入,根据的输入按键所对应的音符蜂由鸣器发音。系统总体组成框图如图所示。 AT89C51 单片机蜂鸣器4X4键盘播放键 LED灯显示录音兼演奏键 图一 系统组成框图4.1.2系统功能模块: 电子琴的功能结构如图2所示。切歌键负责切换播放歌曲,播放歌曲共4首,分别是千年之恋和寂寞沙冷,七子之歌,感恩的心,另外第一首播放的为录音录入的曲调,不想播放可以再次按播放键进行四首歌的播放。暂定键负责暂停并且进入电子琴弹奏模式,4X4的键盘,每个按键都对应这不同的音调,并且弹奏的同时也把所弹奏的曲调录入了存储单元里。在区分不同的模式上用的是LED灯明和灭来区分演奏模式和播放模式。 切歌键 演奏键 播放已存入的歌曲,可按切歌键进 行切歌。也可以把录入的曲调完整播放出来利用4X4键盘进行演奏并且进行录音 LED灯亮LED灯灭 图二 系统功能模块图 4.1.3程序总流程:(1)键盘扫描程序:检测是否有键按下,有键按下则记录按下键的键值,并跳转至功能转移程序;无键按下,则返回键盘扫描程序继续检测。 (2)功能转换程序:对检测到得按键值进行判断,是琴键则跳转至琴键处理程序,是功能键则跳转至相应的功能程序,我们设计的功能程序有两种,即电子琴弹奏功能和自动播放乐曲功能。(3)琴键处理程序:根据检测到得按键值,查询音律表,给计时器赋值,使发出相应频率的声音。并且把键值对应的频率放入歌曲播放数组中,等待播放。(4)自动播放歌曲程序:检测到按键按下的是自动播放歌曲功能键后执行该程序,电子琴会自动播放事先已经存放好的歌曲,歌曲播放完毕之后自动返回至键盘扫描程序,继续等待是否有键按下。开始键盘扫描程序T0初始化并开中断允许T0中断有键按下否 否延时去抖动 是识别按键功能是否演奏键 否播放键 是取相应的音符码装入T0根据按键功能装入相应音符值到T0,并且把相应的音符放入存储单元中启动T0启动T0按键释放成功否按键释放成功否T0停止工作T0停止工作 图三 程序总流程图4.1.4系统整体电路在电路的设计上,我们利用的是实验室的实验箱,用到的主要硬件有AT89C51芯片,两个独立按键,一个LED灯,和4X4的键盘。整体电路图如下:1.电路中用P3.2、P3.3控制按键。2.P1.0P1.7控制4*4矩阵键盘3.P3.7控制蜂鸣器。4.P2.0控制LED灯的明灭 图四 系统整体硬件图各个部分的放大图片如下: A 键盘 B振荡电路C复位电路D功能键和蜂鸣器模块图五 电路模块42 详细设计:4.2.1弹奏录音模块:弹奏录音模块中我们用到了扫键程序keys_scan,键值赋值程序keybranch,另外设定了一个录音数组playmusic16,可放入相应按键对应的频率。再者在这个模块中我们用到了定时器0以及其中断,用来是蜂鸣器鸣叫。补充说明在弹奏录音功能进行时是LED灯是灭的。这个模块中涉及到了几个函数参数,如选歌参数count2,4X4键盘接口P1,启动关闭定时器0的参数TR0,录音可放入的音调数量cnt。另外还调用了延迟子函数delay_ms。弹奏录音程序流程:开始开中断并允许中断设定定时器工作方式取键值根据键值查音律,并把按键做对应的频率和拍子放入录音数组中等待给定时器T0赋值开始计时进入中断蜂鸣器发出对应音调退出中断延时返回键盘扫描程序图六 弹奏录音程序流程图4.2.1歌曲播放模块 歌曲播放模块中我们用到了歌曲播放子程序song,在这个模块中我们也用到了定时器0以及其中断,用来是蜂鸣器鸣叫。补充说明在弹奏录音功能进行时是LED灯是亮的。 这个模块中涉及到了几个函数参数,如选歌参数count2,简谱参数jp,另外还有定时器0初值数组cuzhi,启动关闭定时器0的参数TR0,录音可放入的音调数量cnt。四首歌简谱对应的四个数组分别为ganen,qnzl,jmszl,qizige,以及录音播放数组playmusic。还调用了延迟子函数delay_ms以及节拍时间函数delay。自动播放歌曲程序流程:开始开中断,设定定时器T0工作模式取简谱码取该音符的节拍码返回键盘扫描Count2=0 Y N查音律表,给定时器赋值 开始计时 进入中断蜂鸣器发出对应音调退出中断延时图七 自动播放歌曲程序流程43 调试与测试:程序调试过程: 1.检查实验箱和硬件设备是否能够正常使用:我们用实验箱搭了一个简单的电路,在软件上写了一段很简单的程序,运行后,实验箱正常工作。证明了实验箱是完好的,没有损坏,接下来的实验排除了箱子故障的问题。2.调试各个子程序:我们先把硬件电路在实验箱上搭好,然后再把子程序一个一个套进去,一个一个的调试。首先调试的是基本的电子琴弹奏功能子程序,包括键盘扫描程序,赋值程序,延迟程序,以及每个按键对应的按键音的播放程序。而后,我们调试音乐播放模块程序,最后把录音模块加上去。3. 最后将程序完整化,把整个程序完整运行,看看功能程序是否能够在整体中正常发挥作用。4.调整好程序的结构,是结构的可读性增强,添加适当的备注。调试中出现的问题和解决方法:问题一:在演奏功能的实现时,每个按键的音调有些跑偏了。解决方法:我们在当前的频率值附近逐个取值试验,用最合适的频率值替代,最后使按键音能够基本符合标准。问题二:在播放功能中,我们放入的歌曲简谱是从网上直接找出来的,在有一些地方音调就跑了。解决方法:我们自己对应着歌曲的简谱,把个别错误的地方改正过来。问题三:这是最大的一个问题,录音功能没办法实现,没办法把键盘对应的音调存入数组中。解决方法:虽然我们到最后也没能把这个问题解决,但是在这个问题上我们想尽了办法。刚开始我们本来打算放入ROM中,打算放入30h中,但是没有效果。我们也不知道问题出在哪里,后来老师提醒我们在memory的窗口中可以看到内存中是否有东西存入,就可以判断到底有没有存入。很不幸,里面没有存入东西。后来我们放入录音数组中,打算弄成一个格式和四首已放入简谱的歌曲一样的数组,但是我们在内存中还是没有看到。最后一天的时候,我发现偶尔有几次是可以写进去的,但是写进去的东西不是我们按键按下去所对应的键值,依然不能写入。究其原因,可能是硬件内部存储单元发生了问题,也可能是软件的问题,也可能真的是程序的问题,由于我们水平有限,所以也真的没办法解决问题,很遗憾啊。5、 设计心得与总结: 在这次的课程设计中,我收获了很多,也更了解单片机在生活中的一些运用,同时也让我们收获了学习的乐趣。在设计和调试的过程中我遇到了很多困难,也在这过程中明白了自己的不足,也谢谢老师和同学的帮助。刚开始的第一天我是满怀信心,完成了选题,程序框图,实际电路的设计,也在网络和书籍上寻找相关的程序范例,一些都进行得很顺利,但是往后,在程序上我遇到了很大的问题。第二天的时候,几个子程序和大致的主程序已经写好,但是在录音功能的程序编写上遇到了很大的问题,录音程序在调试的过程失败了,但是也有收获,基本的功能已经可以实现,包括演奏和播放以及指示灯都基本可以实现。第三天我就一直在纠结程序录音功能为什么会失败,我尝试了各种方法,找了其它同学,但是还是解决不了问题,就这样整整纠结了一天。第四天的时候,我向老师求救,最后判断为单片机的内部RAM里写不进去内容,至于为什么这还是一个未知的结论,可能是单片机硬件的问题。但是我们还是没办法解决这个问题。第五天的时候,就要进入收尾的阶段了,我们依然还在奋斗着,很可惜,最后我们也没能把录音功能成功调试出来。因为以前做实验的经验,所以我们对大致的过程比较熟悉,可是还是有一些小问题不断地出现,要不断地进行修改,我的经验太少,能力不够,对于出现的问题,没办法找到原因,也没办法解决,这一点我很惭愧,有待加强。 经过一周的课程设计,我对于单片机的运用有了一个新的认识,同时也更好的掌握了Keil uVision该软件的的大致用法。在不断地学习和巩固中,提高了自学能力和解决问题的能力,同时积累了经验。6、建议:从人员数量上来说,每一组的人数过多了点,造成了人力资源的浪费以及个别同学无所事事。实验设备的数量太少,而且都有不同程度的损伤,应该及早进行维修。设备的提供能够让每个同学都能独立完成课程设计,让每个人都能在课程设计上多多收获。如在设备上不能提供,可以让每个人动手自己去做一个简单的单片机最小系统,这样也可以加强我们在硬件上的理解。另外,课程设计的时间也可以适当的延长,让我们每个人能够独立的把任务完成得更加完善。同时,我们也需要有人能够指导和解答,最好能够配备几个能力比较强的学长学姐帮助我们解决这些困难。如果能够解决以上的问题,我相信我们的成果会更加让人满意。7、评阅意见 教师签名: 年 月 日参考书目:1 杨居义,单片机课程设计指导,清华大学出版社 ,北京,2009-9-1 2 徐懂理,王曼,赵艳,单片机原理与接口技术实验与课程设计,北京大学出版社,北京,2012-7-13 陈明荧,8051单片机课程设计实训教材,清华大学出版社,北京,2004-4-14 单片机-电子琴演奏,2012年10月3日,/view/a12f7c1d964bcf84b9d57b6d.html5 毕业设计:基于单片机音乐演奏系统设计或电子琴设计,2012年10月3日,/p-198335474722.html 附录一:简谱对应的简谱码、T值、节拍数简谱发音简谱码T值节拍码节拍数5低音SO16426011/4拍6低音LA26440022/4拍7低音TI36452433/4拍1中音DO46458041拍2中音RE56468451又1/4拍3中音MI66477761又1/2拍4中音FA76482082拍5中音SO864898A2又1/2拍6中音LA964968C3拍7中音TIA65030F3又3/4拍1高音DOB650582高音REC651103高音MID651574高音FAE651785高音SOF65217附录二:程序#include #include #define uchar unsigned char#define uint unsigned intsbit key1=P32;/暂停歌曲进入弹奏模式sbit key2=P33;/切歌sbit bell=P37;/蜂鸣器sbit LED=P20;/灯亮即为歌曲播放模式,反之为电子琴演奏模式uchar count2=0;/选歌uchar timeh,timel,keynumb,i,d=0,j;int cnt=0;void song( );uchar playmusic16;Uint code tone_delay_table=64021,64103,64260,64400,64524,64580,64684, 64777,64820,64898,64968,65030,65058,65110,65157,65178;/十六音阶的简谱码uchar code qnzl= /千年之恋简谱0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,0x42,0x63,0x83,0x83,0x91,0x91,0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff;/高四位为音调,低四位为拍子uchar code jmszl= /寂寞沙洲冷简谱0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54,0x22,0x12,0x11,0x12,0x11,0x12,0x12,0x14,0x26,0x32,0x26,0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34, 0x31,0x81,0x81,0x81,0x61,0x91,0x82,0x51,0x51,0x51,0x51,0x31,0x61,0x53,0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34,0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,0xff; uchar code qizige= /七子之歌简谱0x54,0x32,0x52,0x32,0x54,0x62,0x52,0x32,0x62,0x54,0x14,0x12,0x22,0x34,0x52,0x32,0x02,0x32,0x58,0x52,0x52,0x62,0x52,0x32,0x54,0x52,0x62,0x52,0x82,0x62,0x58,0x14,0x52,0x32,0x22,0x12,0x24,0x32,0x54,0x2,0x22,0x34,0x1f,0x18,0x04,0x54,0xa4,0x92,0x81,0x62,0x52,0x54,0x62,0x64,0x52,0x62,0x81,0xa2,0x82,0x9c,0x02,0x52,0xa4,0x92,0x81,0x62,0x52,0x54,0x62,0x64,0x52,0x64,0xa2,0x92,0x9f,0xa4,0x92,0x81,0x62,0x52,0x54,0x84,0x62,0x52,0x32,0x22,0x14,0x04,0x22,0x32,0x58,0x58,0x04,0x52,0x62,0x8f,0xff; uchar code ganen= /感恩的心简谱0x12,0x14,0x22,0x32,0x54,0x32,0x84,0x72,0x62,0x54,0x02,0x62,0x62,0x52,0x54,0x12,0x22,0x32,0x28,0x12,0x14,0x22,0x32,0x54,0x32,0x84,0x92,0x82,0x54,0x32,0x24,0x21,0x61,0x54,0x22,0x32,0x12,0x18,0x22,0x24,0x12,0x24,0x11,0x21,0x34,0x32,0x21,0x31,0x34,0x12,0x22,0x22,0x22,0x11,0x21,0x22,0x64,0x52,0x52,0x32,0x38,0x31,0x52,0x51,0x52,0x31,0x51,0x58,0x31,0x82,0x81,0x82,0x31,0x61,0x68,0x62,0x62,0x62,0x51,0x61,0x64,0x61,0x82,0x61,0x9c, 0x52,0xa4,0x92,0xa4,0x32,0x84,0x72,0x64,0x62,0x94,0x82,0x94,0x61,0x81,0x92,0x91,0x91,0x92,0x81,0xa1,0xa2,0x92,0x94, 0x52,0xa4,0x92,0xa4,0x32,0x84,0x72,0x64, 0x52,0x62,0x81,0x81,0x82,0x92,0xa2,0x94,0x82,0x72,0x82,0x88,0xff; void delay_ms(uchar x)/延时子函数 uchar i; while(x-) for(i=0;i0;x-) for(y=19000;y0;y-);void beep() /蜂鸣器叫一声 uchar i; for(i=0;i4)0x0f; /低四位换为高四位并且把高四位置0switch(tmp) /扫描行case 0x01:k=k+0; break; case 0x02:k=k+4; break; case 0x04:k=k+8; break; case 0x08:k=k+12; break; default:return; keynumb=k;void keybranch( ) /键值赋值,赋的是十六音阶的简谱 switch(keynumb) case 0x00:d=0x14;break; case 0x01:d=0x24;break; case 0x02:d=0x34;break; case 0x03:d=0x44;break; case 0x04:d=0x54;break; case 0x05:d=0x64;break; case 0x06:d=0x74;break; case 0x07:d=0x84;break; case 0x08:d=0x94;break; case 0x09:d=0xa4;break; case 0x0a:d=0xb4;break; case 0x0b:d=0xc4;break; case 0x0c:d=0xd4;break; case 0x0d:d=0xe4;break; case 0x0e:d=0xf4;break;

温馨提示

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

评论

0/150

提交评论