单片机课程设计(论文)电子琴课程设计.doc

上传人:仙人指路1688 文档编号:3936640 上传时间:2023-03-28 格式:DOC 页数:17 大小:736.50KB
返回 下载 相关 举报
单片机课程设计(论文)电子琴课程设计.doc_第1页
第1页 / 共17页
单片机课程设计(论文)电子琴课程设计.doc_第2页
第2页 / 共17页
单片机课程设计(论文)电子琴课程设计.doc_第3页
第3页 / 共17页
单片机课程设计(论文)电子琴课程设计.doc_第4页
第4页 / 共17页
单片机课程设计(论文)电子琴课程设计.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《单片机课程设计(论文)电子琴课程设计.doc》由会员分享,可在线阅读,更多相关《单片机课程设计(论文)电子琴课程设计.doc(17页珍藏版)》请在三一办公上搜索。

1、目 录第1章 设计的要求及目的31.1 设计要求31.2 设计目的3第2章 系统总体方案选择与说明42.1 系统方案综述42.2 系统设计思路4第3章 系统方框图与工作原理53.1 系统硬件电路设计框图53.2 工作原理5第4章 各单元硬件设计说明7第5章 器件说明9第6章 系统软件设计96.1 主程序设计96.2 手动弹奏子程序96.3 自动播放子程序9第7章 调试步骤、结果、使用说明107.1 调试步骤107.2 系统运行10第8章 设计总结10第9章 参考文献11附录A: 仿真电路图12附录B: 程序清单12附录C: 硬件实物图18第1章 课题设计的要求及目的1.1课题设计要求本课题要求

2、以单片机为核心设计一个电子琴,具有自动播放乐曲和弹奏乐曲的功能。乐曲的自动播放是用中断实现的,弹奏则是用16个按键开关来分别控制产生低音“3、4、5、6、7”、中音“1、2、3、4、5、6、7”和高音“1、2、3、4”。利用单片机端口I/O口线形成44矩阵式键盘完成上述按键的分配。1.2课题设计目的(1)能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。(2)熟悉51单片机的内部结构和功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。(3)为实现预期功能,能够对系统进行快速的调试,并能够对出现的功能故障进行分析,及时修改相关软硬件。(4)对软件编

3、程、排错调试、相关软件的使用技能等方面得到较全面的锻炼和提高。(5)理解音乐产生的原理、键盘扫描方法以及单片机内部定时器的溢出中断编程方法。(6)本次课程设计从硬件和软件两个方面入手,全面具体地掌握设计思路、方法和过程,使理论与实际相结合,充分地锻炼了动手能力和思维扩展能力。第2章 系统总体方案选择与说明2.1系统方案综述从系统实现的功能上来看,简易电子琴的课程设计主要分为手动弹奏乐曲和自动播放音乐两大部分组成。手动弹奏乐曲是根据具体的硬件键盘设置功能键实现低音、中音和高音,自动播放音乐则是通过中断的方法来实现。从系统硬件结构上来看,我们主要使用到51系列单片机、矩阵16键输入电路、蜂鸣器以及

4、晶振复位电路等等。将这些硬件电路有机地结合起来使之满足简易电子琴的实现硬件需要。从系统软件设计角度来看,将简易电子琴的课程设计采用程序模块化设计方法,将程序分为主程序、键盘扫描程序模块、中断发音程序模块等等。此外,采用程序设计思想,将中断定时方式与外部按键查询方式相结合,实现手动弹奏乐曲和自动播放音乐两部分的切换和启动。从音乐产生原理方面来看,通过控制单片机的定时器的定时时间产生不同频率的音频脉冲,经放大后驱动蜂鸣器发出不同音乐的声音。用软件延时来控制发音时间的长短,控制节拍。把音乐的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在存储器中,由程序查表得到定时常数和延时常数,分别用

5、来控制定时器产生的脉冲频率和发出该音频脉冲的持续时间。因此,我们可以综合上述的方案设计原理,从软件和硬件两部分进行有计划有步骤的系统分析和设计。2.2系统设计思路1、手动弹奏乐曲和自动播放音乐用非编码的矩形键盘来实现。手动弹奏乐曲中矩阵键盘的16个键分别设置不同的音符,同时用一个键作为中断控制程序的控制键,通过其可实现手动弹奏乐曲与播放音乐之间的切换。2、软件的设计主要包括矩形键盘扫描、音乐播放程序和手动弹奏程序。4、此次程序设计主要分为两大块:手动弹奏乐曲程序和自动播放程序。两者之间用功能转换程序对其进行结合,并实现各功能的控制。第3章 系统方框图与工作原理3.1 系统硬件电路设计框图 基于

