《电子琴的课程设计.doc》由会员分享,可在线阅读,更多相关《电子琴的课程设计.doc(24页珍藏版)》请在三一办公上搜索。
1、目 录第1章系统总体方案说明1第2章系统硬件电路设计框图和工作原理42.1 89C51单片机42.2 35矩阵式键盘52.3 I/O并行口直接驱动LED显示62.4 发音电路7第3章 软件设计及调试83.1主程序设计流程框图83.2按键处理子程序93.3音乐播放程序流程框图93.4翻译按键码程序103.5延迟子程序113.6软件调试11第4章 总结和体会12第5章 参考文献13附录14 附录A 系统硬件电路原理图14附录B源程序清单15第1章 系统总体方案说明本文的主要内容是用AT89C51单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、蜂鸣器等模块组成核心主控制模块,在主
2、控模块上设有15个按键和蜂鸣器。本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。但是由于按键数目有限,本设计只有15个按键,并且还可以通过按转换键(本文为MUSIC来切换歌曲与音符的转换。还有,本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。本课题要求以单片机为核心设计一个简易电子琴,具有自动播放乐曲和弹奏乐曲的功能。一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,音阶对应频率关系图1-1:
3、C调各音符频率与计数值T的关系音符频率(Hz)半周期(ms) 简谱码T值定时值(H)简谱码T值定时值(D)低1 Do2621.90F894H62628低2 Re2941.70F95CH63835低3 Mi3301.51FA1AH64021低4 Fa3491.43FA6AH64103低5 So3921.28FB00H64260低6 La4401.14FB8CH64400低7 Si4941.01FC0EH64524中1 Do5230.95FC4AH64580中2 Re5870.85FCAEH64684中3 Mi6590.76FD08H64777中4 Fa6980.72FD30H64820中5 So
4、7840.64FD80H64896中6 La8800.57FDC6H64966中7 Si9880.51FE02H65030高1 Do10460.47FE2AH65058高2 Re11750.42FE5CH65110高3 Mi13180.38FE84H65157高4 Fa13970.36FE98H65178高5 So15680.32FEC0H65217高6 La17600.28FEE8H65252高7 Si19670.25FF06H65283图1-1本设计用89C51单片机为核心,利用8段数码管显示器.采用动态显示输出,用户信息输入则采用35矩阵式键盘,声音输出用蜂鸣器来实现。采用8段数码管显示
5、器进行动态显示需要占用4根I/O线,35矩阵式键盘占用7根I/O线,蜂鸣器占用1根I/O线,89C51单片机有足够的线,不用扩展I/O口。用一片单片机即可满足本设计的输入输出。系统框图如图1-2所示:时钟电路复位电路 单片机(AT89C51)控制系统8段数码管显示器35矩阵式键盘蜂鸣器发声电路 图1-2通过对电子琴主体部分的电路进行模仿设计,达到电子琴固有的基本功能,设定按钮K1、 K2和K3。按钮K1打开并自动播放乐曲1;按钮K2打开并自动播放乐曲2;按钮K3为手动控制音乐停止的按键。用12个按键开关来分别控制产生低音“1、2.7”、中音“1、2、.7”和高音“1、2、.7”中的部分乐音。根
6、据设计要求该电子琴能实现音键的控制,根据各个音调的频率的差异,来实现按下不同的音键而发出不同的声音。除此之外还实现了存储并读出两首音乐的附加功能。通过中断INT-1来实现功能的选择,当未按下中断按钮时,执行分支1,即按键产生低、中、高的1、27音,由12个按键产生12种不同的音;当按下中断按钮式,执行分支2,即可以播放音乐,共有两首音乐,由两个键来分别控制它们,此外,还设计了一个键来停止音乐的播放。系统主要由电子琴发声模块、按键选择控制模块和存储器模块构成。电子琴发声模块负责发出音键相应的音符;选择控制模块负责由外部控制电子琴的各项功能的实现;显示模块负责按键时产生相应的值,由数码管来实现。在
7、只实现基本功能时(由功能控制键控制),外部输入的音键,由电子琴发声模块发出相应的音符。本文的主要内容是用AT89C51单片机为核心控制元件,系统程序主要包括主程序,定时器中断程序,键盘扫描程序,显示键值子程序,音乐播放程序,延迟子程序等。第2章 系统硬件电路设计框图与工作原理2.1 89C51单片机本设计使用的是ATMEL公司生产的AT89C51高性能8位单片机,片内含8Kbytes的可反复擦写的只读程序存储器和256bytes的随机存取数据存储器,器件采用ATMEL公司的高密度,非易失性存储技术生产,与标准MCS51指令系统及8051产品引脚兼容,片内置8位中央处理器(CPU)和Flash存
8、储单元,功能强大的AT89C52单片机适合于许多较为复杂控制应用场合。如图2-1和2-2所示:端口引脚复用功能 P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INT0(外部中断0)P3.3INT1(外部中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通)图2-1和2-22.2 35矩阵式键盘我们所用的开发板一共有12个按键,可采用35矩阵式键盘(即3行4列键盘),由P2.0P2.2控制行线,P2.4P2.7来控制列线,P2.3置1,每个按键有它的行值和列值,行值和列值的组合就是识别这个
9、按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能,如图2-3所示:图2-32.3 I/O并行口直接驱动LED显示由于要显示每个按键的键值,就需要用到数码管LED显示模块。本设计一共用了一个数码管显示器。利用AT8
10、9S51单片机的P0端口的P2.0P2.4连接到一个共阴数码管的笔段上,数码管的公共端接地。在数码管上循环显示09数字,如图2-4所示:图2-42.4 发音电路发音电路有三极管,电阻和扬声器组成,三极管的基极接在单片机的P1.0端口,通过定时器溢出的时间不同,P1.0端口输出不同频率的高低电平,P1.0输出的脉冲频率不同,三极管导通的频率也不相同,从而扬声器根据不同频率的脉冲发出的声音也不相同,发音电路如下图2-4所示: 图2-5第3章 软件设计及调试程序初始化开始开始键盘扫描延时10ms是否有键按下?键值编码送到P3.4扬声器发音RETNY主程序设计的第一步为初始化,初始化I/O口,设置定时
11、器定时时间,写定时器工作方式寄存器,设置允许T0中断。刚开始需要将存储单元置1,全部置1之后更新显示缓冲区。接着进行显示初始化,开定时器T0,这样就可以开始显示了。设置完以后程序就不断检测按键情况。检测使用软件去抖,也就是第一次检测到有键按下后,延时10ms后再次检测,如果有键按下则执行相应指令。本设计还设计了防误操作程序,也就是对于一个键,按一下和一直按着的效果是一样的,这样可以防止用户还没放开此键时,程序已进行第二次或多次同样的操作。3.1 主程序设计流程框图见附录系统硬件原理图可知矩阵键盘的行线由P3.4、P3.6、P3.7连接,列线由P1.3-P1.7连接。检测有无按键按下采取的方法为
12、先将行线清零由列线读取数据。如果读入数据不全为1,则表明有键按下;然后将行线清零,由列线读取数据,如果读入数据不全为1,则表明有键按下。按下的键不同经过高位和低位值组合后返回的值也不同,每个 图3-1按键都具有唯一对应的按键码,这样就可以很方便的分析出按下的是几号键。子程序流程图如图3-1所示。3.2 按键处理子程序知道用户按下键的序号之后,就需要根据按键功能执行相应的程序。此子程序用分支的方法依次判断键号,和预置键号相同的则转入相应子程序,不同则继续执行下面判断。如本程序即MUSIC开关键来控制乐音与音乐相互之间的转换。3.3 音乐播放程序流程框图知道用户按下键的序号之后,就需要根据按键功能
13、执行相应的程序。此子程序用分支的方法依次判断键号,和预置键号相同的则转入相应子程序,不同则继续执行下面判断。如本程序设置的是0号键来关断音乐的播放,高电平1键用来自动播放音乐功能,通过MUSIC来进行切换,如图3-2主程序,图3-3 T0中断子程序所示: YNYNA=FFH?结束开始R2=0?T0返回P1口LED闪烁初始化设置定时初值存入乐曲代码表取首符(定时常数)读取节拍(延时常数)延时常数存R2调用延时子程序重装定时值P3.7输出图3-2主程序 图3-3 T0中断子程按键号012345678按键码28HEBH32HA2HE1HA4H24HEAH20H按键号9101112无按键按键码A0H6
14、0H25H3CHFFH3.4翻译按键码程序得到的按键码不能直接使用,还需要经过翻译才能使用,采用的方法为查询法,从按键码表格中依次取出按键码和P2口采集的按键码进行比较,不同,则继续查找,相同,则记录在按键码表格中的偏移量翻译按键码子如表图3-1所示。3.5 延迟子程序本程序是采用动态显示,用定时器T0中断来显示,用这种方法的好处在于每次刷新显示的时间相同,每个数码管显示的时间也相同,这样就可以让数码管清晰而且稳定的显示数据。用中断的方法显示就必须对用到的寄存器和PSW进行入栈保护,这样才不会影响其他程序的正常运行。晶振频率为11.0592MHz每次中断对一个数码管进行显示,每次定时3ms,数
15、码管刷新一次需要24ms。3、6软件调试在将程序下到板子上调试的过程花了大概两天的时间。出现的问题都很细微,而且试行了很多种办法。此实验主要是采用Keil软件生成.HEX文件,在 Proteus画好原理图之后,调用.HEX文件在单片机AT89C51上进行软件调试,我们通过35矩阵式键盘进行音乐的弹奏,显示器就显示我们想要弹得数字,而二极管轮流闪灯,营造一种音乐交替的效果。但当切换MUSIC口时,也就是把它变为高电平时,这时按照软件程序的要求是会自动播放列表中的音乐,程序的大概流程就是这样,但在这次课程设计调试过程中,我遇到了很多的问题,刚开始程序用Keil软件运行之后,就很多错误,我自己通过摸
16、索发现,程序旁边不能有文字解释,会显示多余字符。还有,一些警戒性的语句,需要我们询问老师才得以解决的。虽然程序没有多大的问题,也就是说,生成了.HEX文件,但调试的时候显示器显示的数字有点不对,后者经常是会出现一些乱码,切换也不自动播放音乐,我经过再三的分析程序,然后才得以解决。第4章 总结和体会在看完任务书后,我首先想到的是上网查找一些相关的资料,搜寻了一会儿后,结果觉得不是很满意。因为网上的一些课程设计跟我们的设计要求不一样,所使用的芯片也不一样,所以只能拿来起个参考作用。图书馆这个资源不能浪费,我也从图书馆那借阅了几本跟单片机有关的书籍,我还不至于能达到白手起家的那种高度。本次设计要我们
17、熟悉电子琴产生音乐的原理,设计一个用单片机程序产生音乐和自动播放音乐的功能。我以前单片机学得不是很扎实,这次要我自己设计系统方框图以及各单元电路图,然后利用Keil软件和Proteus进行仿真和对系统进行调试。课程设计的这些要求是对我的一个极大的考验,不过我已下定决心把它们一个一个的克服。因为世上无难事,只怕有心人。时间过得真快,转眼间2个星期已经过去了。现在回想起来,调试的日子历历在目,其中有苦也有甜,各中滋味也只有自己最清楚。但是它锻炼了我不怕困难,坚持到底的精神。这次设计我们学到了很多东西,虽然作出来的东西很基础,但是加深了我们的动手能力和对书本知识的理解和掌握。做为一名大四的学生,我觉
18、得能多做类似的课程设计是十分有意义的。特别是在仿真设计的过程中出现的一些故障的检测和排除的一些方法,使我积累了经验技巧,提高了试验能力和水平。过去在自己的心里,老是有种畏难的心理在作祟,怀疑自己的水平和能力,认为自己不能把这么难的东西做出来,甚至连尝试的胆量都没有。通过这次的实习,我明白了只要抛弃心中的恐惧,不断培养自己,就能做出自己都不敢相信的成绩来。第5章 参考文献1、51系列单片机应用与实践教程 周向红 编 北航出版社2、单片机应用系统设计 何立民 编 北航出版社3、单片机原理及应用 王迎旭 主编 机械工业出版社4、51系列单片机设计实例 楼然苗 等编 北航出版社5、51单片机应用系统开
19、发典型实例戴家 编中国电力出版社6、单片微型计算机原理及接口技术陈光东编 华中科技出版社7、单片机实用系统设计技术 房小翠 编 国防工业出版社附录附录A 系统硬件电路原理图 电路原理图附录B源程序清单ORG 0000HJMP STARTORG 000BH ;定时器T0的入口地址CPL P1.0 ;P1.0取反MOV TH0,R2MOV TL0,R3RETIorg 001bh ;定时器T1的入口地址INC 20h ;寄存器内容加1MOV TH1,#3CH ;送计数初值MOV TL1,#0B0HRETIORG 0030H ;外部中断0入口地址START:MOV P2,#00H ;P2送初值0MOV
20、 SP,#05FHMOV TMOD,#11H ;采用工作方式三SETB ET0 ;定时器T0开放SETB EA ;允许CPU中断定时器SETB ET1 ;开放定时器T1MOV 20h,#00H;- 键盘模块-TEST:CLR P1.7JNB P3.5,BMUSIC ;P3.5口为0就转BMUSICsetb p1.7 ;p1.7置1CLR P1.6jNB P3.5,B1 ;P3.5口为0就跳转B1jNB P3.7,B5SETB P1.6CLR P1.5JNB P3.6,BSTUDYJNB P3.5,B2JNB P3.7,B6SETB P1.5 ;P1.5置1CLR P1.4JNB P3.5,B3
21、JNB P3.7,B7SETB P1.4CLR P1.3JNB P3.5,B4SETB P1.3JMP TEST ;跳转至TEST;-BMUSIC:MOV DPTR,#M1JMP MUSICB1: MOV DPTR,#Y1JMP MUSICB5: MOV DPTR,#Y5JMP MUSIB2:MOV DPTR,#Y2JMP MUSICB6:MOV DPTR,#Y6JMP MUSICB3:MOV DPTR,#Y3JMP MUSICB7:MOV DPTR,#Y7JMP MUSICB4:MOV DPTR,#Y4JMP MUSICBSTUDY:;-音乐模块-MUSIC:MOV 20h,#00HCLR
22、AMOVC A,A+DPTRMOV R0,AINC DPTRCLR AMOVC A,A+DPTRMOV R1,ACJNE A,#00H,GOJMP JIE_SHUGO:CJNE A,#0FFH,GGO ;判断A和#0FFH是否相等JMP ZAN_TINGGGO:CJNE A,#0EEH,YYJMP TAN_ZOUYY: LCALL QYF ;长调用指令MOV A,R1SETB TR0SETB TR1mov A,R1AM:MOV P2,R0CJNE A,20h,AMCLR TR0CLR TR1INC DPTRLJMP MUSICJIE_SHU:CLR P1.0JMP TESTZAN_TING:S
23、ETB TR1MOV A,R1MOV A,05HCLR P1.0AN:CJNE A,20h,AN ;判断A和20h是否相等CLR TR1MOV 20h,#00HINC DPTR ;DPTR加1JMP MUSICTAN_ZOU:LCALL QYFSETB TR0SETB TR1AAA:MOV P2,R0MOV A,#0AHCJNE A,20h,AAAMOV 20h,#00HJNB P3.5,AAAJNB P3.7,AAACLR TR0CLR TR1JMP TEST;-附加子程序-QYF:PUSH dphPUSH dplMOV A,R0DEC Amov b,#02hMUL ABMOV DPTR,#
24、YFCMOVC A,A+DPTRMOV R2,AMOV TH0,AINC DPTRMOV A,R0DEC AMOV B,#02HMUL ABMOVC A,A+DPTRMOV R3,AMOV TH0,APOP dplPOP dphRETYFC:DB 0FCH,44H, 0FCH,0ACH, 0FDH,09H, 0FDH,33H, 0FDH,082H, 0FDH,0C7H, 0FEH,05H, 0FEH,022H, 0FEH,56HY1:DB 01H,0EEHY2:DB 02H,0EEHY3:DB 03H,0EEHY4:DB 04H,0EEHY5:DB 05H,0EEHY6:DB 06H,0EEH
25、Y7: DB 07H,0EEH;歌曲M1:DB 05H,0AH, 03H,05H, 05H,05H, 08H,14H, 06H,0AH, 08H,05H, 06H,05H, 05H,14HDB 05H,0AH, 01H,05H, 02H,05H, 03H,0AH, 02H,05H, 01H,05H, 02H,14H, 00H,00H m2:db 08h,0ah,05h,05h,06h,05h,03h,05h,02h,05h,03h,05h,01h,05h,01h,05hdb 08h,05h,0ah,05h,0ah,05h,09h,05h,08h,05h,09h,05h,06h,05h,05h,05h ;sdnuEND;程序说明:TE0控制弹奏的音符频率TE1控制节拍长短;一个表中去音符和节拍 根据音符再去另一个表中取定时器初始值;R0 音符;R1节拍 ;50ms 的整数R1倍;05 0A0 0F0H 14H 1.5S 1EH 2S 28H;R2 TH0;R3 TL0;m: fuma ; jiepai;YFC 取音乐中的节拍和音符;QYF 根据音符取表yfc中的中断初始值;YY YIN YUE