音乐演奏程序设计_第1页
音乐演奏程序设计_第2页
音乐演奏程序设计_第3页
音乐演奏程序设计_第4页
音乐演奏程序设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、武汉理工大学微机原理与接口技术课程设计说明书课程设计任务书学生姓名: 王琨 专业班级: 自动化1105班 指导教师: 向 馗 工作单位: 自动化学院 题 目: 音乐演奏程序设计要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1使用汇编语言设计一个在计算机上运行的音乐演奏程序。2屏幕显示钢琴图像。3实现以下附加功能:按“D”键,加快播放速度,按“E”键,降低播放速度。4. 按"X"鍵,退出。5撰写课程设计说明书。内容包括:摘要、目录、正文、参考文献、附录(程序清单)。正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,

2、源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。时间安排: 12月30日-12月31日 查阅资料及方案设计1月2日-1月3日 编程1月6日 调试程序1月7日-1月8日 撰写课程设计报告指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日 摘 要汇编语言(Assembly Language)是面向机器的程序设计语言。在汇编语言中,用助记符(Memoni)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址,如此就增强了程序的可读性并且降低了编写难度,象这样符号化的程序设计语言就是汇编语言,因此亦称为符号语言。使用汇编语言编写

3、的程序,机器不能直接识别,还要由汇编程序或者叫汇编语言编译器转换成机器指令。因为用汇编语言设计的程序最终被转换成机器指令,故能够保持机器语言的一致性,直接、简捷,并能像机器指令一样访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。使用汇编语言,可以访问所有能够被访问的软、硬件资源。使用的编译软件是masm for windows , MASM是微软公司开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32asm,是Windows下开发汇编的利器。它与Windows平台的磨合程度非常好,但是在其他平

4、台上就有所限制,使用MASM的开发人员必须在Windows下进行开发。关键词: 汇编语言、MASM、DOS环境 目 录 1设计说明.12程序设计.1 2.1设计思路分析.1 2.2程序设计流程图.1 2.3程序代码.33程序的调试与编译.9 3.1调试程序.9 3.2 运行程序.104心得体会.12参考文献.14 音乐演奏程序设计1设计说明所设计的系统使用了汇编语言设计一个在计算机上可运行的音乐演奏程序。屏幕会显示显示一钢琴琴键的图像。并且按“D”键,会加快音乐播放速度,按“E”键,会降低音乐播放速度。如果按"X"鍵,则会退出音乐播放程序。2程序设计2.1设计思路分析钢琴键

5、盘的绘制这部分主要实现画钢琴键盘键身的功能。它是由一个个白色的长方块构成的,我们需要用BIOS调用编织线使程序。显示适配器都自带显示服务的BIOS,利用它所提供的BIOS调用来编写程序,对于我们编程应用者来说是透明的,我们只需要调用显示驱动程序INT 10H。钢琴主要是由矩形、直线等规则几何形状构成,可以采用文本方式,也将屏幕设置成图形显示方式,通过画点、画线等基本程序完成钢琴的绘制。通过设定白键和黑键的起始坐标,来改黑、白键的长度和相对位置从而完成绘制。加快播放速度与降低播放速度是在不同三个段A0、A1、A2定义播放速度变量RATE的不同值,按下A正常播放跳转到A,当要实现附加功能时按下D或

6、者E的时候会相应跳转到A1、A2使得音乐以不同的速度播放,从而实现降低音乐播放速度或者提高音乐播放速度的功能。2.2程序设计流程图音乐模块流程图: 开始读取音乐段首地址,设置FLAG值错误提示按下X? Y N按下其他键?按下A? N N Y Y 从第一个频率地址开始播放音乐 调用宏ADDRESS读取下一个频率地址按下了X? Y N跳到给定义的播放速率变量赋加快速率的值的段按下了D? Y 跳到给定义的播放速率变量赋加低速率的值的段按下了E? N Y继续播放音乐直到检测到-1,播放结束退出DOS操作界面2.3程序代码DATA SEGMENT FLAG DB 1 RATE DW ? ;播放速度变量

7、INFO1 DB 0DH,0AH,'Welcome To Music!$' INFO2 DB 0DH,0AH,'Please enter A to start music!$' INFO3 DB 0DH,0AH,'OPTIONS:$' INFO4 DB 0DH,0AH,'WRONG ORDER!$' INFO5 DB 0DH,0AH,'PLEASE INPUT AGAIN!$' MUSLIST DB 0DH,0AH,'A: START' DB 0DH,0AH,'X: ESC' DB