6、单片机系统的电子琴的基本结构如下图所示5 1 单 片 机44键盘时钟电路复位电路中断播放电路蜂鸣器 3.2 工作原理用单片机播放音乐,或者弹奏电子琴,实际上是按照特定的频率,输出一连串的方波。为了输出合适的方波,首先应该知道音符与频率的关系。1音名从常见的电子琴的键盘谈起。在下表中,可以看到一列黑白相间的琴键(示意)。主要分成低音、中音和高音三个区域,每个区域都有12个琴键。其中的白键,简谱音符标为1、2、3、4、5、6、7,大家一般都读成哆、来、咪、发、嗦、拉、西。2频率注意看一下几个6(拉)的频率,它们是整数,容易看出规律是成2倍的关系。其它的音符,也有同样的规律。这些频率,如220、44

7、0等,它们在琴键上的位置是世界统一的,无论是钢琴、手风琴,还是电子琴,都是一样的。包括黑键和白键在内的全部音符的频率数值,是成“等比数列”的关系,它们之间有个公比,可以按照“2倍”的规律推算出来。已知最低音的6(拉)的频率是220,设公比为q,那么:7的频率就是220*q*q 。乘了两个q,是因为6、7之间隔了个黑键。以此类推,两个6之间,共有12个琴键,所以:低音区的6(拉)的频率就是:220*q*q*q*q*q*q*q*q*q*q*q*q = 440。马上就可以看出,12个q相乘,等于: 440 / 220 = 2。那么就可以求出公比:q = 2的12次方根 = 1.059463094。用

8、这个公比,和已知的220进行计算,可以得出全部琴键所对应的频率,如下表中所示。3定时初值频率的倒数是周期,用单片机输出方波,应该在半个周期的时刻,将输出取反。设单片机的晶振为12MHz,那么定时器将在1us进行一次加一,加到65536就会出现中断。据此,就可计算出定时器定时半个周期所需的初值,如下表中所示。4音调数据表单片机发出不同频率的方波,人听起来,就是不同的音调。上表中的频率数值,有些过多,去掉不常用的黑键频率,只是把白键对应的数据存放在单片机中,即可满足绝大部分的应用需求。定义音调数据表的程序如下: DW 63625, 63833, 64019, 64104, 64260, 64400

9、, 64524 ;低音区:1 2 3 4 5 6 7 DW 64580, 64685, 64778, 64820, 64898, 64968, 65030 ;中音区:1 2 3 4 5 6 7 DW 65058, 65110, 65157, 65178, 65217, 65252, 65283 ;高音区:1 2 3 4 5 6 7 DW 65297 ;超高音:1把这个数据表,放在程序中,需要播音的时候,就从表中取出一个数据送到定时器,当定时器溢出中断的时候,再对输出引脚取反,那么,在扬声器中,即可听到上表中频率的声音。第4章 各单元硬件设计说明硬件电路的设计及实现相对简单。硬件电路由按键模块、

10、蜂鸣器模块、复位电路和电源电路部分组成。1、单片机选用 AT89S52以较小的体积、良好的性能价格比倍受青睐。本次课程设计采用89S52单片机。AT89S52单片机的仿真和实际接口图如下图所示: P2口作为44矩阵键盘的扫描端口, P3.2作为中端口,P3.7作为蜂鸣器接口。 3、按键模块的设计上图为硬件系统的44的矩阵式键盘电路逻辑图,键盘的行线连接到P2.0-P2.3口上,列线连接到P2.4-P2.7口上,单片机通过逐行扫描的方法对键盘进行扫描,读取判断有无键被按下以及按键的位置。为了判断有没有键被按下,可先向P2.0输出高电平,然后检测四列。若无键按下,P2.1输出高电平,再检测四列,依

11、次下去。 4、蜂鸣器模块的设计电磁式蜂鸣器由振荡器、电磁线圈、磁铁振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。本系统设计的蜂鸣器通过驱动电路与单片机的P3.7连接,单片机就可以通过P3.7的输出信号频率就行控制。实际电路图如右所示。5、电源部分及其他附属模块的设计对输入电路产生的电源我们的要求是稳定在5V左右,保证单片机的正常工作。另外,我们采用桥式电路接法实现交流转直流。复位是单片机的初始化操作,其作用是使CPU和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。本系统采用上电

