《山燕大学简易电子琴的设计--本科毕业设计.doc》由会员分享,可在线阅读,更多相关《山燕大学简易电子琴的设计--本科毕业设计.doc(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、燕 山 大 学 课 程 设 计 说 明 书 燕山大学 课 程 设 计 说 明 书 题目: 简易电子琴 学院(系): 电气工程学院 年级专业: 精仪一班 燕山大学课程设计(论文)任务书院(系):电气工程学院 基层教学单位:仪器科学与工程系 学 号学生姓名专业(班级)精仪一班设计题目简易电子琴设计技术参数设计一简易电子琴,按下不同按键,能够发出不同的声音。通过每个按键的控制使单片机系统输出不同频率的脉冲,经过扬声器发出不同频率音调。演奏一首歌曲。设计要求设计电子琴的键盘电路(包括硬件电路);编制相应的程序。工作量设计的内容满足课程设计的教学目的与要求,设计题目的难度和工作量适合学生的知识和能力状况
2、,工作量饱满。工作计划查阅资料进行设计准备、设计硬件电路、编制程序,编制程序、验证设计、撰写任务书。参考资料单片微型计算机接口技术及其应用 张淑清 国防工业出版社单片机应用技术汇编指导教师签字基层教学单位主任签字说明:此表一式四份,学生、指导教师、基层教学单位、系部各一份。 2013.7.6目录摘要 31电子琴的发声原理51.1发声原理 51.2 单片机实现简易电子琴原理及代码值的计算52程序的设计思想及执行流程82.1 主程序的流程 82.2 单发音子程序的执行流程112.3 播放歌曲子程序的执行流程 113硬件系统连接 133.1 89c51芯片简介 133.2 蜂鸣器的电路连接及实现 1
3、43.3 4X4矩阵键盘 154总结17参考文献24摘要:单片机是大规模集成电路技术发展的产物,具有高性能、高速度、体积小、价格低廉、稳定可靠等特点。单片机的应用相当广泛,从平常的家用电器到航天系统和国防军事、尖端武器都能找到它的身影。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分。本论文设计一个基于单片机的简易电子琴。我们对于电子琴如何实现其功能,如音色选择、声音强弱控制、节拍器、自动放音功能等等也很好奇。电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵
4、活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89S51单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。关键词:单片机 电子琴 节拍器 自动放音1、电子琴的发声原理11电子琴发声原理电子琴既可以演奏不同的曲调,又可以发出强弱不同的声音,还可以模仿二胡、笛子、钢琴、黑管以及锣鼓等不同乐器的声音。那么,电子琴的发音原理是怎样的?大家知道,当物体振动时,能够发出声音
5、。振动的频率不同,声音的音调就不同。在电子琴里,虽然没有振动的弦、簧、管等物体,却有许多特殊的电装置,每个电装置一工作,就会使喇叭发出一定频率的声音。当按动某个琴键时,就会使与它对应的电装置工作,从而使喇叭发出某种音调的声音。电子琴的音量控制器,实质上是一个可调电阻器。当转动音量控制器旋扭时,可调电阻器的电阻就随着变化。电阻大小的变化,又会引起喇叭声音强弱的变化。所以转动音量控制旋扭时,电子琴发声的响度就随之变化。当乐器发声时,除了发出某一频率的声音基音以外,还会发出响度较小、频率加倍的辅助音谐音。我们听到的乐器的声音是它发出的基音和谐音混合而成的。不同的乐器发出同一基音时,不仅谐音的数目不同
6、,而且各谐音的响度也不同。因而使不同的乐器具有不同的音品。在电子琴里,除了有与基音对应的电装置外,还有与许多谐音对应的电装置,适当地选择不同的谐音电装置,就可以模仿出不同乐器的声音来。1.2 单片机实现简易电子琴原理及代码计算本课程设计的题目为简易电子琴的设计,通过编程控制蜂鸣器脉冲的频率和有效信号的长度,可实现如下的功能:一:4*4矩阵键盘的1E按键分别对应着个不同的音符,分为高低不同的14个音符,当按下某一按键,会发出相应的音调。按下按键时,扬声器会发出一定时长的声音。扬声器发声的时长是无法改变的,由程序设定。如果连续按动一个乐谱的音符所对应的按键,可以实现乐曲的演奏。二:程序中预存了音乐
7、我的中国心乐谱对应的编码,通过矩阵键盘中的“0”键触发,当在单片机处于该音乐播放模式时,可以通过按键“F”和“E”对该音乐的播放进行暂停、播放和停止操作等控制。代码值的计算不同的音符对应着不同的频率,我们可以利用不同的频率的组合,来实现不同的音符的组合,即可构成我们所想要的音乐了。假如发生装置为脉冲型的蜂鸣器,将其连接在P1.0上。按每个音符对应的频率和拍长对P1.0施以有效的脉冲信号,即可实现对应的音乐。而对于单片机来说产生不同的频率和一定长度的脉冲信号是非常方便,我们可以利用单片机的定时/计数器来产生这样方波频率信号,调用一个可编程的延时函数即可控制声音的长度。因此,只需将一首歌的音阶和频
8、率即拍长相对应即可。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用AT89S52的内部定时器使其工作计数器模式工作方式1下,改变计数初值以产生不同频率的方法产生不同音阶,下面将具体介绍音符频率的计算方法。计数脉冲值与频率的关系式(如式2-1所示)是: N12 2 (式1-1) 式中,N是产生需要脉冲所需的计数值,是单片机的晶振频率(本实验箱的晶体振荡器为5MHz),是想要产生的频率;相应的计数初值T的求法如下: T65536N (式
9、1-2) 以音符DO为例,详述得到对应的频率所需的计数初值:本次课程设计所使用的实验箱上的单片机晶振为6Hz,对应的每次计数时间间隔为2us,低音DO对应的频率为262Hz,其周期T1/2623817s。低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。T65536N65536/12/ /2655366000000/12/65536250000/ 低音DO的T65536250000/26264582 中音DO的T65536250000/52365058 高音DO的T65536250000/104665297我们要为这个音符建立一个表格,单片机通过查表的方式来获得
10、相应的数据,单片机6MHZ晶振,高中低音符与计数T0相关的计数值如表1所示:音符频率(HZ)代码值(T)音符频率(HZ)代码值(T)低1DO26264582中 5 SO78465217低2RE29464686中 6 LA88065252低 3 M33064779中 7 SI98865283低 4 FA34964820高 1 DO104665297低 5 SO39264898高 2 RE117565323低 6 LA44064968高 3 M131865346低 7 SI49465030高 4 FA139765357中 1 DO52365058高 5 SO156865377中 2 RE58765
11、110高 6 LA176065394中 3 M65965157高 7 SI196765409中 4 FA69865178表1-1 音符频率表音乐的音拍为基本的发声时长,一个节拍为单位(C调)相应的时长如表1-2所示: 曲调值DELAY曲调值DELAY调4/4125ms调4/462ms调3/4187ms调3/494ms调2/4250ms调2/4125ms表2-1 曲调值表Error! No bookmark name given. 对于不同的曲调,本课程设计采用的是调用延时子程序的,控制定时器的启动与关闭,进而时长的方法来实现的。2程序的设计思想及执行流程2.1主程序的流程主程序的执行流程如图2
12、-1所示,其中包含的功能及其子程序有:一、键盘扫描:检测是否有键按下,有键按下则记录按下键的键值,并跳转至功能转移程序;无键按下,则返回键盘扫描程序继续检测;二、多功能的实现:对检测到得按键值进行判断,是单独发音按键则跳转至单发音子程序,是歌曲播放键“0”键则跳转连续发音子程序,即开始弹奏我的中国心;单发音子程序:根据检测到得按键值,查询音律表,给计时器T0赋值,同时调用固定时长的延时子程序,发出相应频率的及时长的声音,之后自动返回至键盘扫描程序,继续等待是否有键按下;播放歌曲程序:检测到按键按下的是歌曲播放键“0”键时执行该程序,单片机自动播放事先已经存放好的歌曲,同时每隔一定时间扫描一次键
13、盘,检测是否有暂停键“F”或停止键“E”按下,有则处理相应的子功能。歌曲播放完毕之后自动返回至键盘扫描程序,继续等待是否有键按下。开始初始化:设置定时器工作方式,使能中断键盘扫描程序否有键按下否是延时去抖动识别按键功能是否是歌曲播放键“0”否根据按键值,调用单发音子程序,播放键入音符是调用连续放心子程序,播放歌曲返回键盘扫描程序图2-1 主程序流程图2.2 单发音子程序的执行流程根据检测到得按键值,查询音律表,给计时器T0赋值,同时调用固定时长的延时子程序,发出相应频率的及时长的声音,之后自动返回至键盘扫描程序,继续等待是否有键按下,执行流程如图3-2所示单发音子程序根据键值查音律表将代码值转
14、入定时器T0 使能TR0,开始发声调用固定时长延时子程序返回键盘扫描程序图2-2 单发音子程序流程图图2.3 播放歌曲子程序的执行流程检测到按键按下的是歌曲播放键“0”键时执行该程序,单片机自动播放事先已经存放好的歌曲,同时每隔一定时间扫描一次键盘,检测是否有暂停键“F”或停止键“E”按下,有则处理相应的子功能。歌曲播放完毕之后自动返回至键盘扫描程序,继续等待是否有键按下。执行流程如图3-3所示:播放歌曲子程序 取歌谱地址取对应音符的代码值和拍数 是是否为停止码0 返回键盘扫描否赋值定时器T1;赋值延时子程序参数 延时 扫描键盘 否歌曲计数器加一,准备取下一歌曲音符代码是否有键按下是扫描键盘是
15、是否暂停键“F”否否是否停止键“E”是返回键盘扫描图3-3 自动播放歌曲程序流程图3硬件系统连接3.1 89C51芯片简介功能描述(1) AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁
16、存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。(2)振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。(3)芯片擦除:整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片
17、擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。 主要特性与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源 可编程串行通道低功耗的闲
18、置和掉电模式片内振荡器和时钟电路 3.2 蜂鸣器的电路连接及实现利用三极管作为门控信号,将三极管的基极连接在P1.0上,当给P1.0以一定频率的脉冲信号时,三极管的射级也会输出同等频率的脉冲信号。蜂鸣器为脉冲驱动型,其发声频率由P1.0的输出频率决定,发声长度由P1.0输出的脉冲信号的有效时长确定其电路连接图2-2如图所示图2-2扬声器接口电路3.3 4X4矩阵键盘本次课程设计采用的WAVE2000试验箱,课程设计的功能均由键盘控制实现,键盘系统的硬件连接图如图2-3.1所示,简化的键盘部分如图2-3.2所示44矩阵键盘的列扫描信号和行扫描信号分别由74HC374和74HC245控制送出和读入
19、,其片选信号端Key_LED_CS连接在一起,可以与试验箱上的CS0CS7相连接,其地址分别为0X002H和0X001H。采用AT89C51的并行口P0口作为数据信号线,输出列扫描信号,读入行扫描信号。每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键
20、编码而识别按键,通过软件查表,查出该键的功能,在本程序中,当程序检测到有键按下时,将查表使按键值与预存数据表中数据对应,并调用发声程序。图2-3.1 键盘系统的硬件连接图图2-3.2 简化的矩阵键盘连接图第 26 页 共26 页4 总结本次课程设计通过制作简易电子琴,实现了对试验箱上的蜂鸣器模块、4X4矩阵键盘模块以及51单片机的定时器等各种内部功能很好的融合,掌握了利用单片机设计简易电子琴的基本思想和方法。利用单片机产生不同频率来获得我们要求的音阶,利用不同的频率的组合,即可构成我们所想要的音乐了,我们只要把一首歌曲的音阶对应频率关系弄清楚,利用单片机的定时/计数器T0/T1来产生这样的脉冲
21、频率信号,利用延时函数控制发声长度,然后我们利用蜂鸣器电路将音乐声音发出。单片机是一门应用性很强的学科,课程设计是培养我们综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察。在设计过程中,我还查阅了网上一些关于8051的介绍,向老师同学请教程序的汇编,将很大一部分时间花在研究程序怎么处理和运行。对程序的研究,加深了我对所学单片机汇编语言命令的理解,使我学会了应用所学的汇编语言来完成一定的任务要求,而且也更加了解到软硬件配套、接口连接的重要性。反复修改,不断的改进是程序设计的必要步骤,这个过程让我们不断的审视已有程序,在能实现要求的情况
22、下,尽可能做到简洁易懂。一周的课设,让我收获了很多,加深了我对单片机汇编语言和硬件连接的理解。在这个过程中,我得到了老师和同学的很大帮助,在此感谢老师的耐心指导和给与的帮助。参考文献单片微型计算机接口技术及其应用 张淑清 国防工业出版社单片机原理及应用技术 张淑清 国防工业出版社汇编语言 王爽 清华大学出版社 附 源程序代码OUT_ADDS EQU 08002HIN_ADDS EQU 08001HPai_NUM EQU 30HSing_NUM EQU 31HTone_High EQU 32HTone_Low EQU 33HToneBuf EQU 34HKeyBuf EQU 35H ORG 00
23、00H LJMP START ORG 000BH LJMP INT_T0 ORG 001BH LJMP INT_T1 START: MOV SP, #70H MOV TMOD, #11H; MOV IE, #8AH ; MOV ToneBuf,#0MLOOP: CALL TestKey JZ MLOOP CALL Delay CALL TestKey JZ MLOOP CALL Get_Char MOV b, A CJNE A,#0,utterMOV Sing_NUM,#00next: MOV A, Sing_NUM MOV DPTR,# Sing_Tab MOVC A,A+DPTR MOV
24、R2,A JZ end_sing ANL A,#0FH MOV R5,A MOV A,R2 SWAP A ANL A,#0FH JNZ sing CLR TR1 JMP DM1sing: DEC A MOV 22H,A RL A MOV DPTR,#Sing_Tab0 MOVC A,A+DPTR MOV TH1,A MOV 21H,A MOV A,22H RL A INC A MOVC A,A+DPTR MOV TL1,A MOV 20H,A SETB TR1DM1: CALL Delay1 INC Sing_NUM CALL TestKey JZ next CALL Delay CALL T
25、estKey JZ next CALL Get_Char CJNE A,#0FH,next1next0: CLR TR1 CALL TestKey JZ next0 CALL Delay CALL TestKey JZ next0 CALL Get_Char CJNE A,#0FH,next AJMP next0 ; SETB TR1 ; JMP nextnext1: CJNE A,#0EH,next CLR TR1 LJMP MLOOP ;JMP nextend_sing: CLR TR1 LJMP MLOOP utter: DEC B MOV A, B RL A MOV B, A MOV
26、DPTR, #Tone_Table MOVC A, A+DPTR MOV Tone_High, A MOV TH0, A MOV A, B INC A MOVC A, A+DPTR MOV Tone_Low, A MOV TL0, A SETB TR0 MOV Pai_NUM, #100next2: MOV A,Pai_NUM JNZ next2 CLR TR0 LJMP MLOOPTone_Table: DW 64578, 64686, 64778, 64821, 64898, 64968, 65029 DW 65058,65110,65157,65178, 65217, 65252, 65
27、283,65029Sing_Tab0: DW 65058,65110,65157,65178,65217,65252,65283DW 65296,65323,65346,64898,64968,65030Sing_Tab: DB 0C4H,0C2H,32H,22H,32H,12H,0D2HDB 0CCH,04HDB 32H,64H,52H,32H,22H,12H,22HDB 3CH,32H,52H,;DB 34H,34H,34H,32H,52H,DB 66H,72H,62H,52H,32H,22HDB 12H,14H,22H,38HDB 26H,32H,0D2H,0C2H,0B4H DB 0C
28、CH, 02H,32HDB 54H,52H,32H,34H,02H,32HDB 84H,82H,62H,64H,62H,82HDB 64H,54H,12H,24HDB 3CH,02H,32H,DB 86H,62H,066H,062H;DB 86H,92H,0A4H,0A4H DB 86H,92H,0A6H,0A2H,92H, 76H,52HDB 6CH,04H,DB 0C6H,32H,22H,32H,12H,0D2HDB 0CCH,04HDB 32H,64H,52H,32H,22H,12H,22HDB 34H,34H,34H,32H,52HDB 64H,62H,72H,62H,52H,32H,
29、22HDB 12H,14H,22H,34H,34HDB 24H,22H,32H,72H,62H,54HDB 6CH,00HTestKey: MOV DPTR, #OUT_ADDS MOV A, #0 MOVX DPTR, A MOV DPTR, #IN MOVX A, DPTR CPL A ANL A, #0FH RETGet_Char: MOV R1, #20H MOV R2, #6L1: MOV DPTR, #OUT_ADDS MOV A, R1 CPL A MOVX DPTR, A CPL A RR A MOV R1, A MOV DPTR,#IN_ADDS MOVX A,DPTR CP
30、L A ANL A, #0FH JNZ L2 DJNZ R2, L1 MOV R2, #0FFH SJMP L4L2: MOV R1, A MOV A, R2 DEC A RL A RL A MOV R2, A MOV A, R1 MOV R1, #4L3: RRC A JC L4 INC R2 DJNZ R1, L3L4: MOV DPTR, #OUT_ADDS CLR A MOVX DPTR, A MOV A, R2 MOV DPTR, #Key_Table MOVC A, A+DPTR RETKey_Table: DB 16H, 15H, 14H, 0FFH DB 13H, 12H, 1
31、1H, 10H DB 0DH, 0CH, 0BH, 0AH DB 0EH, 03H, 06H, 09H DB 0FH, 02H, 05H, 08H DB 00H, 01H, 04H, 07HINT_T0: PUSH PSW CLR TR0 MOV TH0, Tone_High MOV TL0, Tone_Low SETB TR0 CPL P1.0 DEC Pai_NUM POP PSW RETIINT_T1: PUSH ACC PUSH PSW MOV tl1,20H MOV tH1,21H CPL p1.0 POP PSW POP ACC RETIDelay: MOV R7,#02DL1: MOV R6,#0FFHDL2: DJNZ R6,DL2 DJNZ R7,DL1 RET Delay1: MOV R4,#150DL3: MOV R3,#248 DJNZ R3,$ DJNZ R4,DL3 DJNZ R5,Delay1 RET END