基于单片机的电子琴课程设计.doc

上传人:飞****2 文档编号:60093943 上传时间:2022-11-13 格式:DOC 页数:13 大小:317.50KB
返回 下载 相关 举报
基于单片机的电子琴课程设计.doc_第1页
第1页 / 共13页
基于单片机的电子琴课程设计.doc_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《基于单片机的电子琴课程设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的电子琴课程设计.doc(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、本科课程设计课程名称: 单片机原理与接口技术 设计项目: 简易电子琴设计 实验地点: 跨越机房 专业班级:通信0901 学号: 学生姓名: 田 野 同组人: 李刚瑛 梁邦爽 指导教师: 武 娟 萍 2012年 05月 26日一、设计目的本设计以AT89C51单片机为核心,采用常用电子器件设计。要求最少8个按键,每个按键对应一种音调,按下按键发声,松开按键后声音延迟一段时间后停止,即带余音的电子琴,延时时间可以设置,要求最少8个不同音调,可以采用标准的音调设计。本次课程设计主要研究基于AT89C51单片机的简易电子琴设计二、设计器材AT89C51,蜂鸣器,PNP型三极管,晶振,独立按键三、 总体

2、设计方案1设计思路此次设计硬件电路分四大模块较为简单,主要由独立按键、单片机AT89C51、音频功放及扬声器构成。以AT89C51为主控器件,对其进行编译,达到我们的设计要求。对于软件部分下面有详细介绍。2.电路总设计框图如图1:单片机AT89C51按键功率放大电路扬声器图1 电路总设计框图3音频放大电路在一定频率范围内,具有固定频率的振动就能产生音乐,但是单片机产生的音频脉冲直接驱动扬声器并不能产生所要实现的音乐,因为他没有足够的驱动能力,需要音频功率放大电路。这里选用PNP型三极管来驱动蜂鸣器,是音响效果更为理想,音频功放电路接口如图2所示: 图2 音频放大电路4音乐播放电路对于播放一首固

3、定音乐,不仅要知道音符也要知道节拍,对应节拍延时时间设定表,对单片机进行编程就可以实现功能。放歌产生电路如图3,其中单片机的P3.0口控制音乐开始播放控制端口,P3.2口是控制音乐停止播放的控制端口,当小按键S10按下时P3.0口获得低电平,音乐开始重复播放,当小按键S9按下时,P3.2口获得低电平,经过单片机的处理,音乐停止播放,单片机回到最初工作状态。而P2口的每个端口都连接一个按键,分别控制1,2,3,4,5,6,7,1八个不同的音符。 图3 音乐播放电图5总体电路图如下图:图4 总体电路图, 四 、设计原理分析1产生声音的方法:只要让扬声器通过产生大小变化的电流(脉动电流或交流),就能

4、使扬声器发出声音,因此若以程序不断的输出10101就可以令扬声器发出声音,由于MCS51系列的输出端口输出电流不够大,所以必须加上晶体管把电流放大后再驱动扬声器,如图2所示。图6则是产生声音的基本流程图,只要改变半周期t的时间,即可改变输出频率。开始P3.7=0延时tP3.7=1延时t图6 产生声音的基本流程图2决定程序中参数的方法:C调各音阶的参数及代码如表1所示,根据此表中的频率可计算出程序中所需的延时参数,现在以中音DO说明如下:表1 C调各音阶的参数及代码音阶DOREMIFASOLASI音符高音1高音2高音3高音4高音5高音6高音7频率/HZ522587659700780880988延

5、时参数63565047423733音长参数6573828898110124音阶代码21222324252627音符中音1中音2中音3中音4中音5中音6中音7频率/HZ262294330349392440494延时参数12611310095857567音长参数33374144495562音阶代码11121314151617音符低音1低音2低音3低音4低音5低音6低音7频率/HZ131147165175196220247延时参数254226201190170150134音长参数16182122252831音阶代码01020304050607特殊功能休止符重复演奏停止演奏简谱0音阶代码0040255

6、(1) DO的频率为262HZ,所以周期T=1/f=1/262s=3816s半周期t=T/2=1908s(2) 若以程序:MOV R6,#DATA ;1周ACALL DELAY ;2周共需耗时3个机器周期,即耗时1s3=3sDELAY:MOV B,R6 ;2周需耗时2个机器周期,即耗时1s2=2sDL:MOV R7,#6 ;1周DJNZ R7,$ ;2周DJNZ R6,DL ;2周此循环部分,每执行一次共需耗时15个机器周期,即耗时1s15=15sMOV R6,B ;2周 RET ;2周共需耗时4机器周期,即耗时1s4=4s来达成延时t的目的,则因t=1908s,且MOV R6,#DATAAC

7、ALL DELAYMOV B,R6MOV R6,B RET 这5个指令共耗时9s,所以在DELAY子程序中,循环的部分只能是:1908s-9s=1899s(3) 循环的部分每执行一次耗时15s,故要延时1899s需要执行126次,即R6=126就可产生所需DO音调。其他音调所需的R6值,算法相同。(4)实际上,做电子琴时,程序必须不断地判断是哪一个键被按下,所以程序中还有其他的指令在消耗时间。因此实际采用的R6的值应该比上述计算值少一点点,音阶才会正确。但是要把R6的值计算很准确,实在很费时间,况且判断按键的状态所耗时间与周期T比起来实在微不足道,所以在设计程序时只采用上述计算方法计算R6的值

8、即可,程序在判断是哪个键被按下所耗费的时间可忽略不计。3.音乐产生的原理:由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的延时时间产生这样的方波频率信号。除了音符以外,节拍也是音乐的关键组成部分,节拍实际上就是音持续时间的长短,在单片机系统中可以用延时时间的长短来实现,如果1/4拍的延时时间是0.4秒,则1拍的延时时间就是1.6秒,只要知道1/4拍的延时时间,其余的节拍就是它的倍数。如果单片机要自己播放音乐,那么就必须在程序中考虑到节拍的设置。为了编写计算机

9、乐谱的方便,所以我们自己定义了音阶代码,例如用01代表低音DO,用11代表中音DO,用21代表高音DO,如表1所列。另外,我们用40代表重复演奏,用255代表停止演奏。在程序中编写计算机乐谱时,就是用这些音阶代码来代替各音阶。音阶代码可岁曲子的节奏快慢有自己决定,例如1拍定位04(就是音长的4倍),半拍就是02,2拍就是08,以此类推。各音拍的音拍代码如表2所列。表2 各音拍的音拍代码音拍1/4拍1/2拍3/4拍1拍1 1/4拍1 1/2拍1 3/4拍2拍音拍代码0102030405060708音拍2 1/4拍2 1/2拍2 3/4拍3拍3 1/4拍3 1/2拍3 3/4拍4拍音拍代码0910

10、111213141516音拍4 1/4拍4 1/2拍4 3/4拍5拍5 1/4拍5 1/2拍5 3/4拍6拍音拍代码1718192021222324把乐谱改编为程序中的计算机乐谱时,必须按照“音阶代码在前,音拍代码在后”的规则排列,乐谱结束时,必须以40(表示重复演奏)或255(表示只演奏一遍就停止)作结尾。4程序流程图:开始是音符键按下吗是功能键按下吗?否设定相应的延时参数R6的值令扬声器通电延时半周期令扬声器断电延时半周期DPTR指向乐谱的开头读取音乐代码,并存入A中音节代码等于40吗音节代码等255吗把DPTR加1读取音拍代码,并存入R4中设定与A内音阶代码相对应的参数发出R4个音长的声

11、音静音把DPTR加1停止播放是否是否否是是5程序:ORG 0000HMOV P2,#B MOV P3,#BTEST:JNB P2.0,DO1 ;P2.0 = 0吗? JNB P2.1,RE1 ;P2.1 = 0吗? JNB P2.2,MI1 ;P2.2 = 0吗? JNB P2.3,FA1 ;P2.3 = 0吗? JNB P2.4,SO1 ;P2.4 = 0吗? JNB P2.5,LA1 ;P2.5 = 0吗? JNB P2.6,SI1 ;P2.6 = 0吗? JNB P2.7,DOH1 ;P2.7 = 0吗? JNB P3.0,START ;P3.0 = 0吗? AJMP TESTDO1:M

12、OV R6,#126 AJMP OUTPUT1RE1:MOV R6,#113 AJMP OUTPUT1MI1:MOV R6,#100 AJMP OUTPUT1FA1:MOV R6,#95 AJMP OUTPUT1SO1:MOV R6,#85 AJMP OUTPUT1LA1:MOV R6,#75 AJMP OUTPUT1SI1:MOV R6,#67 AJMP OUTPUT1DOH1:MOV R6,#63AJMP OUTPUT1OUTPUT1:CLR P3.7 ;令扬声器通电 ACALL DELAY ;延时半周期t SETB P3.7 ;令扬声器断电 ACALL DELAY ;延时半周期t AJM

13、P TEST ;重新测试按键START:MOV DPTR,#MUSIC ;DPTR指向乐谱的开头CONT:CLR A ;读取乐谱内的音阶代码 MOVC A,A+DPTR ;A=音阶代码 CJNE A,#40,CHK ;若音阶代码为40 AJMP START ;则从头开始演奏STOP:MOV A,#255 ;若音阶代码为255 AJMP TEST ;则停止演奏CHK:PUSH ACC ;保存A的内容 INC DPTR CLR A ;读取乐谱内的音拍代码 MOVC A,A+DPTR MOV R4,A ;R4=音拍代码POP ACC ;取回A的内容CHK1:CJNE A,#01,CHK2 ;若音阶代

14、码为01, ACALL DOL ;则产生低音DO的声音 JNB P3.2,STOP ;若P3.2=0,则停止演奏CHK2:CJNE A,#02,CHK3 ;若音阶代码为02, ACALL REL ;则产生低音RE的声音 JNB P3.2,STOP ;若P3.2=0,则停止演奏CHK3:CJNE A,#03,CHK4 ;若音阶代码为03, ACALL MIL ;则产生低音MI的声音 JNB P3.2,STOP ;若P3.2=0,则停止演奏CHK4:CJNE A,#04,CHK5 ;若音阶代码为04, ACALL FAL ;则产生低音FA的声音 JNB P3.2,STOP ;若P3.2=0,则停止

15、演奏CHK5:CJNE A,#05,CHK6 ;若音阶代码为05, ACALL SOL ;则产生低音SO的声音 JNB P3.2,STOP ;若P3.2=0,则停止演奏 CHK6:CJNE A,#06,CHK7 ;若音阶代码为06, ACALL LAL ;则产生低音LA的声音 JNB P3.2,STOP ;若P3.2=0,则停止演奏CHK7:CJNE A,#07,CHK11 ;若音阶代码为07, ACALL SIL ;则产生低音SI的声音 JNB P3.2,STOP ;若P3.2=0,则停止演奏CHK11:CJNE A,#11,CHK12 ;若音阶代码为11, ACALL DO ;则产生中音D

16、O的声音 JNB P3.2,STOP ;若P3.2=0,则停止演奏CHK12:CJNE A,#12,CHK13 ;若音阶代码为12, ACALL RE ;则产生中音RE的声音 JNB P3.2,STOP ;若P3.2=0,则停止演奏CHK13:CJNE A,#13,CHK14 ;若音阶代码为13, ACALL MI ;则产生中音MI的声音 JNB P3.2,STOP ;若P3.2=0,则停止演奏CHK14:CJNE A,#14,CHK15 ;若音阶代码为14, ACALL FA ;则产生中音FA的声音 JNB P3.2,STOP ;若P3.2=0,则停止演奏CHK15:CJNE A,#15,C

17、HK16 ;若音阶代码为15, ACALL SO ;则产生中音SO的声音 JNB P3.2,STOP ;若P3.2=0,则停止演奏CHK16:CJNE A,#16,CHK17 ;若音阶代码为16, ACALL LA ;则产生中音LA的声音 JNB P3.2,STOP ;若P3.2=0,则停止演奏CHK17:CJNE A,#17,CHK21 ;若音阶代码为17, ACALL SI ;则产生中音SI的声音 JNB P3.2,STOP ;若P3.2=0,则停止演奏CHK21:CJNE A,#21,CHK22 ;若音阶代码为21, ACALL DOH ;则产生高音DO的声音CHK22:CJNE A,#

18、22,CHK23 ;若音阶代码为22, ACALL REH ;则产生高音RE的声音CHK23:CJNE A,#23,CHK24 ;若音阶代码为23, ACALL MIH ;则产生高音MI的声音CHK24:CJNE A,#24,CHK25 ;若音阶代码为24, ACALL FAH ;则产生高音FA的声音CHK25:CJNE A,#25,CHK26 ;若音阶代码为25, ACALL SOH ;则产生高音SO的声音CHK26:CJNE A,#26,CHK27 ;若音阶代码为26, ACALL LAH ;则产生高音LA的声音CHK27:CJNE A,#27,CHK0 ;若音阶代码为27, ACALL

19、SIH ;则产生高音SI的声音CHK0:CJNE A,#00,CONT2 ;若音阶代码为00, ACALL NON ;则不发出声音CONT2:INC DPTR ;继续读取乐谱 AJMP CONTDOL:MOV R6,#254 ;R6 = 延时参数 MOV R5,#16 ;R5 = 音长参数 AJMP OUTPUT ;设定低音DO 的相对参数REL:MOV R6,#226 ;设定低音RE的相应参数 MOV R5,#18 AJMP OUTPUTMIL:MOV R6,#201 ;设定低音MI的相应参数 MOV R5,#21 AJMP OUTPUTFAL:MOV R6,#190 ;设定低音FA的相对参

20、数 MOV R5,#22 AJMP OUTPUTSOL:MOV R6,#170 ;设定低音SO的相应参数 MOV R5,#25 AJMP OUTPUTLAL:MOV R6,#150 ;设定低音LA的相应参数 MOV R5,#28 AJMP OUTPUTSIL:MOV R6,#134 ;设定低音SI的相应参数 MOV R5,#31 AJMP OUTPUTDO:MOV R6,#126 ;设定中音DO的相对参数 MOV R5,#33 AJMP OUTPUTRE:MOV R6,#113 ;设定中音RE的相对参数 MOV R5,#37 AJMP OUTPUTMI:MOV R6,#100 ;设定中音MI的

21、相对参数 MOV R5,#41 AJMP OUTPUTFA:MOV R6,#95 ;设定中音FA的相对参数 MOV R5,#44 AJMP OUTPUTSO:MOV R6,#85 ;设定中音SO的相对参数 MOV R5,#49 AJMP OUTPUTLA:MOV R6,#75 ;设定中音LA的相对参数 MOV R5,#55 AJMP OUTPUTSI:MOV R6,#67 ;设定中音SI的相对参数 MOV R5,#62 AJMP OUTPUTDOH:MOV R6,#63 ;设定高音DO的相应参数 MOV R5,#65 AJMP OUTPUTREH:MOV R6,#56 ;设定高音RE的相应参数

22、 MOV R5,#73 AJMP OUTPUTMIH:MOV R6,#50 ;设定高音MI的相应参数 MOV R5,#82 AJMP OUTPUTFAH:MOV R6,#47 ;设定高音FA的相应参数 MOV R5,#88 AJMP OUTPUTSOH:MOV R6,#42 ;设定高音SO的相应参数 MOV R5,#98 AJMP OUTPUTLAH:MOV R6,#37 ;设定高音LA的相应参数 MOV R5,#110 AJMP OUTPUTSIH:MOV R6,#33 ;设定高音SI的相应参数 MOV R5,#124 AJMP OUTPUTNON:MOV R6,#33 ;设定休止符相应参数

23、 MOV R5,#124AJMP OUTPUTOUTPUT:MOV ACC,R5 ;保存R5的内容LOOP:CJNE A,#00,SOUND ;若音阶代码为00,则不让扬声器通电 LJMP MUTESOUND:CLR P3.7 ;令扬声器通电MUTE:ACALL DELAY ;延时半周期 SETB P3.7 ;令扬声器断电 ACALL DELAY ;延时半周期 DJNZ R5,LOOP ;输出一个音长,共R5周的方波 MOV R5,ACC ;取回R5的内容 DJNZ R4,OUTPUT ;一共输出R4个音长REST:MOV R6,#170 ;静音 MOV R5,#20WAIT:ACALL DE

24、LAY DJNZ R5,WAITDELAY:MOV B,R6 ;延时半周期t=15sR6+9sDL:MOV R7,#6 DJNZ R7,$ DJNZ R6,DL MOV R6,B RETMUSIC:DB 11,04,11,04,11,04 DB 13,06,12,02,11,04 DB 13,04,13,04,13,04 DB 15,06,14,02,13,04 DB 15,04,14,04,13,04 DB 12,08,00,04 DB 12,08,11,02,07,02 DB 11,04,12,04,13,04 DB 14,08,13,02,12,02 DB 13,04,14,04,15,

25、04 DB 15,02,14,02,13,04,12,04 DB 11,08,00,04 DB 40 ;重复演奏END五、心得与体会这次设计从软件方面来讲不是很难,程序相对长一点,但都是书本上所学的知识,主要是中端及其服务程序的编写。在protues上仿真,则起到很好的效果,因为元器件都是理想状态的,但做出实物来却没有那么简单啦。经过多次调试、修改才得以出结果。经过本次课程设计,我们比较好的把理论知识与实践相结合,而我们在也本次设计中收获不少。最重要的是在实践中理解了书本上的知识,明白了学以致用的真谛,明白做好一件事单靠自己是不够的,集体团队精神也非常重要。也明白老师为什么要求我们做好这个课程的原因。他是为了教会我们如何运用所学的知识去解决实际问题,提高我们的动手能力。设计过程中,首先,对于汇编语言多了一层了解,其次,还有硬件的接线,还有8051芯片的引脚方面,都让我们收获不少。加强了自身的动手能力。六、参考文献1.单片机原理与接口技术(第二版)李晓林、牛昱光、闫高伟 主编,电子工业出版社。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