12、与按键复位电路,为了防止干扰串扰复位端,所以再接一个去耦电容。晶振电路的设计可以两个电容与一个晶振即可,用来产生一个约等于12MHZ的稳定的频率。中断按键电路,采用一个手动按键与单片机的P3.2相连。当按下按键便可以给单片机一个外部信号供其查询中断。第5章 器件说明电路板 1个AT89S52单片机 1 片11.0592 MHZ的晶振 1 片电容 3片按键开关 17个电阻 4个PNP8550 1个蜂鸣器 1个导线 若 干第6章 系统软件设计6.1主程序设计主程序的的功能,主要是定时器的初始化和不同功能的调用,这里使用到不同的子程序,先调用键盘扫描子程序,再弹奏和音乐播放功能。6.2手动弹奏子程序

13、 手动弹奏程序的功能是通过对键盘的扫描将每一个键设置为一个音符,每按下一个键就能蜂鸣器就能产生相应的音符。这里,系统设计了第一行为高音部分的音符,第二行为中音部分的音符,第三行为低音部分的音符。6.3自动播放子程序自动播放音乐程序的功能是按照音乐代码表中去的节拍通过定时器向蜂鸣器送出音乐频率。自定义乐曲数据表,一个音符有三个数字, 分别是音名、音区和时长(以1/8拍为单位)。例如:DB 3, 1, 8 (咪, 中音, 8个1/8拍)。当取出的代码为DB 0, 0, 0时音乐结束播放,自动播放程序调用结束。第7章 调试步骤、结果、使用说明7.1 调试步骤先对仿真图进行调试直至成功才可以进行硬件电

14、路的焊接。仿真调试,我们用proteus和keil软件。程序没有错误后加载到单片机中,运行成功则可进行硬件电路的焊接,不成功则需检查程序直至成功。硬件电路焊接完毕后(此时未加单片机,只有底架),还要到对电路进行仔细的检查,不然有短路的情况出现就会烧坏电路板。如果检查都无误,下一步就是到试验箱进行仿真。仿真成功则将程序烧入单片机,然后将单片机插入底架。 在电路上加5V电压,若还是成功的,那就结束;若不成功,还需再对电路板进行检查。7.2系统运行载入程序,直接进入手动弹奏音乐的程序。直接按下矩阵键盘上的16个按键就可以弹奏16种音符。按下P3.2口接得按键后便可自动播放音乐,在音乐播放过程中,弹奏

15、按键无效。只有播放结束才可以转入手动弹奏乐曲功能中去。第8章 设计总结历时近两周的单片机课程设计对我收益匪浅,让我系统性地认识和全面地掌握了单片机技术,让我将平常学的汇编语言和编程方法学以致用,使我的汇编能力有了很大提高和进步,让我对单片机外围接口设备有了更深入细致的了解。第一周,我们自己根据所选课题查资料,了解电子琴的发音原理,整理出程序设计的大概思路。然后,根据思路,写程序。因为原来对中断那部分掌握的不是很好,通过这次设计,我仔细阅读了教科书,巩固了中断的内容并对其又有了新的认识。键盘扫描原来是用线反转法的,后来换了一种更为精简的方法。中断发音是精准发音,在网上看到好多有关电子琴的设计,可

16、是音乐播放让人却步。反复查阅资料,采用了现在的节拍法,以1/8节拍为基本单位,采用高中低音区,这样就实现了电子琴自动播放音乐的精准发音了,一首流传千古的梁祝,听完让人觉得余音绕梁,意犹未尽。字库不是网上搜的,是根据梁祝的简谱自己翻译出来的。经过不过的调试,最后终于仿真成功,很高兴,但这才只是开始。第二周,到实验室进行硬件电路的焊接。在电路板上布局好之后迟迟不敢下手进行焊接,怕一不小心焊坏了。然后找了块旧板了先试验了下,有了手感后才动手焊接。焊完后检查无误,到楼上实验箱仿真,一开始真的太顺利了,响的很完美。可是,当我下楼转过一圈再回去时,电路不响了。乖乖下楼检查,经过一番努力,才知道,原来是键盘

