音乐演奏程序设计.docx
《音乐演奏程序设计.docx》由会员分享,可在线阅读,更多相关《音乐演奏程序设计.docx(24页珍藏版)》请在冰点文库上搜索。
音乐演奏程序设计
题目:
音乐演奏程序设计
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1.使用汇编语言设计一个在计算机上运行的音乐演奏程序。
2.屏幕显示钢琴图像。
3.实现以下附加功能:
按“D”键,加快播放速度,按“E”键,降低播放速度。
4.按"X"鍵,退出。
5.撰写课程设计说明书。
内容包括:
摘要、目录、正文、参考文献、附录(程序清单)。
正文部分包括:
设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。
时间安排:
12月30日-----12月31日查阅资料及方案设计
1月2日-----1月3日编程
1月6日调试程序
1月7日-----1月8日撰写课程设计报告
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
汇编语言(AssemblyLanguage)是面向机器的程序设计语言。
在汇编语言中,用助记符(Memoni)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址,如此就增强了程序的可读性并且降低了编写难度,象这样符号化的程序设计语言就是汇编语言,因此亦称为符号语言。
使用汇编语言编写的程序,机器不能直接识别,还要由汇编程序或者叫汇编语言编译器转换成机器指令。
因为用汇编语言设计的程序最终被转换成机器指令,故能够保持机器语言的一致性,直接、简捷,并能像机器指令一样访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
使用汇编语言,可以访问所有能够被访问的软、硬件资源。
使用的编译软件是masmforwindows,MASM是微软公司开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32asm,是Windows下开发汇编的利器。
它与Windows平台的磨合程度非常好,但是在其他平台上就有所限制,使用MASM的开发人员必须在Windows下进行开发。
关键词:
汇编语言、MASM、DOS环境
目录
1设计说明......................................................1
2程序设计......................................................1
2.1设计思路分析..............................................1
2.2程序设计流程图............................................1
2.3程序代码..................................................3
3程序的调试与编译..............................................9
3.1调试程序..................................................9
3.2运行程序.................................................10
4心得体会.....................................................12
参考文献.......................................................14
音乐演奏程序设计
1设计说明
所设计的系统使用了汇编语言设计一个在计算机上可运行的音乐演奏程序。
屏幕会显示显示一钢琴琴键的图像。
并且按“D”键,会加快音乐播放速度,按“E”键,会降低音乐播放速度。
如果按"X"鍵,则会退出音乐播放程序。
2程序设计
2.1设计思路分析
钢琴键盘的绘制这部分主要实现画钢琴键盘键身的功能。
它是由一个个白色的长方块构成的,我们需要用BIOS调用编织线使程序。
显示适配器都自带显示服务的BIOS,利用它所提供的BIOS调用来编写程序,对于我们编程应用者来说是透明的,我们只需要调用显示驱动程序INT10H。
钢琴主要是由矩形、直线等规则几何形状构成,可以采用文本方式,也将屏幕设置成图形显示方式,通过画点、画线等基本程序完成钢琴的绘制。
通过设定白键和黑键的起始坐标,来改黑、白键的长度和相对位置从而完成绘制。
加快播放速度与降低播放速度是在不同三个段A0、A1、A2定义播放速度变量RATE的不同值,按下A正常播放跳转到A,当要实现附加功能时按下D或者E的时候会相应跳转到A1、A2使得音乐以不同的速度播放,从而实现降低音乐播放速度或者提高音乐播放速度的功能。
2.2程序设计流程图
音乐模块流程图:
YN
N
NY
Y
Y
N
Y
N
Y
2.3程序代码
DATASEGMENT
FLAGDB1
RATEDW?
;播放速度变量
INFO1DB0DH,0AH,'WelcomeToMusic!
$'
INFO2DB0DH,0AH,'PleaseenterAtostartmusic!
$'
INFO3DB0DH,0AH,'OPTIONS:
$'
INFO4DB0DH,0AH,'WRONGORDER!
$'
INFO5DB0DH,0AH,'PLEASEINPUTAGAIN!
$'
MUSLISTDB0DH,0AH,'A:
START'
DB0DH,0AH,'X:
ESC'
DB0DH,0AH,'D:
HighSpeed'
DB0DH,0AH,'E:
LowSpeed'
DB0DH,0AH,'$';提示语
;音乐一------------------------------------------------------------
MUS_FREG1DW262,262,294,262,349
DW330,262,262,294,262
DW392,349,262,262,523
DW440,349,262,262,466
DW466,440,262,392,349,-1
MUS_TIME1DW50,50,100,100,100
DW100,100,50,50,100,100
DW100,100,100,50,50,100
DW100,100,100,100,100,50
DW50,100,100,100,100,100
DATAENDS
STACKSEGMENT
DB400DUP('STACK')
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
;主程序
MOVAH,0
MOVAL,12H;图形方式
INT10H
MOVAH,6
MOVBH,9;蓝色色背景
MOVAL,0;清屏
MOVCH,0
MOVCL,0
MOVDH,29
MOVDL,79
INT10H
MOVSI,200
MOVDX,400
REDRAW:
MOVDI,26
ADDDI,46
MOVCX,26
DECDX
CMPDX,SI
JBNEXT
MOVBL,0
PAINT:
MOVAH,0CH
MOVAL,7;印出点的颜色白色->AL,画白色琴键
MOVBH,0;页号
INT10H
INCCX
CMPCX,DI
JBEPAINT
ADDDI,74
ADDCX,28
INCBL
CMPBL,7
JBEPAINT
JMPREDRAW
NEXT:
MOVSI,200
MOVDX,300
REDRAW1:
MOVDI,63
ADDDI,46
MOVCX,63
DECDX
CMPDX,SI
JBLL
MOVBL,0
PAINT1:
MOVAL,0;印出点的颜色黑色->AL,画黑色琴键
MOVAH,0CH
MOVBH,0
JEJUMP
INT10H
JUMP:
INCCX
CMPCX,DI
JBEPAINT1
ADDDI,74
ADDCX,28
INCBL
CMPBL,7
JBEPAINT1
JMPREDRAW1
LL:
MOVAX,DATA
MOVDS,AX
CALLMUSIC_PLAY;音乐播放子程序
MUSIC_PLAYPROC
SHOWMACROb;定义一个宏显示字符串
LEADX,b
MOVAH,9
INT21H
ENDM
ADDRESSMACROA,B;音乐地址宏
LEASI,A
LEABP,DS:
B
ENDM
SHOWINFO1
SHOWINFO2
SHOWINFO3
SHOWMUSLIST;提示语
INPUT:
MOVAH,01H
INT21H
CMPAL,'X'
JZRETU;按下为‘X’则退出dos
CMPAL,'A';按下为‘A’则播放音乐
JZA0;是则跳到A0
SHOWINFO4
SHOWINFO5
JMPINPUT;否则提示输入错误,重新开始
CMPAL,'E';按下为‘E’则减速播放音乐
JZA1;是则跳到A1
CMPAL,'D';按下为‘D’则加速播放音乐
JZA2;是则跳到A2
A0:
ADDRESSMUS_FREG1,MUS_TIME1
MOVRATE,4000;设置正常播放速度
CALLMUSIC
JMPINPUT
A1:
ADDRESSMUS_FREG1,MUS_TIME1
MOVRATE,10000;设置减慢播放速度
CALLMUSIC
JMPINPUT
A2:
ADDRESSMUS_FREG1,MUS_TIME1
MOVRATE,1000;设置加快播放速度
CALLMUSIC
JMPINPUT
RETU:
MOVAH,4CH
INT21H
AGAIN:
SHOWINFO5
JMPINPUT
EXIT:
ADDRESSMUS_FREG1,MUS_TIME1
MOVRATE,4000;设置正常播放速度
CALLMUSIC
JMPAGAIN
JMPINPUT
RET
MUSIC_PLAYENDP
;发声
GENSOUNDPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI
MOVAL,0B6H;开扬声器
OUT43H,AL
MOVDX,12H
MOVAX,348CH
DIVDI
OUT42H,AL
MOVAL,AH
OUT42H,AL
INAL,61H
MOVAH,AL
ORAL,3
OUT61H,AL
WAIT1:
MOVCX,RATE;设置播放速度
CALLWAITF
DELAY1:
DECBX
JNZWAIT1
MOVAL,AH
OUT61H,AL
POPDI
POPDX
POPCX
POPBX
POPAX
RET
GENSOUNDENDP
WAITFPROCNEAR
PUSHAX
WAITF1:
INAL,61H
ANDAL,10H
CMPAL,AH
JEWAITF1
MOVAH,AL
LOOPWAITF1
POPAX
RET
WAITFENDP
MUSICPROCNEAR
PUSHDS
SUBAX,AX
PUSHAX
FREG:
MOVDI,[SI];获取频率值
CMPDI,-1;音乐播放结束判断
JEEND_MUS
MOVBX,DS:
[BP]
CALLGENSOUND;播放一个频率
ADDSI,2
ADDBP,2;获取下一频率值,及其播放时间
MOVAH,0BH;判断键盘是否有键按下
INT21H
CMPAL,0FFH
JEINT9;有键按下则转去执行该指令
JMPFREG;无键按下则继续读取下一个频率值
END_MUS:
RET
INT9:
PUSHF
PUSHAX
PUSHDS
PUSHES
PUSHCS
POPDS
PUSHCS
POPES
INAL,60H;从键盘获取该键值ASCII码
MOVAH,01H
INT21H;读取并保存到AL中
CMPAL,'X';若为‘X’则退出dos操作界面
JZX0
CMPAL,'D'
JZA2
CMPAL,'E'
JZA1
;否则提示输入错误,重新开始
INT9_QUIT:
POPES
POPDS
POPAX
POPF
JMPFREG
A1:
POPES
POPDS
POPAX
POPF
ADDRESSMUS_FREG1,MUS_TIME1
MOVRATE,10000;设置减慢播放速度
CALLMUSIC
JMPINPUT
A2:
POPES
POPDS
POPAX
POPF
ADDRESSMUS_FREG1,MUS_TIME1
MOVRATE,1000;设置加快播放速度
CALLMUSIC
JMPINPUT
INPUT:
MOVAH,01H
INT21H
CMPAL,'X'
JZRETU;按下为‘X’则退出dos
SHOWINFO4
SHOWINFO5
JMPINPUT;否则提示输入错误,重新开始
X0:
POPES
POPDS
POPAX
POPF
JMPRETU
RETU:
MOVAH,4CH
INT21H
MUSICENDP
CODEENDS
ENDSTART
3程序的调试与运行
3.1调试程序
调试过程与编写程序的过程紧密相关,具体过程也就是把源程序放在MASMforWindows中进行编译,如果源程序中有错误,编译时系统就会给出提示,根据系统提示可以找到是哪一行出现了问题,对其进行分析并修改,重新编译,直到编译时系统对那一行没有给出提示为止。
如果系统提示源程序中存在多条错误,就按照上述方法逐条进行修改,直到系统提示编译成功。
在调试过程中,出现了很多问题,对源程序进行编译调试过程中,画钢琴界面的那一块程序错误比较多。
还有一块难点是最终主程序对各个子程序的调用,常常因为很多细节问题而导致子程序无法正常的嵌入。
在编译、调试程序的过程中程序出现错误是不可避免的,有的是一种原因引起的简单错误,有的是多个子程序相互作用引起的复杂错误,因此需要掌握错误的一般诊断方法,故障诊断过程就是以错误现象出发,通过反复测试,做出分析判断,逐步找出错误所在并修改的过程。
当源程序大致编好且没有错误后,需要对它进行修改和完善。
最后运行程序,就可以得到与任务书中要求的音乐播放功能。
3.2运行程序
程序运行的截图:
开始界面:
图3-1
运行开始后显示钢琴界面,并显示提示语言。
播放界面:
图3-2
按下“A”后,开始正常播放音乐。
按下D会加快音乐播放速度,按下E会减慢音乐播放速度。
输入错误界面:
图3-3
开始时如果输入的不是“A”,则提示输入错误,要求重新输入。
4心得体会
此次课程设计的题目对我来说并不简单,由于汇编知识的匮乏,在面对设计题目的时候完全毫无思路,后来通过仔细审题、通过网络查找相关程序资料然后与同组同学交流讨论设计思路以及程序编写逐步明晰了设计的思路。
尽管这一周的课程设计时间是短暂并且困难重重的,但是我还是和队友们团结合作,一起克服困难,努力去完成课程设计。
我们在解决困难的过程中有很多自己的感受,我们在一边查找资料一边学习、交流的过程中,逐渐通过自己的努力解决了一个一个问题。
这个过程中我们逐渐体会到汇编语言的神奇之处,虽然我们解决的问题尚且是简单的问题,但是这个过程中解决问题的方法是让人获益匪浅的,并且我们学会了很多关于汇编的实际操作知识。
其次,我更加深刻的体会到自主学习在课程设计中的关键作用。
在遇到问题的时候,只有先积极思考,查找资料,遇到瓶颈与同学交流。
记得编写子程序的时候在编译的时候总是出现问题,嵌套不匹配等。
后来通过检查发现原来都是比较细节的地方出现了问题。
通过这个发现,使我意识到在编写程序代码的过程中必须时刻保持清醒的头脑,专心致志的输入代码,切忌细小的地方出现差错。
再者,同时也了解到上机操作实践的重要,这样有助于书本知识的系统化,现实化,更有利于自己的查漏补缺。
书本上的知识是死的,能够在现实中运用的知识才是活的。
通过这次课程设计,也促进了我们的同学之间互相学习,通过编写程序,增加了学习的积极性和趣味性。
通过实际解决问题,巩固加深了对课堂教学内容的理解,提高了我们运用汇编语言进行程序设计和动态调试程序的能力,培养了我们克服困难的毅力和精神,提高了综合解决问题的能力。
参考文献
[1]《微机原理与接口技术》.周佩玲,彭虎傅,忠谦.电子工业出版社.2007
[2]《微机原理及应用技术(第二版)》.朱金均,麻新旗.机械工业出版社.2005
[3]《汇编语言(第2版)》.王爽.清华大学出版社.2008
[4]《微型计算机原理及应用》.清华大学出版社,谭浩强,2001年
[5]《微型计算机技术及应用》.清华大学出版社,戴梅萼,史嘉权,2003年
本科生课程设计成绩评定表
姓名
王琨
性别
男
专业、班级
自动化专业自动化1105
课程设计题目:
音乐演奏程序设计
课程设计答辩或质疑记录:
1怎么实现音乐播放程序提高和降低播放音乐的速度的功能?
答:
通过定义变量RATE,并在子程序中分别定义三个段A0、A1、A2,在其中分别赋值RATE为4000,,1000,10000。
通过JZ命令,判断输入若为A则跳转到A0段执行的是正常播放速度,若输入是D则跳转到A1执行加快播放速度,若是输入E则跳转到A2执行减慢播放速度。
从而实现功能。
2钢琴键盘琴键的长度以及位置是怎么确定的?
答:
通过定义琴键的起始坐标,而后通过MOVSI与MOVDX分别设置白键的上方的边、下方的边的坐标,从而改变白键的长度。
上面的边的坐标决定白键的位置。
黑键也是同样的道理。
成绩评定依据:
评定项目
评分成绩
1.选题合理、目的明确(10分)
2.设计方案正确,具有可行性、创新性(20分)
3.设计结果(例如:
硬件成果、软件程序)(20分)
4.态度认真、学习刻苦、遵守纪律(15分)
5.设计报告的规范化、参考文献充分(不少于5篇)(10分)
6.答辩(25分)
总分
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
年月日
........忽略此处.......