计算机电子琴软件软件设计_第1页
计算机电子琴软件软件设计_第2页
计算机电子琴软件软件设计_第3页
计算机电子琴软件软件设计_第4页
计算机电子琴软件软件设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

课程设计任务书题目计算机电子琴软件软件设计初始条件1用于调试程序的IBM兼容PC机一台;2安装DOS/WIN98操作系统或运行于DOS/WIN98兼容方式;3EDIT等文本编辑器输入80X86汇编程序,MASM50编译及链接程序。要求完成的主要任务(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1使用汇编语言设计一个运行于计算机的电子琴软件,软件应实现弹奏功或演奏。其中弹奏用户每按一琴键弹奏相应音符;演奏按下某键后自动弹奏预存琴谱功能;还可以附加变调、变速和记录创作等其它功能。2说明书撰写格式应符合课程设计说明书统一书写格式。时间安排1程序框图设计,3天2编程,4天3调试,3天4编写设计报告,4天指导教师签名年月日系主任(或责任教师)签名年月日目录摘要I1设计任务和思路111设计任务112设计思路12更件部分工作原理2218255工作原理2228253工作原理23程序流程图431主程序流程图432演奏子程序流程533音乐播放子程序流程634弹奏子程序流程图635发音子程序流程图74各部分功能实现说明741发音部分功能实现742变调功能的实现843弹奏功能的实现844演奏功能的实现9441歌曲选择功能实现9442音乐播放功能实现95程序运行结果10结束语12参考文献13附录程序清单14成绩评定表19摘要汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。利用汇编语言能够直接访问与硬件相关的存储器或I/O端口,从而最大限度地发挥硬件的功能。本文主要介绍了利用汇编语言设计一个运行于计算机的电子琴软件,软件能够实现弹奏,演奏的功能,当按下弹奏键时,实现弹奏功能,发出音符对应频率的声音,按下演奏键时,实现演奏功能,播放预存的音乐,按下指定的音调选择按键后,选择低音,中音或高音,则分别用低音,中音或高音进行弹奏或演奏。首先介绍了PC机内扬声器的控制电路,接着介绍了相关接口芯片8255和8253的内部结构和工作原理,接着讲述了各部分功能的具体实现方法。关键词汇编语言,8255,8253,扬声器计算机电子琴软件设计1设计任务和思路11设计任务使用汇编语言设计一个运行于计算机的电子琴软件,软件应实现弹奏功能或演奏功能。其中弹奏用户每按一琴键弹奏相应音符;演奏按下某键后自动弹奏预存琴谱功能;还可以附加变调、变速和记录创作等其它功能。软件预想功能为按数字18为弹奏功能;按字母P为演奏功能;按D选择低音,按Z选择中意,按G选择高音。12设计思路电子琴的设计实际上就是要设计一个程序,能够通过该程序控制PC机内扬声器的发声规律,按下相应的按键后,扬声器能发出指定频率的声音。PC机内的扬声器是通过并行接口芯片8255和定时芯片8253来控制发音的,其电路连接方式如下图所示。图1PC机内扬声器控制电路由图可知,扬声器是由8253通道2产生的方波信号和8255的PB1相与后驱动发声的,且通道2的门信号由8255的PB0提供,要想让扬声器发声,PB0和PB1必须同时为高电平,因此,可以通过对8255的PB0和PB1的设置来控制扬声器的开通和关断,而其发音频率可以通过对8253通道2的计数初值的设置来控制。所设计程序的任务就是要通过对按键的判断来设置8255的PB0和PB1输出电平的高低,以及8253通道2计数初值的设置。计数初值N时钟频率/音阶频率各音阶的频率如下表所示。表1各音符频率表音符1234567频率低131147165175196220247频率中262294330349392440494频率高5245886606987848809888255APB1PB0CLK28253GATE2OUT2读入B口数据ORAL,03H将PB0和PB1置1OUT61H,AL将设置好的数据送回B口关扬声器程序段INAL,61H读入B口数据8253初始化开扬声器延时关扬声器返回ANDAL,0FCH将PB0和PB1置0OUT61H,A将设置好的数据送回B口42变调功能的实现扬声器发音的频率是由8253产生方波的频率决定的,而方波频率又是由通道的计数初值来决定的,因此可以通过改变通道的计数初值来实现变调功能。计数初值N时钟频率/音阶频率,时钟频率为119318MHZ1234DCH,可以将相应音调对应的时钟频率存入内存单元,当选择相应的音调时,计算计数初值时,采用对应的时钟频率值,具体程序如下。CMPAL,D;为D则选择低音JNEJ1MOVNUM2,50JMPCHOICEJ1CMPAL,Z;为Z则选择中音JNEJ2MOVNUM2,12HJMPCHOICEJ2CMPAL,G;为G则选择高音JNELOOP0MOVNUM2,06H其中,NUM1和NUM2中存放的是时钟频率值,NUM1中固定为34DCH,选择低音时,NUM2值设为50,中音时设为12H,高音时设为06H。计算计数初值程序如下MOVAX,NUM1MOVDX,NUM2DIV音符频率通过这样的设置,即可实现电子琴的变调功能。43弹奏功能的实现当按键为数字18时,选择弹奏功能,通过对按键的判断,求得其偏移地址,然后通过查表得其相应频率值,再由上述计算计数初值的方法求得计数初值,然后将计数初值送人8253的通道2,最后调用发音子程序即实现弹奏功能。具体程序段如下SUBAL,31H求偏移量SHLAL,1MOVBL,AL保存偏移量MOVBH,0MOVAX,NUM1计算计数初值MOVDX,NUM2DIVWORDPTRTABBXMOVBX,AX保存计数初值43演奏功能的实现431歌曲选择功能实现当按键为P时,选择演奏功能,播放预存的音乐,由于预存了两首歌曲,因此需进行选择,按下P后,显示输入提示信息,按1或2选择对应的歌曲,然后调用相应的音乐播放子程序,播放完后显示输入提示信息,按Q退出,按C继续。具体程序实现如下LOOP2MOVDX,OFFSETMESG1显示输入提示信息MOVAH,09HINT21HMOVAH,07H;从键盘读入一个字符INT21HCMPAL,Q;为Q则退出JECHOICECMPAL,1;为1则选择歌曲1JNENEXT1CALLMUSIC1JMPLOOP3NEXT1CMPAL,2;为2则选择歌曲2JNELOOP2;不为Q,1,2则重新选择CALLMUSIC2LOOP3MOVDX,OFFSETMESG2;播放完后显示输入提示信息MOVAH,09HINT21HMOVAH,7;从键盘读入一个字符INT21HCMPAL,Q;为Q则返回JECHOICECMPAL,C;为C则继续播放JELOOP2JMPLOOP3432音乐播放功能实现选择歌曲后,调用对应的音乐播放子程序,音乐播放需用到循环结构,首先将计数器清零,接着计数器自增1,求得偏移量,然后通过查表的到相应的频率,再计算计数初值,将计数初值送人8253计数通道,调用发音子程序,若计数器的值大于歌曲长度,则返回。具体程序段如下。MOVCL,0;将计数器清零ADINCCL;计数器值自增1CMPCL,31;计数器值若大于歌曲长度,则返回JERETURNMOVAL,CLSUBAL,1;求偏移量SHLAL,1MOVBL,AL;保存偏移量MOVBH,0MOVAX,NUM1;计算计数初值MOVDX,NUM2DIVWORDPTRSONG2BXMOVBX,AXCALLSPEAKER;调用发音子程序JMPAD5程序运行结果运行程序后,显示如下界面,等待输入字符。图11程序运行结果图1按提示输入字符,按Q则退出,按D选择低音,按Z选择中音,按G选择高音,选择音调后,显示如下界面图12程序运行结果图2等待输入字符,按Q则退出,按P则演奏,按数字18则弹奏。按下P后,程序运行如下图13程序运行结果图3按提示输入字符,按下Q则返回,按下1或2进行歌曲选择,歌曲播放完后程序运行如下图14程序运行结果图4按提示按下键盘,若按下Q,则推出,若按下C,则继续播放歌曲。下面是按下C后的运行结果图15程序运行结果图5结束语通过这次课程设计,我从中学到了许多从课本上学不到的东西,锻炼了自己编程的能力,最后程序运行时能够实现目标,我感到很有成就感,从中也获得了很多乐趣,当然,最重要的是加深了我对课本理论知识的理解。当刚看到这个课设题目时,我感到无从下手,因为我都不知道PC机的内部具体结构,从理论课上只是了解了CPU的结构和工作原理,以及几个接口芯片的工作原理,还有汇编语言的一些基本指令。但我没有被吓到,我冷静下来思考后,发现其本质就是控制PC机内扬声器的发音,通过查阅资料我了解了PC机内扬声器的电路连接形式,发现它是由接口芯片8255和8253共同控制的,8255的PB0作为8253通道2的门信号,而8255的PB1和8253通道2的输出相与后的信号作为扬声器的驱动信号,了解了其内部接线方式后,思路也就有了,要想让扬声器发声,8255的PB0和PB1必须同时为高电平,其中之一为低电平时,扬声器就不能发声,而发声的音调则可通过改变8253的计数初值来实现,接下来的任务就是通过编程来控制8255和8253,从而间接地控制扬声器的发声规律,而8255和8253这两个接口芯片在理论课上都已介绍过,对其工作原理和编程方法都有一定的了解,看到这些熟悉的内容时,我淡定了很多。有了思路之后,我并没有急着写程序,因为我怀疑是不是每台PC机的扬声器接线方式都是这样的,所以我开始只编了一段控制扬声器发音的程序,来看看程序运行时扬声器到底发不发音,结果发声了,这让我很惊喜,也很有动力,更加激发了我的兴趣,接下来我就开始编写实现指定功能的程序了,首先是最简单的弹奏功能,通过对按键的判断来发出相应频率的声音,因为要判断按键,所以很自然地就想到了CMP指令,在计算计数初值时,因为要用到相应音符的频率,所以需要将按键转换为音符的频率,我开始想用课本上常见的XLAT换码指令,但AL存放的数最大为128,很明显容量不够,于是我采用了基址变址的寻址方法,在编程的过程中,由于要程序实现多个功能,所以用子程序的结构会比较方便,需要完成某个功能时,只需调用相应子程序就可以了,这样会使得程序的结构清楚明了;在开扬声器和关扬声器之间需要一定的延时,当把计数器置为0FFFFH时,延时还是显得太短,于是延时我采用了AX和CX相配合的方式,使得延时达到预期的目的;在完成基本功能后,我还试着加上一些附加功能,比如变调,录音,通过我的不断尝试,终于把变调功能实现了,但录音功能没能像预期的那样。总之,这次课程设计让我学到了许多从课本上学不到的知识,加深了对理论知识的理解,激发了我对汇编语言的兴趣。上理论课时,只是老师讲,我们听,那些指令让我感到很枯燥,因为不知道它到底有什么作用,而这次课程设计刚好把这些指令应用到了实际中来,加深了对各种指令功能的理解,最后功能实现时,感到很有成就感,觉得汇编语言很神奇,激发了我对它的兴趣。参考文献1彭虎,周佩玲微机原理与接口技术(第二版)电子工业出版社,20102陈慧杰计算机扬声器发声的控制内蒙古民族大学出版社,20013PETERABEL著,沈美明等译IBMPC汇编语言设计程序人民邮电出版社,20024冯继超微机原理实验指导书武汉理工大学出版社,2010附录程序清单DATASEGMENTMESGDBPRESSQTOQUIT,PRESSDORZORHTOCHOSEYINDIAO,0AH,0DH,MESG1DBPRESSQTORETURN,PRESS1OR2TOCHOSEMUSIC,0AH,0DH,MESG2DBPRESSQTORETURN,PRESSCTOCONTINUE,0AH,0DH,MESG3DBPRESSQTORETURN,PRESSPTOPLAYMUSIC,PRESS18TOHANDPLAY,0AH,0DH,NUM1DW34DCHNUM2DW12HTABDW262,294,330,347,392,440,494,524SONG1DW262,294,330,262,262,294,330,262DW330,347,392,330,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,294,330,330,294,294,330DW330,347,392,392,347,330,294,262DW262,294,330,294,262,262欢乐颂DATAENDSCODESEGMENTASSUMECSCODE,DSDATASTARTMOVAX,DATAMOVDS,AXLOOP0MOVDX,OFFSETMESG;显示输入提示信息MOVAH,09HINT21LOOP1MOVAH,07H;读入字符INT21HCMPAL,Q;为Q则退出JEDONECMPAL,D;为D,选择低音JNEJ1MOVNUM2,50JMPCHOICEJ1CMPAL,Z;为Z选择中音JNEJ2MOVNUM2,12HJMPCHOICEJ2CMPAL,G;为G选择高音JNELOOP0MOVNUM2,06HCHOICEMOVDX,OFFSETMESG3MOVAH,09HINT21HPUT1MOVAH,07HINT21HCMPAL,Q;为Q则返回JELOOP0CMPAL,P;为P选择演奏JNENEXTCALLPLAYJMPPUT1NEXTCMPAL,1;为18,选择弹奏JLLOOP1CMPAL,8JGPUT1CALLHANDJMPPUT1HANDPROCNEAR;弹奏子程序SUBAL,31HSHLAL,1MOVBL,ALMOVBH,0MOVAX,NUM1MOVDX,NUM2DIVWORDPTRTABBXMOVBX,AXCALLSPEAKERRETHANDENDPPLAYPROCNEAR;演奏子程序LOOP2MOVDX,OFFSETMESG1MOVAH,09HINT21HMOVAH,07H;读入字符INT21HCMPAL,Q;为Q则返回JECHOICECMPAL,1;为1,播放歌曲1JNENEXT1CALLMUSIC1JMPLOOP3NEXT1CMPAL,2;为2,播放歌曲2JNELOOP2CALLMUSIC2LOOP3MOVDX,OFFSETMESG2MOVAH,09HINT21HMOVAH,7;读入字符INT21HCMPAL,Q;为Q则退出JECHOICECMPAL,C;为C则继续JELOOP2JMPLOOP3RETPLAYENDPMUSIC1PROCNEAR;音乐1播放子程序MOVCL,0ADINCCLCMPCL,33JERETURNMOVAL,CLSUBAL,1;取偏移量SHLAL,1MOVBL,AL;保存偏移量MOVBH,0MOVAX,NUM1;计算计数初值MOVDX,NUM2DIVWORDPTRSONG1BXMOVBX,AXCALLSPEAKERJMPADRETURNRETMU

温馨提示

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

评论

0/150

提交评论