06简单电子琴程序设计_第1页
06简单电子琴程序设计_第2页
06简单电子琴程序设计_第3页
06简单电子琴程序设计_第4页
06简单电子琴程序设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

写在文档前面程序为汇编语言编QASM2.7编译,环境为WINXP(注意在64位机汇编程序无法编译,最好装虚拟机)目录TOC\o"1-5"\h\z\o"CurrentDocument"摘要 1\o"CurrentDocument"原理分析 2\o"CurrentDocument"2.1设计要求 2\o"CurrentDocument"2.2需求分析 2\o"CurrentDocument"2.3原理分析 2\o"CurrentDocument"程序设计 5\o"CurrentDocument"3.1程序流程图 5\o"CurrentDocument"3.2程序代码 6\o"CurrentDocument"程序调试及运行结果 7\o"CurrentDocument"4.1程序的调试 7\o"CurrentDocument"4.2运行结果 7\o"CurrentDocument"4.3结果分析 9\o"CurrentDocument"心得体会 10\o"CurrentDocument"参考文献 11\o"CurrentDocument"附录 12摘要汇编语言(AssemblyLanguage)是面向机器的程序设计语言,汇编语言包括两个部分:语法部分和汇编器。语法部分提供与机器指令相对应的助记符,方便指令的书写和阅读。当然,汇编语言的符号可以被人类接受,但不能被处理器识别,为此,还要由汇编语言编译器将这些助记符转换成机器指令,这个组装的过程称为组合或汇编。本次课程设计中主要运用汇编语言编写简单电子琴程序,利用轻松汇编程序QSAM进行汇编。在简单电子琴程序中,由PC机键盘输入1-7音符并存储,并根据不同音符对应的频率设置定时器初值,调用扬声器播放。关键字:汇编,电子琴,音符,频率原理分析2.1设计要求(1) 编写一个利用1至7演奏音符的程序;(2) 程序能记录所演奏的音乐;(3) 程序能回放记录的音乐;(4) 程序采用汇编语言在PC机上完成;2.2需求分析根据设计要求:首先,此电子琴程序需要在PC机上用汇编语言完成,演奏的音符必须调用PC机的扬声器完成。第二,演奏1至7音符,即要求演奏不同频率的音符,需找到对应1-7音符的频率,可从音符频率对照表中找到对应频率,调用BIOS,以播放该频率音符。第三,程序通过记录输入数据,和调用播放子程序可达到记录演奏的音乐和回放记录的音乐的功能。第四,操作界面简洁易懂,让使用者能通过提示进行正确的操作;第五,通过汇编工具程序QSAM调试程序代码并运行,生成可执行.exe文件。2.3原理分析输入字符判断:1-7:存储并播放;退格(backspace):删除上一个存储字符;其他:P(play):播放所存储音乐;R(replay):重新播放所存储音乐;Q(quit):退出程序;音符存储及播放:建立一个总够大的数据存储空间,用于存储输入的有效字符,即1-7,在程序中定义为MUSdb200dup(0);根据音符频率对应表,找出1-7对应的频率,在本次设计中,使用的为中音1-7的频率,分别为2277,2138,1808,1709,1522,1356,1208,根据频率设计定时器初值,并交由子程序MUSIC播放。播放,重播及退出:播放:调用Bios的Deep子程序发声,并使用本程序中MUSIC播放,在程序中标号为PLAY重播:根据存储的数据,调用MUSIC子程序播放,在程序中标号为REPLAY退出:系统调用中断,退出程序,在程序中标号为QUIT系统原理图:有效字符存储并播放图2.3.1系统原理图本程序设计过程的整体设计思路是通过定义数据段,堆栈段和代码段实现程序的各种要求。其中堆栈段是为乐曲的音调及频率的数据分配空间;数据段是记录程序运行过程中所需的信息,包括字符信息,单调数据,音频数据;代码段则是程序算法部分,通过对各数据的调用,实现音乐演奏功能。

程序设计3.1程序流程图1.主程序流程图输入字符图3.1.1主程序流程图

2.MUSIC子程序流程图图3.1.2MUSIC子程序流程图3.2程序代码见 附程序调试及运行结果4.1程序的调试编辑源程序,假定源文件名为电子琴.asm。汇编源程序电子琴.asm。调用宏汇编程序QASM对源文件电子琴.asm进行汇编,生成目标文件电子琴.obj。若汇编无错误,则进入第三步。3..用连接命令LINK连接目标程序文件电子琴.obj。若连接成功,则进入下一止步。运行可执行文件电子琴.exe。debug调试的具体步骤:debug命令均为一个字母,其后可以跟一个或多个参数。命令中参数之间必须用分界符号隔开。命令和参数可以用大写或小写混合的方式输入,每个命令以回车键作结束符。在执行命令过程中,可以按ctrl+break来终止一个命令的执行,然后返回到debug提示符下。这里我用到了(显示内存单元内容的)D命令和(跟踪命令)T命令。在dos的提示符下,键入命令:c:\debugtypegame<enter>,在debug程序调入后,将出现提示符,此时就可用debug命令来调试程序。4.2运行结果图4.2.1初始界面截图

