微机课设报告 打字游戏汇编语言的设计Word下载.docx
《微机课设报告 打字游戏汇编语言的设计Word下载.docx》由会员分享,可在线阅读,更多相关《微机课设报告 打字游戏汇编语言的设计Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
1、音乐播放选择
从键盘上输入“1”,则播放“新年好”;
从键盘上输入“q”,则退出;
从键盘上输入其它字符,则等待重新输入。
2、电子琴演奏界面
音符的频率表
音名
q
w
e
r
t
y
u
a
s
d
f
g
h
j
音符
1
2
3
4
5
6
7
频率
131
147
165
175
196
220
247
262
294
330
349
392
440
494
z
x
c
v
b
n
m
523
587
659
698
784
880
988
1046
1175
1318
1397
1568
1760
1975
通过Tn来设时间值,然后通过发声程序play1来播放音乐。
通过键盘控制扬声器发出各种音符声音,使计算机键盘变成钢琴键盘,这是可以用它来演奏各种简单的声音。
弹奏时对应乐谱上的q音符,按下1,程序将接收到的1键的频率为262Hz送入play2程序中。
(二)流程图
三、程序源代码
;
数据段定义
datasegment;
数据定义段
assumeds:
data;
建立数据段寄存器寻址
msg_1db'
<
---Welcome--->
>
$'
0dh,0ah;
定义字节
msg_2db0dh,0ah,'
Hereyoucanpressbelowkeystoenjoymusic:
$'
msg_3db0dh,0ah,'
SuperLL:
q-w-e-r-t-y-u$'
msg_4db0dh,0ah,'
LM:
a-s-d-f-g-h-j$'
msg_5db0dh,0ah,'
MM:
z-x-c-v-b-n-m$'
msg_6db0dh,0ah,'
HM:
1-2-3-4-5-6-7$'
msg_7db0dh,0ah,'
Youcanpress'
'
Esc'
toexit.$'
msg_8db0dh,0ah,'
*'
toplaymusic!
msg_9db0dh,0ah,'
Press1youcanplaymusic'
xinnianhao'
msg_10db0dh,0ah,'
Press"
q"
exit"
*"
msg_21db0dh,0ah,'
note_tdw131,147,165,175,196,220,247;
重低音
dw262,294,330,349,392,440,494;
低音
dw523,587,659,698,784,880,988;
中音
dw1046,1175,1318,1397,1568,1760,1975;
高音
dw0;
休止符0
'
1'
'
2'
3'
4'
5'
6'
7'
;
从低到高
key_tdb'
q'
w'
e'
r'
t'
y'
u'
重低音
db'
a'
s'
d'
f'
g'
h'
j'
z'
x'
c'
v'
b'
n'
m'
0'
xinnianhao
music_n1db'
0
music_d1db4,4,8,8,4,4,8,8,4,4,8,8,4,4,16,4,4
db8,8,4,4,8,8,4,4,8,8,4,4,32
jiepaidb?
;
节拍变量定义
speeddb2;
播放速度控制
jiangedb1;
音符间隔停顿时间
dataends;
数据定义段结束
/*-------------------------------------------------------------------------------------------*/
代码段定义
codesegment;
代码定义段
assumecs:
code;
建立代码段寄存器寻址
字符显示
showmacrostr;
宏定义,输入参数:
字符串str
leadx,str;
装入str的有效地址
movah,09h;
调用中断21,09h显示字符串
int21h
endm;
宏定义结束
主函数
mainprocfar;
主函数过程定义
movax,data;
取数据段地址
movds,ax;
装载数据段寄存器ds,使之指向当前数据段
showmsg_21
showmsg_1;
调用宏,显示字符串
showmsg_2
showmsg_3
showmsg_4
showmsg_5
showmsg_6
showmsg_7
showmsg_8
movbx,0;
设定查表数组下标初值
按键扫描
key_scan:
moval,6
movjiepai,al;
初始化节拍
movbx,0000h;
初始化指针
movah,00h;
利用bios的16号中断,扫描键盘按键
int16h;
AL中返回按键的ASCII码
cmpal,1bh;
判断是否为Esc键
jzexit;
是退出键就退出
cmpal,'
判断是否为p键
jzplay;
是p键就playmusic
lookup:
cmpkey_t[bx],al;
取出对应频率值
jenext
incbx;
指针+1
jmplookup
next:
shlbx,1;
指针×
2,计算频率表指针
movcx,note_t[bx];
取得对应数组下标值的频率值
callbeep;
调用固定频率子程序
jmpkey_scan;
否则继续扫描
/*-------------------------------------------------------------------------------------------*/
exit:
;
退出
movah,4ch;
调用中断21,4ch退出系统
int21h
音乐播放菜单
play:
showmsg_9
showmsg_10
input:
int16h;
判断是否为Enter键
jzstart;
是'
键就退到主菜单
;
判断是否为数字1
jznext6;
键就播放相对应的歌曲
jmpinput;
否则继续扫描按键
next6:
callplay_m1
start:
callmain
音乐播放程序1
play_m1procnear
next5:
movbx,0
next3:
moval,music_n1[bx];
取出music频率值
pushax
moval,music_d1[bx];
取出music节拍
movjiepai,al
popax
cmpal,0;
是否为音乐结束标志符
jeinput;
是则退出play
pushbx;
保存bx,bx为music频率指针
look1:
查表取出对应频率值的指针bx
jenext1;
找到就beep
incbx;
andbx,0ffh
jmplook1;
未找到则继续查找
next1:
shlbx,1;
cmpcx,0
jenext4
callbeep;
调用固定频率子程序
callpause;
调用停顿时间
popbx;
获得music指针
继续取得下一个音符
jmpnext3
next4:
callnobeep
callpause;
popbx;
继续取得下一个音符
jmpnext3
play_m1endp
mainendp;
主函数过程结束
固定频率响
beepprocnear
movdx,0012h
movax,34dch
divcx;
ax为所得分频值
out42h,al;
输出频率值,低8位
moval,ah
输出频率值,高8位
callspk_on;
开启蜂鸣器
movah,00h;
取时钟计数值
int1ah
moval,jiepai;
18.2次为1000ms,2次约为100ms
addal,speed
cbw;
al值转为16位ax
addax,dx;
加上当前时钟计数值,得到计数终值
movbx,ax;
计数终值置入bx
delay1:
movah,00h
int1ah;
cmpbx,dx;
到终值吗?
jnzdelay1;
未到,继续延时
callspk_off;
关闭蜂鸣器
ret
beependp
nobeepprocnear
callspk_off;
movah,00h;
cbw;
addax,dx;
movbx,ax;
delay2:
cmpbx,dx;
jnzdelay2;
nobeependp
pauseprocnear
moval,jiange;
delay3:
jnzdelay3;
pauseendp
spk_onprocnear
pushax;
保存ax的值
inal,61h;
获取61h端口的当前值
oral,03h;
把61h端口低二位置1,即打开蜂鸣器
out61h,al;
输出数据到61h端口
popax;
恢复ax的值
spk_onendp
spk_offprocnear
保存ax的值
inal,61h;
获取61h端口的当前值
andal,0fch;
把61h端口低二位置0,即关闭蜂鸣器
popax;
spk_offendp
codeends;
代码段结束
endmain;
主程序结束
四、调试过程,运行结果和出现的问题及解决。
1、调试结果(见下图)
2、在调试中碰到问题
(1)源程序出现了语法错误,导致编译的时候不能顺利地通过,也不能产生obj和exe文件。
(2)可执行文件的图面大小总是满屏,经过对程序的修改,最终实现了小界面的形式。
(3)出现音乐不符现象,是连接错误。
五、课程设计心得
书本知识不经过实践永远只能是纸上谈兵,通过几天的学习,反复的核对书本知识,结合实际的对程序的调试,从而加强对微机原理的了解,使我认识到,只有落实到具体的动手操作,并把书本知识和实际问题结合,才能真正的提高自己的能力。
几天的课程设计,不仅学习了微机原理这门课,也印证了在其他科目上学习到的知识,比如单片机课程中学习到得东西,与微机原理相比,有很多的共通点,也有很多的差异,学习的过程,不仅仅是为了课程设计,同时还迷上了这门课,在一堆码中找到解决问题的真谛,学习到得,不仅仅是课程设计可以体现的。
在设计的过程中,遇到了很多的问题,翻书都不能解决,通过幻灯片回忆鲍老师讲课的过程,很多东西都能浮现,在实验课上鲍老师给的讲解也给了我很多的帮助,希望以后会有更多像鲍老师一样讲课的老师,能让我学的轻松。
还有很多的不解关于微机原理,这门课虽然结束了,但是这们技术甚至于艺术,在以后的人生还会出现,当下次考验来临的时候,我希望自己可以做的比这次好。
六、成绩单
电子与信息工程系课程设计成绩单
课程名称:
指导教师:
姓名
性别
学号
综合成绩
成绩等级
程序运行情况
(占总成绩20%)
□能正确运行□基本能正确运行□能运行但结果不完善
(20分)(15分)(10分)
程序功能的完善程度
(占总成绩10%)
□完善□基本完善□不完善
(10分)(8分)(5分)
程序结构的合理性
□合理□基本合理□不太合理
对问题的答辩情况
(占总成绩40%)
□概念正确有创新□能正确回答所有问题□基本能正确回答
(40分)(35分)(30分)
□部分问题回答概念不清晰
(20分)
学生的工作态度与独立工作能力
□工作态度认真能独立完成任务□工作态度认真但独立性较差
(10分)(8分)
□工作态度基本认真但缺乏独立性
(5分)
设计报告的规范性
□符合规范□基本符合规范□规范性较差
优秀:
90分~100分良好:
80分~89分中等:
70~79分及格:
60~69分不及格0分~59分
电子与信息工程系计算机与信息技术实验中心制表