汽车动画程序设计微机课程设计说明书Word格式文档下载.docx
- 文档编号:18330889
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:27
- 大小:66.15KB
汽车动画程序设计微机课程设计说明书Word格式文档下载.docx
《汽车动画程序设计微机课程设计说明书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《汽车动画程序设计微机课程设计说明书Word格式文档下载.docx(27页珍藏版)》请在冰豆网上搜索。
芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图
时间安排:
12月3日~12月6日:
收集资料,方案选择
12月7日~12月19日:
整体流程,程序细节,调试程序
12月21日~12月30日:
课程设计报告撰写
1月4:
交报告,程序演示,答辩
指导教师签名:
年月日
系主任(或责任教师)签名:
目录
摘要1
1主程序的编程思路2
2主程序流程框图2
3各子程序编程思想与流程框图3
3.1.1CLEAR_SCREEN编程思想3
3.1.2CLEAR_SCREEN流程框图3
3.2子程序XIANSHIQICHE4
3.2.1XIANSHIQICHE编程思想4
3.2.2XIANSHIQICHE流程框图5
3.3子程序MOVE_SHAPE7
3.3.1子程序编程思想7
3.3.2子程序流程框图8
3.4子程序ERASE11
3.4.1子程序编程思想11
3.4.2子程序流程框图11
3.5子程序DLY_QRTR12
3.5.1子程序编程思想12
3.5.2子程序流程框图12
3.6子程序HORN13
3.6.1子程序编程思想13
3.6.2子程序流程框图14
4调试记录与结果分析15
参考文献16
本科生课程设计成绩评定表17
摘要
随着计算机的快速发展,用汇编语言来实现动画更简单,直接和便捷,它的目标代码简短,占用内存较少,执行速度较快,是高效的程序设计语言。
本次课程设计的题目是编写一个汽车动画设计程序,并通过汇编集成软件进行编译调试运行,通过在键盘上输入不同的字母PBQS对程序的控制,采用段内调用子程序的方法来实现,使用了堆栈技术和中断技术,其中DOS/BIOS调用是整个程序设计的核心,本次试验主要应用了DOS调用的8号功能用于键盘输入和0BH功能用于检查是否有键盘输入;
BIOS调用则应用了屏幕显示INT10H的各项功能,用于将汽车图形显示在屏幕上。
本次课程设计实现四项功能:
分别是显示汽车从屏幕由左向右驶过的程序,按P暂停,按S起动,按B喇叭发声。
在课程设计任务书的基础上,进一步加入一项功能,即在屏幕上显示该汽车动画程序的操作说明,我认为这对程序本身的完整性来说是个很好的补充。
与此同时,本文将详细说明该汇编源程序的基本原理解析。
关键词:
DOS/BIOS调用;
子程序调用;
键盘输入;
图像显示
1主程序的编程思路
此程序四项功能:
考虑该动画程序的实际含义,运行程序后,屏幕上应当在合适的位置显示汽车的图形,该位置作为动画的起始位置。
本程序设计时,首先通过调用一个子程序CLEAR_SCREEN,该子程序实现DOS调用的清屏功能初始化窗口,然后调用一个子程序XIANSHIQINCHE,该子程序设计在(10,0)处即屏幕的10行0列处依次显示汽车图形,同时,设计在屏幕的3到6行显示该程序的操作说明。
之后设置一个调用的8好功能,在键盘上输入四个不同的命令字母,通过CMP指令将AL寄存器与各个命令字母字符比较,分别调转到相应功能对应的程序段。
如果键盘上输入的不是所需要的四个命令字幕,则跳转到开始的DOS调用功能的程序段,等待下一个键盘输入命令。
2主程序流程框图
START
初始化
Y
Start_up
AL=‘S’?
调用子程序CLEAR_SCREEN
清屏
N
SOUND
AL=‘B’?
Al
调用子程序XIANSHIQICHE
在屏幕初始位置显示汽车并且在屏幕上方指定位置显示操作说明
AL=‘Q’?
AL
FIRST
OVER
O
DOS调用键盘输,AL=ASCLL码,CMP指令将AL与字母比较
END
图1主程序流程框图
调用子程MOVE_SHAPE
用于实现是汽车启动,同时在每次显示汽车下一位置的延时之后检查是否有键盘输入,进入相应功能
调用子程序HORN
实现喇叭发声
图2(续)主程序流程框图
3各子程序编程思想与流程框图
3.1清屏子程序CLEAR_SCREEN
3.1.1CLEAR_SCREEN编程思想
此子程序编程相对简单,是一个顺序结构。
其核心是调用DOS中断INT10H的7号功能,设置入口参数AH、AL、DH、DL、BH,实现对窗口的初始化。
3.1.2CLEAR_SCREEN流程框图
CLEAR_SCREEN
设置入口参数
AH=6AL=0DH=24
DL=79BH=7
子程序返回
图3子程序CLEAR_SCREEN流程框图
3.2子程序XIANSHIQICHE
3.2.1XIANSHIQICHE编程思想
此子程序的功能是在初始位置显示汽车图形,并在屏幕上方显示程序操作提示。
在调用子程序此子程序之前有3行指令,分别是将数据段定义的变量CAR的偏移地址给DI,并设置初始位置DH=10,DL=0表示10行0列。
其中变量CAR里面放的是组成汽车图形的7个字符的ASCLL码值、显示属性以及相对位移。
这3个寄存器作为子程序的入口参数,子程序首先DOS调用读取当前显示状态,然后利用寄存器DI将数据段变量CAR中的字符数量给CL以及变量CHAR_CNT,将首字符给POINTER,将车的起始位置的行列给变量LINE_ON和COL_ON,这项预留的变量操作是为了后面启动启动汽车时汽车被擦除后再次显示提供字符位置参数。
之后设计一个循环结构,在循环体内,用变址相对寻址的方式分别给DOS调用的相应存储器赋值光标的行列,以及字符ASCLL码和字符属性,然后是DI加四指向下一条字符,用LOOP指令,没显示一个字符,CX减去1,CX大于零则回到循环开始。
这样就可以显示7个组成完整汽车的字符了。
除此之外,考虑整个程序的完整性,在原有的功能之上,我还加入了一项功能:
在屏幕上方显示此汽车动画程序的操作说明。
在此之前,已经在数据段定义了四段字符变量,里面的内容便是需要在屏幕上显示的操作提示字符串。
在以上循环结构结束之后,此后是一个顺序结构,先利用BIOS中断设置光标位置,然后字符变量偏移地址给DX,然后利用DOS中断的9号功能将字符串显示在指定位置,然后再次设置光标位置,不过与上一次相比,行号加一,列号不变,然后再次显示字符串。
依次将四个字符串显示在屏幕的四行。
3.2.2XIANSHIQICHE流程框图
DI变量CAR偏移地址
DH=10行号
DL=0列号
CX7;
字符个数
DIDI+4
子程序
XIANSHIQICHE
CXCX-1
AH0FH
INT10H
读当前显示方式
CX>
0?
CH清零,CL[DI];
CL=7
INCDI
CHAR_CNTCX
POINTERDI
LINE_ONDH
COL_ONDL
OPERATE
PLOT_NEXT
通过DI相对寻址设置光标位置
DH[DI+2],DL[DI+3]
DH为行号,DL为列号
BIOS调用显示汽车组成字符
通过DI相对寻址提供字符和字符属性
AL[DI]BL[DI+1]
图4子程序XIANSHIQICHE流程框图
事先在数据段定义变量放入需要显示的字符串,四个字符串分别是:
STRING1STRING2
STRING3STRING4
DOS调用多字符输出屏幕
字符串STRING1
设置光标位置(3,5)
字符串STRING2
设置光标位置(4,5)
字符串STRING3
设置光标位置(5,5)
设置光标位置(6,5)
子程序XIANSHIQICHE
返回
图5(续)子程序XIANSHIQICHE流程框图
3.3子程序MOVE_SHAPE
3.3.1子程序编程思想
此主程序的的功能是在屏幕上将显示的汽车图形从左向右移动,并在移动过程中能够通过键盘输入控制能够发出声音或者退出,并且还能够暂停同时还能从暂停中再次通过键盘命令使汽车再次启动。
因此,程序的编程思想是在以上已经在初始位置显示汽车图形的基础上,先调用一个延时程序,该延时程序的目的是在图形显示后在屏幕上存在的时间,也就是汽车前后两个位置之间的时间,因此延迟程序从某中意义上说是整个汽车动画程序的速度量度。
延时程序返回后,调用DOS中断的0BH号功能,用于检查是否有键盘输入,如果没有则用跳转指令跳转到下一个程序段调用擦除子程序擦除原有图形,然后再在行号不变列号加一处显示下一个汽车图形;
如果有键盘输入,则继续调用DOS中断8号功能,将键盘输入值的ASCLL码值传送到AL寄存器中,然后通过CMP指令将AL分别与字符QSBP比较,用条件跳转指令分别进入相应的程序段。
其中通过与P比较进入暂停程序段比较特殊和复杂,需要详细说明,跳转到PAUSE程序段之后,还是要检查是否有键盘输入,如果没有,则设计一个无限循环在该PAUSE中一直运行,此举的目的是实现暂停之后,如果没有键盘输入或者没有启动键盘命令输入,则程序一直在次暂停程序段运行,汽车图形位置不变,用以实现暂停功能。
同时,在暂停时还能检查键盘是否有其他字符的命令,然后又可以跳转到相应的程序段。
同时考虑该汽车程序的完整性,在完成擦除功能之后,然后设置下一个汽车图形的显示位置时,还有考虑位置是否出屏,通过将列号与80比较,如果小于则认为没有出屏继续指令后面显示下个位置图形的程序,如果不是则再次调用擦除程序将图形擦除,然后退出整个程序。
3.3.2子程序流程框图
MOVE_SHAPE
DOS中断
字符输入
AL=ASCLL
入栈保护现场
AX,BX,CX,DX,DI入栈
SOUND2
AL=’B’?
CONTINUE
PAUSE
AL=’P’?
调用延时程序
DLY_QRTR
BACK
AL=’S’?
DOS中断调用
检查键盘输入
AL=’Q’?
AL=0?
SOON
图6子程序MOVE_SHAPE流程框图
保护CX入栈
CX10
调用子程序HORN发声
子程序HORN
DOS中断字符输入
并返回
SOUND1
CX出栈
图7(续)子程序MOVE_SHAPE流程框图
调用子程序ERASE
擦除现有图形
NEXT
改变行列位置
DHDH+[DI+2]
DLDL+[DI+3]
N出屏
DL<
80?
BIOS调用设置光标
(DH,DL)
设置显示的字符和属性
AL[DI]
BL[DI+1]
BIOS调用
显示字符
CX=7
DIDI+4
图8(续)子程序MOVE_SHAPE流程框图
3.4子程序ERASE
3.4.1子程序编程思想
此程序目的在于擦除已显示的汽车图形,为下个位置的图形做准备。
同时这个子程序永远包含于以上的MOVE_SHAPE之中,两者是互相匹配的,无法分开。
在以上汽车显示后,经过延时,此子程序现将数据段变量CHAR_CNT、POINTER、LINE_ON、COL_ON里的数据分别传送个CX、DI、DH、DL表示字符个数,字符码和显示位置,实际上,这个擦除子程序并不是调用中断窗口初始化,而是将字符显示但是借助字符属性将图形显示为黑底黑字,一次来达到擦出的目的。
用一个循环结构完成擦除后,再次将以上变量里数据传送个以上寄存器,只不过变量COL_ON是先加一再传送,为返回到MOVE_SHAPE子程序里显示下个位置的图形提供坐标。
完成这些工作,程序才返回。
3.4.2子程序流程框图
调用子程序
ERASE
DECCX
CXCHAR_CNT;
DIPOINTER;
字符指针
DHLINE_ON;
车起始位置
DLCOL_ON
ERASE_NEXT
CXCHAR_CNT
DIPOINTER
DHLINE_ON
INCCOL_ON
设置显示位置
([DI+2],[DI+3])
BL=0;
黑底黑字
子程序ERASE
图9子程序ERASE流程框图
3.5子程序DLY_QRTR
3.5.1子程序编程思想
次子程序的目的在于在图形显示与擦除之间设置一个时间缓冲,相对简单。
由于里面要用到寄存器DX与CX,因此应该想将他们入栈保护现场,之后利用DX与CX设置内外两个循环体,完成循环之后,将入栈的两个寄存器弹出,返回子程序。
3.5.2子程序流程框图
DX与CX入栈
DX=500
CX=1000
CXCX-1
DECDX
DX>
图10子程序DLY_QRTR流程框图
3.6子程序HORN
3.6.1子程序编程思想
这个喇叭子程序的发生原理是利用8253定时器产生方波与8255的B端口的低二位配合使扬声器发出声音。
其电路原图如下。
在该子程序中由于要用到AX、BX、CX寄存器,首先将他们入栈保护现场,然后设置AL的值传送到8253的控制端口定义通道2的工作方式为方式3产生方波,之后再设置AX的值分别先低位后高位写入8253通道2端口作为时间常数。
然后设置AL的值为03H送到8255的B口使D1D0为高电平,从而使图中与门打开扬声器响,从后再设计一个循环程序段延时使声音维持一段时间,最后再设置AL的值为0送到8255的B口使扬声器关闭。
最后将入栈的寄存器弹出,子程序返回。
图11控制扬声器发声原理图
3.6.2子程序流程框图
HORN
AX、BX、CX入栈
AL=0B6H
8253控制口地址43H
[43H]AL
DECBX
AX=1200H
8253通道2地址42H
[42H]AX
BX>
AL=03H
将AL传送给8255的B口
使扬声器打开
AL=0
使扬声器关闭
BH=80H
CX=12500
AX、BX、CX出栈
CX-1
图12子程序HORN流程框图
4调试记录与结果分析
图13调试记录1
这个问题是,在初始位置显示汽车图形后,按Q能够是程序退出,按B能够使汽车发出声音,但是按S却不能是汽车启动。
如上图所示这个时候我考虑是不是让汽车启动的子程序出了问题,于是我将汽车图形初始位置后面的中断键盘输入字符用注释号去掉,使编译的时候直接显示图形后就启动汽车。
结果汽车是可以运动的,如图调试记录2。
图14调试记录2
于是我断定是在汽车启动前的键盘输入的问题上出现了问题,于是通过仔细检查,发现在子程序MOVE_SHAPE里面的延迟子程序后面我加入的中断调用是键盘输入字符的程序段有问题,因为在键盘输入之前没有检查是否键盘输入,因此每次S命令启动是一步一步的,这显然不符合课设任务要求,于是我在此之前加入键盘检查的相关指令并对源程序做出适当修改,结果,整个程序可以按照任务要求运行。
实际上,除此之外,还有一些其他的问题,比如汽车的行驶速度太快或太慢,这个问题并不难解决,通过分析,可以知道,通过直接修改延迟子程序的相关参数就可以直接改变速度,多次调试得到较为合适的行驶速度。
与此同理,关于汽车喇叭发声的持续时间,也是通过修改子程序的相关参数,反复调试得到较为满意的结果。
参考文献
[1]沈美明、温冬婵编著
.《IBM—PC汇编语言程序设计(第二版)》.北京:
清华大学出版社.2005年
[2]周佩玲、彭虎编著.《微机原理与接口技术(第二版)》.北京:
电子工业出版社.2005年
[3]赵雪岩编著.《微机原理与接口技术》.北京:
电子工业出版社.2001年
[4]康华光编著.《电子技术基础(第五版)》.北京:
高等教育出版社.2005年
[5]罗云彬编著.《Windows环境下32位汇编语言程序设计》.北京:
电子工业出版社.2013年
本科生课程设计成绩评定表
性别
男
专业、班级
课程设计题目:
课程设计答辩或质疑记录:
成绩评定依据:
评定项目
评分成绩
1.考勤、态度(10分)
2.查阅资料能力(10分)
3.系统设计(25分)
包括系统实现原理、框图、方案的说明
4.编写程序,调试结果(25分)
5.设计说明书质量及规范化、参考文献充分(不少于5篇)(10分)
6.答辩(20分)
总分:
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
年月日
程序附录:
DATASEGMENT
CARDB7;
字符图形表
DB43H,70,0,0
DB0B1H,70H,0,1
DB41H,70,0,1
DB52H,70,0,1
DB4FH,7,1,0
DB4FH,7,0,-3
DB2,7,-2,1
CHAR_CNTDW?
POINTERDW?
LINE_ONDB?
COL_ONDB?
STRING1DB'
P.pressforpause;
'
0DH,0AH,'
$'
STRING2DB'
S.pressforstartup;
STRING3DB'
B.pressforvoices;
STRING4DB'
Q.presstoexit;
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;
初始化DS
CALLCLEAR_SCREEN
LEADI,CAR
MOVDH,10;
车身起始位置(10,0)
MOVDL,0
CALLXIANSHIQICHE
FIRST:
MOVAH,8
INT21H
CMPAL,'
s'
JZSTART_UP
S'
b'
JZSOUND
B'
q'
JZOVER
Q'
JMPFIRST
SOUND:
CALLHORN
OVER:
MOVAH,4CH
START_UP:
CALLMOVE_SHAPE
JMPOVER
HORNPROCNEAR
PUSHBX
PUSHAX
PUSHCX
MOVAL,0B6H
OUT43H,AL
MOVAX,1200H
OUT42H,AL
MOVAL,AH
OUT42H,AL;
送时间常数
MOVAL,03H
OUT61H,AL;
使与门打开,GETE2有效,扬声器响
MOVBX,80H;
声音频率
DELAY2:
MOVCX,12500
DELAY1:
LOOPDELAY1;
延时10ms,使声音维持
DECBX
JNZDELAY2;
根据BX的内容延迟
MOVAL,00H
关闭扬声器
POPCX
POPAX
POPBX
RET
HORNENDP
MOVE_SHAPEPROCNEAR
PUSHAX;
保护现场
PUSHDX
PUSHDI
CONTINUE:
CALLDLY_QRTR;
调用延时子程序
BACK:
MOVAH,0BH
CMPAL,0
JZSOON
JZSOUND2
p'
JZPAUSE
P'
JNZBACK
JMPSOON
SOUND2:
JMPBACK
PAUSE:
MOVCX,7
JZSOUND1
LOOPPAUSE
SOUN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汽车 动画 程序设计 微机 课程设计 说明书