8、0DH,0AH,'D: High Speed' DB 0DH,0AH,'E: Low Speed' DB 0DH,0AH,'$' ;提示语;音乐一-MUS_FREG1 DW 262,262,294,262,349 DW 330,262,262,294,262 DW 392,349,262,262,523 DW 440,349,262,262,466 DW 466,440,262,392,349,-1MUS_TIME1 DW 50,50,100,100,100 DW 100,100,50,50,100,100 DW 100,100,100,50,5

9、0,100 DW 100,100,100,100,100,50 DW 50,100,100,100,100,100 DATA ENDSSTACK SEGMENT DB 400 DUP ('STACK')STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: ;主程序 MOV AH,0 MOV AL,12H;图形方式 INT 10H MOV AH,6 MOV BH,9;蓝色色背景 MOV AL,0;清屏 MOV CH,0 MOV CL,0 MOV DH,29 MOV DL,79 INT 10H MOV SI,200

10、 MOV DX,400REDRAW: MOV DI,26 ADD DI,46 MOV CX,26 DEC DX CMP DX,SI JB NEXT MOV BL,0PAINT: MOV AH,0CH MOV AL,7;印出点的颜色白色AL,画白色琴键 MOV BH,0;页号 INT 10H INC CX CMP CX,DI JBE PAINT ADD DI,74 ADD CX,28 INC BL CMP BL,7 JBE PAINT JMP REDRAWNEXT: MOV SI,200 MOV DX,300REDRAW1: MOV DI,63 ADD DI,46 MOV CX,63 DEC D

11、X CMP DX,SI JB LL MOV BL,0PAINT1: MOV AL,0;印出点的颜色黑色AL,画黑色琴键 MOV AH,0CH MOV BH,0 JE JUMP INT 10HJUMP: INC CX CMP CX,DI JBE PAINT1 ADD DI,74 ADD CX,28 INC BL CMP BL,7 JBE PAINT1 JMP REDRAW1LL: MOV AX,DATA MOV DS,AX CALL MUSIC_PLAY ; 音乐播放子程序 MUSIC_PLAY PROC SHOW MACRO b ;定义一个宏显示字符串 LEA DX,b MOV AH,9 IN

12、T 21HENDM ADDRESS MACRO A,B ;音乐地址宏 LEA SI,A LEA BP,DS:BENDM SHOW INFO1 SHOW INFO2 SHOW INFO3 SHOW MUSLIST ;提示语INPUT: MOV AH,01H INT 21H CMP AL,'X' JZ RETU ;按下为X则退出dos CMP AL,'A' ;按下为A则播放音乐 JZ A0 ;是则跳到A0 SHOW INFO4 SHOW INFO5 JMP INPUT ;否则提示输入错误,重新开始 CMP AL,'E' ;按下为E则减速播放音乐 JZ

13、 A1 ;是则跳到A1 CMP AL,'D' ;按下为D则加速播放音乐 JZ A2 ;是则跳到A2A0: ADDRESS MUS_FREG1,MUS_TIME1MOV RATE,4000 ;设置正常播放速度 CALL MUSIC JMP INPUT A1: ADDRESS MUS_FREG1,MUS_TIME1MOV RATE,10000 ;设置减慢播放速度 CALL MUSIC JMP INPUT A2: ADDRESS MUS_FREG1,MUS_TIME1MOV RATE,1000 ;设置加快播放速度 CALL MUSIC JMP INPUT RETU: MOV AH,4

14、CHINT 21HAGAIN: SHOW INFO5 JMP INPUTEXIT: ADDRESS MUS_FREG1,MUS_TIME1MOV RATE,4000 ;设置正常播放速度 CALL MUSIC JMP AGAIN JMP INPUT RETMUSIC_PLAY ENDP;发声GENSOUND PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AL,0B6H ;开扬声器 OUT 43H,AL MOV DX,12H MOV AX,348CH DIV DI OUT 42H,AL MOV AL,AH OUT 42H,AL IN A

15、L,61H MOV AH,AL OR AL,3 OUT 61H,ALWAIT1: MOV CX,RATE ;设置播放速度 CALL WAITFDELAY1: DEC BX JNZ WAIT1 MOV AL,AH OUT 61H,AL POP DI POP DX POP CX POP BX POP AX RETGENSOUND ENDPWAITF PROC NEAR PUSH AXWAITF1: IN AL,61H AND AL,10H CMP AL,AH JE WAITF1 MOV AH,AL LOOP WAITF1 POP AX RETWAITF ENDPMUSIC PROC NEAR PU

16、SH DS SUB AX,AX PUSH AXFREG: MOV DI,SI ;获取频率值 CMP DI,-1 ;音乐播放结束判断 JE END_MUS MOV BX,DS:BP CALL GENSOUND ;播放一个频率 ADD SI,2 ADD BP,2 ;获取下一频率值,及其播放时间 MOV AH,0BH ;判断键盘是否有键按下 INT 21H CMP AL,0FFH JE INT9 ;有键按下则转去执行该指令 JMP FREG ;无键按下则继续读取下一个频率值END_MUS: RETINT9: PUSHF PUSH AX PUSH DS PUSH ES PUSH CS POP DS P

