《微机原理课程设计—电子琴的设计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计—电子琴的设计.docx(19页珍藏版)》请在三一办公上搜索。
1、课程设计任务书学生姓名,刘沛专业班级:电气0901指导老师:张锐工作单位,自动化学院题目:计算机电子琴软件软件设计初始条件:1 .用于调试程序的IBM兼容PC机一台:2 .安装D0S/W1N98操作系统或运行于DOS/W1.N98兼容方式:3 .EDIT等文本编辑器输入80x86汇编程序,MASM5.0编译及链接程序。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明H撰写等详细耍求1 .运用汇编语言设计一个运行于计算机的电子琴软件,软件应实现弹奏功或演奏。其中弹奏:用户每按一琴键弹奏相应音符:演奏:按下某键后自动弹奏预存琴谱功能;还可以附加变调、变速和记录创作等其它功能。2 .说
2、明书撰写格式应符合课程设计说明书统一书写格式瓦时间支配:1.程序框图设计,3天2.编程,4天3,调试,3天4.编写设计报告,4天指导老师签名:年月日系主任(或责任老师)签名:书目摘要I1设计任务和思路I1.1 设计任务11.2 设计思路12更件部分工作原理22.18255工作原理22.28253工作原理23程序流程图43.1主程序流程图43.2演奏子程序流程53.3音乐播放子程序流程63.4仰奏子程序流程图63.5发音子程序流程图74各部分功能实现说明74.1 发音部分功能实现74.2 变调功能的实现84.3 弹奏功能的实现84.4 演奏功能的实现94.4. 1歌曲选择功能实现94.4.2音乐
3、播放功能实现95程序运行结果10结束语12参考文献13附录程序清单14成果评定表19摘要汇编语言是一种功能很强的程序设计语言,也是利用计算机全部硬件特性并能干脆限制硬件的语言.利用汇编语言能够干脆访问与硬件相关的存储器或0端口,从而最大限度地发挥硬件的功能。本文主要介绍了利用汇编语言设计一个运行丁计克机的电子琴软件,软件能够实现弹奏,演奏的功能,当按下弹奏键时,实现弹奏功能,发出音符对应频率的声音,按下演奏键时,实现演奏功能,播放值存的音乐,按卜指定的音调选择按键后,选择低音,中音或高音,则分别用低音,中音或高音进行弹奏或演奏。首先介绍了PC机内扬声器的限制电路,接着介绍了相关接口芯片8255
4、和8253的内部结构和工作原理.按若讲解并描述了各部分功能的详细实现方法。关键词:汇编语言,8255,8253,扬声器计算机电子琴软件设计1设计任务和思路1.1 设计任务运用汇编语言设计个运行于计算机的电子琴软件,软件应实现弹奏功能或演奏功能.其中弹奏:用户每按一琴键弹奏相应音符:演奏:按下某键后自动弹奏预存导谱功能:还可以附加变调、变速和记录创作等我它功能。软件预想功能为:按数字1-8为弹奏功能:按字母P为演奏功能:按d选择低音,按Z选择中意,按g选择高音。1.2 设计思路电子号的设计事实上就是要设计一个程序,能够通过该程序限制PC机内扬声器的发声规律,按下相应的按键后,扬声错能发出指定频率
5、的声音。PC机内的扬声器是通过并行接口芯片8255和定时芯片8253来限制发音的,其电路连接方式如下图所示。图1PC机内扬声器限制电路由图可知,扬声器是由8253通道2产生的方波信号和8255的PB1.相与后驱动发声的,且通道2的门信号由8255的PBO供应,要想让扬声器发声,PBO和PB1.必需同时为高电平,因此,可以通过对8255的PBO和PB1.的设跷来限制扬声器的开通和关断,而其发音频率可以通过对8253通道2的计数初值的设置来限制。所设计程序的任务就是要通过对按键的推断来设置8255的PBO和PB1.输出电平的凹凸,以及8253通道2计数初值的设置,。计数初值N=时钟频率/音阶频率.
6、各音阶的频率如卜表所示。表1各音符频率表音符1234567频率(低)131147165175196220247频率(中)262294330349392440494频率(Si)5245886606987848809882硬件部分工作原理2. 18255工作原理8255的内部结构图如图2所示,它有3个数据端口,分为两组,A组由A口和C口高四位组成,B组由B口和C口低四位组成其方式限制字如图3所示。PA.pc。图28255内部结构图图38255方式限制字将征卷1.期方方方B作-一0-三hK-PCt*人制Ht.入0也出PC机内8255的60H,61H,6211,63HA口,B口,C口和限制口的端口地址
7、分别为:2. 28253工作原理8253芯片中有3个计数通道,称为通道0,1,2,它们与外部电路相连的信号线有3根:C1.K,GATE,OUT,C1.K是脉冲输入端,GATE是门控信号,OUT是输出信号,计数器工作在减1状态。其内部结构图和方式限制字格式如图4,图5所示。其中当计数器工作在方式3时,输出信号为方波信号.C1.-KOGA1.EOUTOC1.-K1.GA1.EOUTIC1.K2GAIEOUT2图48253内部结构图图58253限制字格式PC机内8253的通道0,通道1,通道2,限制口的端口地址分别为:4041H,42,43H.因为扬声器是由通道2来限制的,故应选择通道2.工作方式选
8、为方式3,输出的信号则为方波信号。3程序流程图3.1主程序流程图主程序的流程图如下图所示:图6主程序流程图3. 2演奏子程序流程图当按键为P为时,调用音乐播放子程序,音乐播放了程序的流程图如下图所示。图7音乐播放子程序流程图3. 3音乐播放子程序流程图演奏时,通过推断按键为1或2来调用音乐播放了程序1或2,音乐播放了程序流程图如图8所示.计数器清零C1.自增1图8音乐播放子程序流程图3. 4弹奏子程序流程图当按键为1-8时,调用演奏子程序,演奏子程序的流程图如卜图所示:图9演奏子程序流程图3.5发音子程序流程图在弹奏和演奏时都需调用发音子程序,发音子程序的作用是限制扬声器的发音,其潦程图如下:
9、8253初始化开扬声器图10发音子程序流程图4各部分功能实现说明4.1发音部分功能实现由更件的连接形式可知,扬声器的开断是由8255的PBo和PB1.以及8253通道2同时限制的,PBO和PB1.同时为高电平常,扬声器开,有一个为低电平常,扬声器关断,又知8255B地址为61H,8253通道2地址为42H,限制口地址为43H。详细程序编写如下。8253初始化程序段:Hiova1.joiIOIIOb;选择8253的通道2,并设置为工作方式3out43h.a1.movax.bxout42h,a1:将计数初值的低8位写入计数通道mova1.ahout42h.a1.:将计数初值的高8位写入计数通道开扬
10、声器程序段:ina1.,61.h;读入B数据ora1.03h:将PBO和PB1.置1out61h.a1.:将设置好的数据送回B口关扬声器程序段:ina1.61.h:读入B口数据anda1.()fch;将PBO和PB1.置0out61.h,a;将设理好的数据送阿B口4. 2变调功能的实现扬声器发音的频率是由8253产生方波的频率确定的,而方波频率乂是由通道的计数初值来确定的,因此可以通过变更通道的计数初值来实现变调功能,计数初值N=时钟频率/音阶频率,时钟频率为1.19318MHZ=I234DCH,可以将相应音调对应的时钟频率存入内存单元,当选择相应的音调时,计共计数初值时,采纳对应的时钟频率值
11、,详细程序如下。cmpa1.d;为d则选择低音jnej1.novnun2.5()jnpchoicej1.xmpa1.,z;为Z则选择中音jnej2movnum2.12hjmpchoicej2xmpa1.g;为g则选择高音jnc1.pmovnum2.O6h其中,num】和num2中存放的是时钟频率值,num1.中固定为34DCH,选择低音时,num2值设为50,中音时设为12H,高音时设为06H。计算计数初值程序如下:novax.nun1.novdx,nun2div含符频率通过这样的设捏,即可实现电子耳的变调功能.4. 3弹奏功能的实现当按键为数字1-8时,选择用奏功能,通过对按键的推断,求得其
12、偏移地址,然后通过查表得其相应频率值,再由上述计算计数初值的方法求得计数初值,然后将计数初值送入8253的通道2,最终调用发音子程序即实现弹奏功能.详细程序段如下:suba1.31.hsh1.a1.1.movb1.,a1.movbh,0movax.num1movdx.num2:求偏移量;保存偏移量:计算计数初值divwordprtab+bxmovbx.ax;保存计数初值4. 3演奏功能的实现4.1.1 歌曲选择功能实现当按键为P时,选择演奏功能,播放预存的音乐,由于预存了两首歌曲,因此需进行选择,按卜p后,显示输入提示信息,按1或2选择对应的歌曲,然后调用相应的音乐播放子程序,播放完后显示输入
13、提示信息,按q退出,按C接著。详细程序实现如下:100p2:movdx,offsetmcsg1.movah.09h;显示输入提示信息int21.hnovah,07hint21.hcmpa1.,q,jechoicecmpa1.,jncnextI;从键盘读入一个字符:为q则退出:为1则选择歌曲Ica1.1.music1jmp1.oop3nextIxinpa1.,2jnc100P2ca1.1.music2:为2则选择歌曲2;不为q,1,2则重新选择100P3:InOVdx.offsetnesg2:播放完后显示输入提示信息novah,()9hin21.hmovah.7:从键盘读入一个字符int21.h
14、cmpa1.,qjcchoicecmpa1.,cjeIp2:为q则返回:为C则接着播放jn100P34. 3.2音乐播放功能实现选择歌曲后,调用对应的音乐播放了程序,音乐播放需用到循环结构,首先将计数器清零,接者计数器自增1,求得偏移址,然后通过查表的到相应的频率,再计算计数初值,将计数初值送人8253计数通道,调用发音子程序,若计数落的值大于歌曲长度,则返回。详细程序段如K结束语通过这次课程设计,我从中学到了很多从课本上学不到的东西,熬炼了自己编程的实力,最终程序运行时能够实现目标,我感到很有成就感,从中也获得J很多乐趣,当然,最贵要的是加深了我对课本理论学问的理解。当刚看到这个课设题目时,
15、我感到无从F手,因为我都不知道PC机的内部详细结构,从理论课上只是了解了CPu的结构和工作原理,以及几个接口芯片的工作原理,还有汇编语言的一些基本指令。但我没有被吓到,我冷冷下来思索后,发觉其本质就是限制PC机内扬声器的发音,通过包阅资料我了解了PC机内扬声涔的电路连接形式,发觉它是由接口芯片8255和8253共同限制的,8255的PBO作为8253通道2的门信号,而8255的PB1.和8253通道2的输出相与后的信号作为扬声器的驱动信号,J解了其内部接线方式后,思路也就有广.耍想让扬声器发声,8255的PBo和PBI必需同时为富电平,其中之一为低电平常,扬声耦就不能发声,而发声的音调则可通过
16、变更8253的计数初值来实现,接卜来的任芳就是通过编程来限制8255和8253,从而间接地限制扬声器的发声规律,而8255和8253这两个接口芯片在理论课上都已介绍过,对其工作原理和编程方法都有肯定的了解,看到这些熟识的内容时,我淡定了很多。有了思路之后,我并没有急着写程序,因为我怀疑是不是每台PC机的扬声器接线方式都是这样的,所以我起先只编了段限制扬声器发音的程序,来看看程序运行时扬声器究竟发不发音,结果发声这让我很惊喜,也很有动力,更加激发了我的爱好,接下来我就起先编写实现指定功能的程序了,首先是最简洁的弹奏功能,通过对按键的推断来发出相应频率的声音,因为要推断按键,所以很自然地就想到了C
17、MP指令,在计算计数初值时,因为要用到相应音符的频率,所以须要籽按键转换为音符的频率,我起先想用课本上常见的X1.AT换科指令,但A1.存放的数最大为128,很明显容量不够,于是我采纳了基址+变址的寻址方法,在编程的过程中,由于要程序实现多个功能,所以用子程序的结构会比较便利,须要完成某个功能时,只需调用相应子程序就可以了,这样会使得程序的结构清晰明白:在开扬内器和关扬声器之间须要肯定的延时,当把计数器置为Offffh时,延时还是显得太短,于是延时我采纳了AX和CX相协作的方式,使得延时达到预期的目的:在完成基本功能后,我还试着加上一些附加功能,比如变调,录音,通过我的不断要试,最终把变调功能
18、实现了,但录音功能没能像预期的那样。总之,这次课程设计让我学到很多从课本上学不到的学问,加深J对理论学问的理解,激发了我对汇编语言的爱好。上理论课时,只是老师讲,我们听,那些指令让我感到很枯燥,因为不知道它究竟有什么作用,而这次课程设计刚好把这些指令应用到了实际中来,加深了对各种指令功能的理解,最终功能实现时,感到很有成就感,觉得汇编语言很奇妙,激发r我对它的爱好.参考文献H1.彭虎,周佩玲.微机原理与接口技术(其次版).电子工业出版社,2(HO2J陈款杰.计獴机扬声港发声的限制.内蒙古民族高校出版社,20013PeterAbe1.著,沈美明等译.IBMPC汇编语言设计程序.人民邮电出版社,2
19、2|4|冯继超.微机原理试验指导书.武汉理工高校出版社,2010附录程序清单dataSCgmcn1.mcsgdbpressqtoquit.prcssdorzorhtochoseyindiao,.0ah.0dh.Smesg1.dbpressqtoreturn.pressIor2tochosemusic.0ah.0dh.S,tnesg2dbpressqtoreturn.pressc(ocontinue,Oah,Odh,Smcsg3dbpressqtorturn.prcssptoP1.aymuSiC,pressI8tohandp1.ay.0ah.(k1.h.Snum1.dw34dchnum2dw12
20、htabdw262,294,330,347392,440,494,524songIdw262,294,330.262.262.294.330.262dw330.347392330,347.392.392.440dw392.347,330.262.392.440.392.347dw330,262,392,262,392,392,262,392;两只老虎song2dw330.330,347,392,392,347,330.294dw262.262.294330.330.294.294.330dw330.347.392392,347,330.294.262dw262,294,330,294,262,
21、262;快乐颂dataendscodesegmentassumecs:code,ds:dataStartzmovax,datamovds.ax1.oo():IiMivovah.07hint21.hcnpa1.qje1.oop():为q则返回:为P选择演奏:为1-8.选择钟奏Cn1.Pa1.,p,jncnextca1.1.p1.ayjnppu1.inext:cmpa1.,a1.,8jgPUca1.1.handjmut1.handprcnear;弹奏子程序suba1.31.hsh1.a1.1.movb1.,a1.movbh,0movax.num1movdx.num2divwordtrtab+bxm
22、ovbx,axca1.1.speakerrethandcndpp1.ayProCnear100p2:novdx.offsctmcsg1movah.()9hint21.h;演奏子程序movah.07h:读入字符int21hcna1.,q;为q则返回jechoicecnpa1.,:为1,播放歌曲1jnenext1.ca1.1.musicIjmpkop3nextIxmpa1.2:为2,播放歌曲2jne1.oop2ca1.1.nusic2100p3rnvdx.offsctmcsg2movah.()9hint21.hmovah.7;读入字符int21hcmpa1.q;为q则退出jechoiceCmPa1
23、.,c:为C则接着jc100p2jmp1.oo3reip1.aycndpmusic1procnear;音乐1播放了程序movc1.,Oad:incc1.cmpc1.33jereturnmova1.,c1.suba1.I;取偏移量sh1.a1.1.movb1.a1.:保存偏移量movbh,0movax.num1.;计算计数初值movdx.num2divwordptsong1.+bxnovbx,axca1.1.speakerjnpadreturn:retmusicIendp11wsic2procnear;音乐2播放子程序movc1.0ad:c1.,31jcreturnmova1.c1.suba1.
24、1.sh1.a1.,1.movb1.a1.movbh.0movax.nun1.movdx,nun2divwordptrsong2+bxmovbx.axca1.1.speakerjnadrctum:rctnwsic2endpspeakerprocnear:发音子程序mova1.1.O1.1.OHObout43h.a1.movax,bxout42h,a1.mova1.ahout42h.a1.:8253初始化ina1.61.h;开扬声器ora1.O3hout61h.a1.ca1.1.de1.ayina1.,61.h;关扬声器anda1.Ofchout61h.a1.retspeakerendpde1.
25、ayprocnear:延时子程序pushaxpushexmovax.121.oo4n)vcx.Offffh1.oop5r1.oop100p5decaxjnzIUOP4popexpopaxretde1.ayendpdone:movax.4c00hint21.hcodeendsendstart本科生课程设计成果评定表姓名刘沛性别男专业、Bft电气0901班课程设计题目,计算机电子琴软件设计课程设计答辩或朋疑记录,AR果评定依据:评定项目1.选题合理、目的明1(10分)2.设计方案正H、具有可行性、创斫性(20分)3.设计结果(20分)4看法仔短、学习刻苦、遵守纪律(10分)5.设计报告的胡范化、参考文献充分(20分)6.等舞(2()分)7.总分(100分)量终挪定成果(以优、良、中、及格、不及格评定)指导者郎签字i年月日