基于单片机的电子琴课程设计报告_第1页
基于单片机的电子琴课程设计报告_第2页
基于单片机的电子琴课程设计报告_第3页
基于单片机的电子琴课程设计报告_第4页
基于单片机的电子琴课程设计报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

---..-总结资料本科课程设计课程名称:单片机原理与接口技术设计项目:简易电子琴设计实验地点:跨越机房专业班级:通信0901学号:2009001330学生XX:田野同组人:李刚瑛梁邦爽指导教师:武娟萍2012年05月26日一、设计目的本设计以AT89C51单片机为核心,采用常用电子器件设计。要求最少8个按键,每个按键对应一种音调,按下按键发声,松开按键后声音延迟一段时间后停止,即带余音的电子琴,延时时间可以设置,要求最少8个不同音调,可以采用标准的音调设计。本次课程设计主要研究基于AT89C51单片机的简易电子琴设计二、设计器材AT89C51,蜂鸣器,PNP型三极管,晶振,独立按键三、总体设计方案1.设计思路此次设计硬件电路分四大模块较为简单,主要由独立按键、单片机AT89C51、音频功放及扬声器构成。以AT89C51为主控器件,对其进行编译,达到我们的设计要求。对于软件部分下面有详细介绍。2.电路总设计框图如图1:单片机单片机AT89C51按键功率放大电路扬声器图1电路总设计框图3.音频放大电路在一定频率X围内,具有固定频率的振动就能产生音乐,但是单片机产生的音频脉冲直接驱动扬声器并不能产生所要实现的音乐,因为他没有足够的驱动能力,需要音频功率放大电路。这里选用PNP型三极管来驱动蜂鸣器,是音响效果更为理想,音频功放电路接口如图2所示:图2音频放大电路4.音乐播放电路对于播放一首固定音乐,不仅要知道音符也要知道节拍,对应节拍延时时间设定表,对单片机进行编程就可以实现功能。放歌产生电路如图3,其中单片机的P3.0口控制音乐开始播放控制端口,P3.2口是控制音乐停止播放的控制端口,当小按键S10按下时P3.0口获得低电平,音乐开始重复播放,当小按键S9按下时,P3.2口获得低电平,经过单片机的处理,音乐停止播放,单片机回到最初工作状态。而P2口的每个端口都连接一个按键,分别控制1,2,3,4,5,6,7,˙1八个不同的音符。图3音乐播放电图5.总体电路图如下图:图4总体电路图,四、设计原理分析1.产生声音的方法:只要让扬声器通过产生大小变化的电流(脉动电流或交流),就能使扬声器发出声音,因此若以程序不断的输出1—0—1—0—1……就可以令扬声器发出声音,由于MCS—51系列的输出端口输出电流不够大,所以必须加上晶体管把电流放大后再驱动扬声器,如图2所示。图6则是产生声音的基本流程图,只要改变半周期t的时间,即可改变输出频率。开始开始P3.7=0延时tP3.7=1延时t图6产生声音的基本流程图2.决定程序中参数的方法:C调各音阶的参数及代码如表1所示,根据此表中的频率可计算出程序中所需的延时参数,现在以中音DO说明如下:表1C调各音阶的参数及代码音阶DOREMIFASOLASI音符高音1高音2高音3高音4高音5高音6高音7频率/HZ522587659700780880988延时参数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音阶代码0040255DO的频率为262HZ,所以周期T=1/f=1/262s=3816μs半周期t=T/2=1908μs若以程序:MOVR6,#DATA;1周ACALLDELAY;2周共需耗时3个机器周期,即耗时1μs×3=3μsDELAY:MOVB,R6;2周需耗时2个机器周期,即耗时1μs×2=2μsDL:MOVR7,#6;1周DJNZR7,$;2周DJNZR6,DL;2周此循环部分,每执行一次共需耗时15个机器周期,即耗时1μs×15=15μsMOVR6,B;2周RET;2周共需耗时4机器周期,即耗时1μs×4=4μs来达成延时t的目的,则因t=1908μs,且MOVR6,#DATAACALLDELAYMOVB,R6MOVR6,BRET这5个指令共耗时9μs,所以在DELAY子程序中,循环的部分只能是:1908μs-9μs=1899μs循环的部分每执行一次耗时15μs,故要延时1899μs需要执行126次,即R6=126就可产生所需DO音调。其他音调所需的R6值,算法相同。(4)实际上,做电子琴时,程序必须不断地判断是哪一个键被按下,所以程序中还有其他的指令在消耗时间。因此实际采用的R6的值应该比上述计算值少一点点,音阶才会正确。但是要把R6的值计算很准确,实在很费时间,况且判断按键的状态所耗时间与周期T比起来实在微不足道,所以在设计程序时只采用上述计算方法计算R6的值即可,程序在判断是哪个键被按下所耗费的时间可忽略不计。3.音乐产生的原理:由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的延时时间产生这样的方波频率信号。除了音符以外,节拍也是音乐的关键组成部分,节拍实际上就是音持续时间的长短,在单片机系统中可以用延时时间的长短来实现,如果1/4拍的延时时间是0.4秒,则1拍的延时时间就是1.6秒,只要知道1/4拍的延时时间,其余的节拍就是它的倍数。如果单片机要自己播放音乐,那么就必须在程序中考虑到节拍的设置。为了编写计算机乐谱的方便,所以我们自己定义了音阶代码,例如用01代表低音DO,用11代表中音DO,用21代表高音DO,如表1所列。另外,我们用40代表重复演奏,用255代表停止演奏。在程序中编写计算机乐谱时,就是用这些音阶代码来代替各音阶。音阶代码可岁曲子的节奏快慢有自己决定,例如1拍定位04(就是音长的4倍),半拍就是02,2拍就是08,以此类推。各音拍的音拍代码如表2所列。表2各音拍的音拍代码音拍1/4拍1/2拍3/4拍1拍11/4拍11/2拍13/4拍2拍音拍代码0102030405060708音拍21/4拍21/2拍23/4拍3拍31/4拍31/2拍33/4拍4拍音拍代码0910111213141516音拍41/4拍41/2拍43/4拍5拍51/4拍51/2拍53/4拍6拍音拍代码1718192021222324把乐谱改编为程序中的计算机乐谱时,必须按照“音阶代码在前,音拍代码在后”的规则排列,乐谱结束时,必须以40(表示重复演奏)或255(表示只演奏一遍就停止)作结尾。4.程序流程图:开始开始是音符键按下吗是功能键按下吗?否设定相应的延时参数R6的值令扬声器通电延时半周期令扬声器断电延时半周期DPTR指向乐谱的开头读取音乐代码,并存入A中音节代码等于40吗音节代码等255吗把DPTR加1读取音拍代码,并存入R4中设定与A内音阶代码相对应的参数发出R4个音长的声音静音把DPTR加1停止播放是否是否否是是5.程序:ORG0000HMOVP2,#11111111BMOVP3,#11111111BTEST:JNBP2.0,DO1;P2.0=0吗?JNBP2.1,RE1;P2.1=0吗?JNBP2.2,MI1;P2.2=0吗?JNBP2.3,FA1;P2.3=0吗?JNBP2.4,SO1;P2.4=0吗?JNBP2.5,LA1;P2.5=0吗?JNBP2.6,SI1;P2.6=0吗?JNBP2.7,DOH1;P2.7=0吗?JNBP3.0,START;P3.0=0吗?AJMPTESTDO1:MOVR6,#126AJMPOUTPUT1RE1:MOVR6,#113AJMPOUTPUT1MI1:MOVR6,#100AJMPOUTPUT1FA1:MOVR6,#95AJMPOUTPUT1SO1:MOVR6,#85AJMPOUTPUT1LA1:MOVR6,#75AJMPOUTPUT1SI1:MOVR6,#67AJMPOUTPUT1DOH1:MOVR6,#63AJMPOUTPUT1OUTPUT1:CLRP3.7;令扬声器通电ACALLDELAY;延时半周期tSETBP3.7;令扬声器断电ACALLDELAY;延时半周期tAJMPTEST;重新测试按键START:MOVDPTR,#MUSIC;DPTR指向乐谱的开头CONT:CLRA;读取乐谱内的音阶代码MOVCA,A+DPTR;A=音阶代码CJNEA,#40,CHK;若音阶代码为40AJMPSTART;则从头开始演奏STOP:MOVA,#255;若音阶代码为255AJMPTEST;则停止演奏CHK:PUSHACC;保存A的内容INCDPTRCLRA;读取乐谱内的音拍代码MOVCA,A+DPTRMOVR4,A;R4=音拍代码POPACC;取回A的内容CHK1:CJNEA,#01,CHK2;若音阶代码为01,ACALLDOL;则产生低音DO的声音JNBP3.2,STOP;若P3.2=0,则停止演奏CHK2:CJNEA,#02,CHK3;若音阶代码为02,ACALLREL;则产生低音RE的声音JNBP3.2,STOP;若P3.2=0,则停止演奏CHK3:CJNEA,#03,CHK4;若音阶代码为03,ACALLMIL;则产生低音MI的声音JNBP3.2,STOP;若P3.2=0,则停止演奏CHK4:CJNEA,#04,CHK5;若音阶代码为04,ACALLFAL;则产生低音FA的声音JNBP3.2,STOP;若P3.2=0,则停止演奏CHK5:CJNEA,#05,CHK6;若音阶代码为05,ACALLSOL;则产生低音SO的声音JNBP3.2,STOP;若P3.2=0,则停止演奏CHK6:CJNEA,#06,CHK7;若音阶代码为06,ACALLLAL;则产生低音LA的声音JNBP3.2,STOP;若P3.2=0,则停止演奏CHK7:CJNEA,#07,CHK11;若音阶代码为07,ACALLSIL;则产生低音SI的声音JNBP3.2,STOP;若P3.2=0,则停止演奏CHK11:CJNEA,#11,CHK12;若音阶代码为11,ACALLDO;则产生中音DO的声音JNBP3.2,STOP;若P3.2=0,则停止演奏CHK12:CJNEA,#12,CHK13;若音阶代码为12,ACALLRE;则产生中音RE的声音JNBP3.2,STOP;若P3.2=0,则停止演奏CHK13:CJNEA,#13,CHK14;若音阶代码为13,ACALLMI;则产生中音MI的声音JNBP3.2,STOP;若P3.2=0,则停止演奏CHK14:CJNEA,#14,CHK15;若音阶代码为14,ACALLFA;则产生中音FA的声音JNBP3.2,STOP;若P3.2=0,则停止演奏CHK15:CJNEA,#15,CHK16;若音阶代码为15,ACALLSO;则产生中音SO的声音JNBP3.2,STOP;若P3.2=0,则停止演奏CHK16:CJNEA,#16,CHK17;若音阶代码为16,ACALLLA;则产生中音LA的声音JNBP3.2,STOP;若P3.2=0,则停止演奏CHK17:CJNEA,#17,CHK21;若音阶代码为17,ACALLSI;则产生中音SI的声音JNBP3.2,STOP;若P3.2=0,则停止演奏CHK21:CJNEA,#21,CHK22;若音阶代码为21,ACALLDOH;则产生高音DO的声音CHK22:CJNEA,#22,CHK23;若音阶代码为22,ACALLREH;则产生高音RE的声音CHK23:CJNEA,#23,CHK24;若音阶代码为23,ACALLMIH;则产生高音MI的声音CHK24:CJNEA,#24,CHK25;若音阶代码为24,ACALLFAH;则产生高音FA的声音CHK25:CJNEA,#25,CHK26;若音阶代码为25,ACALLSOH;则产生高音SO的声音CHK26:CJNEA,#26,CHK27;若音阶代码为26,ACALLLAH;则产生高音LA的声音CHK27:CJNEA,#27,CHK0;若音阶代码为27,ACALLSIH;则产生高音SI的声音CHK0:CJNEA,#00,CONT2;若音阶代码为00,ACALLNON;则不发出声音CONT2:INCDPTR;继续读取乐谱AJMPCONTDOL:MOVR6,#254;R6=延时参数MOVR5,#16;R5=音长参数AJMPOUTPUT;设定低音DO的相对参数REL:MOVR6,#226;设定低音RE的相应参数MOVR5,#18AJMPOUTPUTMIL:MOVR6,#201;设定低音MI的相应参数MOVR5,#21AJMPOUTPUTFAL:MOVR6,#190;设定低音FA的相对参数MOVR5,#22AJMPOUTPUTSOL:MOVR6,#170;设定低音SO的相应参数MOVR5,#25AJMPOUTPUTLAL:MOVR6,#150;设定低音LA的相应参数MOVR5,#28AJMPOUTPUTSIL:MOVR6,#134;设定低音SI的相应参数MOVR5,#31AJMPOUTPUTDO:MOVR6,#126;设定中音DO的相对参数MOVR5,#33AJMPOUTPUTRE:MOVR6,#113;设定中音RE的相对参数MOVR5,#37AJMPOUTPUTMI:MOVR6,#100;设定中音MI的相对参数MOVR5,#41AJMPOUTPUTFA:MOVR6,#95;设定中音FA的相对参数MOVR5,#44AJMPOUTPUTSO:MOVR6,#85;设定中音SO的相对参数MOVR5,#49AJMPOUTPUTLA:MOVR6,#75;设定中音LA的相对参数MOVR5,#55AJMPOUTPUTSI:MOVR6,#67;设定中音SI的相对参数MOVR5,#62AJMPOUTPUTDOH:MOVR6,#63;设定高音DO的相应参数MOVR5,#65AJMPOUTPUTREH:MOVR6,#56;设定高音RE的相应参数MOVR5,#73AJMPOUTPUTMIH:MOVR6,#50;设定高音MI的相应参数MOVR5,#82AJMPOUTPUTFAH:MOVR6,#47;设定高音FA的相应参数MOVR5,#88AJMPOUTPUTSOH:MOVR6,#42;设定高音SO的相应参数MOVR5,#98AJMPOUTPUTLAH:MOVR6,#37;设定高音LA的相应参数MOVR5,#110AJMPOUTPUTSIH:MOVR6,#33;设定高音SI的相应参数MOVR5,#124AJMPOUTPUTNON:MOVR6,#33;设定休止符相应参数MOVR5,#124AJMPOUTPUTOUTPUT:MOVACC,R5;保存R5的内容LOOP:CJNEA,#00,SOUND;若音阶代码为00,则不让扬声器通电LJMPMUTESOUND:CLRP3.7;令扬声器通电MUTE:ACALLDELAY;延时半周期SETBP3.7;令扬声器断电ACALLDELAY

温馨提示

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

评论

0/150

提交评论