17、USH CS POP ES IN AL,60H ;从键盘获取该键值ASCII码 MOV AH,01H INT 21H ;读取并保存到AL中 CMP AL,'X' ;若为X则退出dos操作界面 JZ X0 CMP AL,'D' JZ A2 CMP AL,'E' JZ A1 ;否则提示输入错误,重新开始INT9_QUIT: POP ES POP DS POP AX POPF JMP FREG A1: POP ES POP DS POP AX POPF ADDRESS MUS_FREG1,MUS_TIME1 MOV RATE,10000 ;设置减慢播放

18、速度 CALL MUSIC JMP INPUTA2: POP ES POP DS POP AX POPF ADDRESS MUS_FREG1,MUS_TIME1 MOV RATE,1000 ;设置加快播放速度 CALL MUSIC JMP INPUTINPUT: MOV AH,01H INT 21H CMP AL,'X' JZ RETU ;按下为X则退出dos SHOW INFO4 SHOW INFO5 JMP INPUT ;否则提示输入错误,重新开始X0: POP ES POP DS POP AX POPF JMP RETURETU: MOV AH,4CHINT 21HMUS

19、IC ENDP CODE ENDSEND START3程序的调试与运行3.1调试程序调试过程与编写程序的过程紧密相关,具体过程也就是把源程序放在MASM for Windows中进行编译,如果源程序中有错误,编译时系统就会给出提示,根据系统提示可以找到是哪一行出现了问题,对其进行分析并修改,重新编译,直到编译时系统对那一行没有给出提示为止。如果系统提示源程序中存在多条错误,就按照上述方法逐条进行修改,直到系统提示编译成功。在调试过程中,出现了很多问题,对源程序进行编译调试过程中,画钢琴界面的那一块程序错误比较多。还有一块难点是最终主程序对各个子程序的调用,常常因为很多细节问题而导致子程序无法正

20、常的嵌入。在编译、调试程序的过程中程序出现错误是不可避免的,有的是一种原因引起的简单错误,有的是多个子程序相互作用引起的复杂错误,因此需要掌握错误的一般诊断方法,故障诊断过程就是以错误现象出发,通过反复测试,做出分析判断,逐步找出错误所在并修改的过程。当源程序大致编好且没有错误后,需要对它进行修改和完善。最后运行程序,就可以得到与任务书中要求的音乐播放功能。3.2运行程序程序运行的截图:开始界面: 图3-1运行开始后显示钢琴界面,并显示提示语言。播放界面: 图3-2按下“A”后,开始正常播放音乐。按下D会加快音乐播放速度,按下E会减慢音乐播放速度。输入错误界面: 图3-3开始时如果输入的不是“

21、A”,则提示输入错误,要求重新输入。4心得体会此次课程设计的题目对我来说并不简单,由于汇编知识的匮乏,在面对设计题目的时候完全毫无思路,后来通过仔细审题、通过网络查找相关程序资料然后与同组同学交流讨论设计思路以及程序编写逐步明晰了设计的思路。尽管这一周的课程设计时间是短暂并且困难重重的,但是我还是和队友们团结合作,一起克服困难,努力去完成课程设计。我们在解决困难的过程中有很多自己的感受,我们在一边查找资料一边学习、交流的过程中,逐渐通过自己的努力解决了一个一个问题。这个过程中我们逐渐体会到汇编语言的神奇之处,虽然我们解决的问题尚且是简单的问题,但是这个过程中解决问题的方法是让人获益匪浅的,并且

22、我们学会了很多关于汇编的实际操作知识。其次,我更加深刻的体会到自主学习在课程设计中的关键作用。在遇到问题的时候,只有先积极思考,查找资料,遇到瓶颈与同学交流。记得编写子程序的时候在编译的时候总是出现问题,嵌套不匹配等。后来通过检查发现原来都是比较细节的地方出现了问题。通过这个发现,使我意识到在编写程序代码的过程中必须时刻保持清醒的头脑,专心致志的输入代码,切忌细小的地方出现差错。再者,同时也了解到上机操作实践的重要,这样有助于书本知识的系统化,现实化,更有利于自己的查漏补缺。书本上的知识是死的,能够在现实中运用的知识才是活的。通过这次课程设计,也促进了我们的同学之间互相学习,通过编写程序,增加了学习的积极性和趣味性。通过实际解决问题,巩固加深了对课堂教学内容的理解,提高了我们运用汇编语言进行程序设计和动态调试

温馨提示

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

评论

0/150

提交评论