17、那里出问题了,冤枉了一堆的电容电阻。虽然成功了,还是存在了问题。蜂鸣器发音时噪声很大,影响了音质。老师提示可以加电容滤去噪声。最后在蜂鸣器两端加上了电容,音质果真变好了。可是,新的问题随之而来:原来很大的声音变小了。虽然不影响什么,可是,还是有点缺憾。我想换个喇叭试试,结果没找到,失望。总之,通过这次课程设计,我巩固和加强了单片机的理论知识,对中断和定时器等内容有了更深的了解,了解了电子产品的研发过程,掌握了电路的调试方法及故障排除方法,提高了文献检索和资料查阅的能力。在整个设计过程中,我非常感谢我的老师,我的同伴,还有陌生的网友,他们给了我许多指导性的意见。最后,感谢学校能给我们提供这样的机

18、会,让我们把理论与实际结合,加强了动手能力。本次课程设计必将成为自己以后学习道路上的宝贵的实践经验。第9章 参考文献1、李朝青 编 单片机原理及接口技术 北京航空航天大学出版社。2、百度文库附录A:仿真电路图附录B: 程序清单sbit SPK = P37 ;指定扬声器接口sfr KEY_IO = P2 ;指定键盘接口 ORG 0000H JMP START ORG 0003H JMP X0_INT ;P3.2下降沿, 将播放 ORG 000BH JMP T0_INT ORG 001BH JMP T1_INTSTART: MOV TMOD, #11H ;T1, T0皆为定时方式1 MOV TL1

19、, #0FCH MOV TH1, #18H ;定时1ms SETB TR1 SETB ET0 ;开中断 SETB ET1 ;开中断 SETB EX0 ;开中断 SETB EA SETB PT0 ;定时器为高级 SETB PT1 ;定时器为高级WAIT1: ;等待按键按下 CALL KEY ;检查是否有键按下 JB ACC.4, WAIT1 ;没有按则等待 CLR TR0 ;关T0 MOV DPTR, #TABLE ;键盘乐音半周期表 RL A ;按键代码乘2 MOV R1, A MOVC A, A + DPTR ;从TABLE取高字节 MOV TH0, A ;存入TH0 MOV R7, A ;

20、并存入R7 MOV A, R1 INC A ;加1 MOVC A, A + DPTR ;从TABLE取低字节 MOV TL0, A ;存入TL0 MOV R6, A ;并存入R6 SETB TR0 ;启动T0, 乐音响起WAIT2: ;等待按键释放 CALL KEY ;检查是否有键按下 JNB ACC.4, WAIT2 ;按着就等待 CLR TR0 ;关闭T0, 乐音停止 JMP WAIT1 ;去等待按键按下TABLE: DW 64021, 64103, 64260, 64400 ;.3 DW 64524, 64580, 64684, 64777 ;.7 DW 64820, 64898, 64

21、968, 65030 ;4 DW 65058, 65110, 65157, 65178 ;1.KEY: ;精简的4*4键盘扫描程序, P2外接4*4键盘 MOV R1, #0 ;设按键代码为0 MOV R2, #0FEH ;先扫描D0位K1: MOV KEY_IO, R2 ;输出, D0=0 MOV A, KEY_IO ;读入 MOV R3, #4 ;检测4列(P2.7-P2.4)K2: RLC A ;最高位移入C JNC KEY_E ;C=0则是有键按下 INC R1 ;没按, 按键代码加1 DJNZ R3, K2 ;检测4行 MOV A, R2 ; RL A ;接着扫描D1、D2. MOV

22、 R2, A ;存回R2 JB ACC.4, K1 ;非0, 继续扫描KEY_E: MOV A, R1 ;按键代码015, 16就是没有按 RET;=主程序结束, 下面都是中断程序=X0_INT: ;外部中断程序, 演奏梁祝 MOV DPTR, #MUSIC_TAB M_LOOP: CLR A MOVC A, A+DPTR MOV R2, A ;第一字节1234567, 哆. INC DPTR CLR A MOVC A, A+DPTR MOV B, A ;第二字节0123, 代表音区 INC DPTR CLR A MOVC A, A+DPTR JZ X0_END ;第三字节, 0就代表结束 M