图4.2.2输入字符记录截图图4.2.3音乐播放完毕选项截图4.3结果分析输入字符1-7时,程序显示字符并存储字符,发出对应频率的音调;输入backspace时,程序清除上一个存储字符输入?,程序播放所有存储音符输入化程序再次播放所有存储音符输入。,退出程序达到设计要求,并且添加了删除已输入字符的功能,效果良好五・心得体会本次课程设计时间较为充足,虽然在前期走了一些弯路,但是找到目标之后,进度就非常快了。这次课程设计的任务是做一个可以在电脑上运行的简单电子琴程序,刚开始真是完全没有头绪,自己都想放弃了,然后我就去找了我们的指导老师达哥:李达老师,达哥对我们真是爱护有加,亦师亦友,他就对我说这个完全可以在电脑上实现,不要想得太复杂。经过仔细思考,我觉得肯定是自己的问题,原来发现自己在汇编语言上的学习漏洞真是太大了,加之用的是WIN864位系统,无法运行汇编程序。找到原因之后,我仔细查阅相关资料,加紧学习汇编知识,并利用VMware构建了一个XP的虚拟系统,用于汇编程序的编译,链接和运行,我选择QASM轻松汇编程序编译,比MASM要简单易用,实际效果还是很不错的,由于选择了正确的方法和工具,之后的工作就比较顺利了。在设计过程中,我不仅要感谢达哥,还要感谢室友,同学的帮助,我们互相讨论,不仅提高了知识和能力,还增进了相互之间的默契,真是皆大欢喜啊!当然,这次课程设计最重要的还是加深了对汇编语言的学习,之前的一些错误被同学指正,自我感觉提高和学习了不少,我想在今后的道路上必须加强实际的动手能力,多去编写一些程序,多和同学交流提升,我想这对我们是很有帮助的,我想这大概是我最大的收获了!六.参考文献郑人杰、殷人昆、陶永雷,《实用软件工程》,清华大学出版社,2001年9月沈美明、温冬蝉,《IBM-PC汇编语言程序设计》第2版,清华大学出版社,2001年8月沈美明、温冬蝉,《IBM-PC汇编语言程序设计例题习题集》,清华大学出版社,2001年8月陆忠华等,《汇编语言程序设计》,科学出版社,2000年9月迟成文、王保秀,《汇编语言程序设计》,中国科学技术大学出版社,2003年8月宋锦河,《汇编语言程序设计》,中国水利水电出版社,2003年9月杨季文,《80X86汇编语言程序设计教程》,清华大学出版社,2001年9月

附录程序代码:DATASEGMENTMSG1DB'Pleaseselectanitem:',10,13DB'1~7:entermusic',10,13DB'p:playthemusicyouenter',10,13DB'q:quit',10,13,'$'MSG2DB'themusicis:',10,13,'$'MSG3DB'pleaseselect:q:quitr:replay$'TABLDW2277,2138,1808,1709,1522,1356,1208对应中音1-7MUSDB200DUP(0);播放音符个数DATAENDSSTASEGMENTDB200DUP(0)STAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STASTART:MOVAX,DATAMOVDS,AXXORSI,SI;源变址XORDI,DI;目的变址MOVAH,9;字符串输出LEADX,MSG1;取MSG1偏移地址INT21HMOVAH,9LEADX,MSG2INT21HREWR:MOVAH,8INT21HCMPAL,'q';退出与否JEOUT1CMPAL,'p';播放己否JEPLAY“““““““““““““““““““““““““““““““・*******************************;CMPAL,8;处理退格JNE NEXT0MOV AH,2TOC\o"1-5"\h\zMOV DL,8INT 21HMOV DL,0INT 21HMOV DL,8INT 21HCMP SI,0JE NEXT1DEC SINEXT1:JMP REWR““““““““““““““““““““““““““““““““““““;************************************;NEXT0:;判断是否为数字1~7CMPAL,'1'JBNEXT;jumpbelowCMPAL,'7'JANEXT;jumpaboveJMPSOUND““““““““““““““““““““““““““““““““““““;************************************;NEXT:;输入错误报警MOVAH,2MOVDL,7;响铃INT21HJMPREWR““““““““““““““““““““““““““““““““““““・************************************;SOUND:;发声并存储音符MOVAH,2MOVDL,AL;显示输入字符INT21HMOVBYTEPTR[MUS+SI],AL ;将AL的内容填入MUS+SI字节中TOC\o"1-5"\h\zINCSI ;SI自减1CALL MUSICJMP REWR“““““““““““““““““““““““““““““““““““““““;***************************************;PLAY: ;播放存储的音符TOC\o"1-5"\h\zCMP DI,SIJE CHOMOV AL,BYTEPTR[MUS+DI]CALL MUSICINC DI

JMPPLAY“““““““““““““““““““““““““““““““““““““““““*****************************************CHO:;音乐播放完毕的选项MOVAH,2MOVDL,10INT21HMOVDL,13INT21HMOVAH,9LEADX,MSG3INT21HTOA:MOVAH,8INT21HCMPAL,'q'JEOUT1CMPAL,'r'JNEAGXORDI,DIJMPPLAYAG:MOVAH,2MOVDL,7INT21HJMPTOAOUT1:;系统调用中断,退出程序MOVAH,4CHINT21HMUSICPROCSUBAL,30H ;1~7的ASCII码转换为二进制数SUBAL,1 ;再减1,将按键数字1~7变为0〜6,以便查表XORAH,AHSHLAX,1 ;AX右移一位,乘以2,因为TABL单位为字,即双字节,地址只能加2的倍数MOVBX,AXINAL,61H ;打开扬声器声音ORAL,03H ;使D1D0=PB1PB0=11b,其

温馨提示

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

评论

0/150

提交评论