23、OV R3, A ;不为0, 就代表音符的长度 INC DPTR PUSH DPL ;保存乐曲指针 PUSH DPH MOV A, #7 MUL AB ADD A, R2 JZ JI_SHI ;0代表休止, 不用发音, 去计时 DEC A ;音符序号021 RL A MOV R2, A MOV DPTR, #B_ZQ_TAB ;换成半周期表的指针 MOVC A, A+DPTR MOV TH0, A ;设置定时时间 MOV R7, A MOV A, R2 INC A MOVC A, A+DPTR MOV TL0, A ;设置定时时间 MOV R6, A SETB TR0 ;开始发音JI_SHI:

24、 MOV R4, #120 ;以120ms,为1/8拍 MOV B, #0 MOV A, R3 ;用第三个字节控制时长 CJNE A, B, $ ;原地等待延时结束 CLR TR0 ;停止发音 SETB SPK POP DPH POP DPL ;恢复乐曲指针 SJMP M_LOOP ;去发音下一个音符X0_END: RETIB_ZQ_TAB: ;定时半周期初始值数据表 DW 63625, 63833, 64019, 64104, 64260, 64400, 64524 ;低音区:1 2 3 4 5 6 7 DW 64580, 64685, 64778, 64820, 64898, 64968,

25、 65030 ;中音区:1 2 3 4 5 6 7 DW 65058, 65110, 65157, 65178, 65218, 65252, 65283 ;高音区:1 2 3 4 5 6 7 DW 65297 ;超高音:1MUSIC_TAB: ;自定义乐曲数据表;一个音符有三个数字, 分别是音名、音区和时长(以1/8拍为单位) DB 3, 1, 8 ;咪, 中音, 8个1/8拍 DB 5, 1, 6 ;嗦, 中音, 6个1/8拍 DB 6, 1, 2 ;啦, 中音, 2个1/8拍 DB 1, 2, 6 ;哆, 高音, 6个1/8拍 DB 2, 2, 2 ;唻, 高音, 2个1/8拍 DB 6,

26、 1, 2 ;啦, 中音, 2个1/8拍 DB 1, 2, 2 ;哆, 高音, 2个1/8拍 DB 5, 1, 4 ;嗦, 中音, 4个1/8拍 DB 5, 2, 6 DB 1, 3, 2 ; 1, 超高, 2个1/8拍 DB 6, 2, 2 DB 5, 2, 2 DB 3, 2, 2 DB 5, 2, 2 DB 2, 2, 8 DB 0, 0, 8 ;休止, 8个1/8拍 DB 2, 2, 6 DB 2, 2, 2 DB 3, 2, 2 DB 7, 1, 4 DB 6, 1, 4 DB 5, 1, 6 DB 6, 1, 2 DB 1, 2, 4 DB 2, 2, 4 DB 3, 1, 4 D

27、B 1, 2, 4 DB 6, 1, 2 DB 5, 1, 2 DB 6, 1, 2 DB 1, 2, 2 DB 5, 1, 8 DB 0, 0, 8 DB 3, 2, 6 DB 5, 2, 2 DB 7, 1, 4 DB 2, 2, 4 DB 6, 1, 2 DB 1, 2, 2 DB 5, 1, 4 DB 5, 1, 8 DB 3, 1, 2 DB 5, 1, 2 DB 3, 1, 4 DB 5, 1, 2 DB 6, 1, 2 DB 7, 1, 2 DB 2, 2, 2 DB 6, 1, 8 DB 5, 1, 2 DB 6, 1, 2 DB 1, 2, 6 DB 2, 2, 2 DB 5

28、, 2, 4 DB 3, 2, 4 DB 2, 2, 4 DB 3, 2, 2 DB 2, 2, 2 DB 1, 2, 4 DB 6, 1, 2 DB 5, 1, 2 DB 3, 1, 8 DB 1, 2, 8 DB 6, 1, 2 DB 1, 2, 2 DB 6, 1, 2 DB 5, 1, 2 DB 3, 1, 2 DB 5, 1, 2 DB 6, 1, 2 DB 1, 2, 2 DB 5, 1, 8 DB 0, 0, 8 DB 0, 0, 0T0_INT: ;控制乐音的音调 MOV TL0, R6 MOV TH0, R7 CPL SPK RETIT1_INT: ;控制音符时间长度 MOV TL1, #0FCH MOV TH1, #18H ;定时1ms DJNZ R4, T1_END MOV R4, #120 ;此数值越大,节奏越慢 INC B ;B每隔120ms,加一次一T1_END: RETIEND附录C: 硬件实物图

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号