汽车动画程序设计微机课程设计说明书.docx

上传人:b****5 文档编号:5349037 上传时间:2022-12-15 格式:DOCX 页数:27 大小:66.15KB
下载 相关 举报
汽车动画程序设计微机课程设计说明书.docx_第1页
第1页 / 共27页
汽车动画程序设计微机课程设计说明书.docx_第2页
第2页 / 共27页
汽车动画程序设计微机课程设计说明书.docx_第3页
第3页 / 共27页
汽车动画程序设计微机课程设计说明书.docx_第4页
第4页 / 共27页
汽车动画程序设计微机课程设计说明书.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

汽车动画程序设计微机课程设计说明书.docx

《汽车动画程序设计微机课程设计说明书.docx》由会员分享,可在线阅读,更多相关《汽车动画程序设计微机课程设计说明书.docx(27页珍藏版)》请在冰豆网上搜索。

汽车动画程序设计微机课程设计说明书.docx

汽车动画程序设计微机课程设计说明书

学号:

xxx

课程设计

 

题目

汽车动画程序

学院

自动化学院

专业

自动化

班级

自动化1304班

姓名

屈升

指导教师

石云

 

2015

12

25

课程设计任务书

学生姓名:

屈升专业班级:

自动化1304班

指导教师:

石云工作单位:

自动化学院

题目:

汽车动画程序

初始条件:

显示汽车从屏幕由左向右驶过的程序,按P暂停,按S起动,按B喇叭发声。

按Q退出程序。

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

(1)设计任务及要求分析

(2)方案比较及认证说明

(3)系统原理阐述

(4)硬件设计课题需要说明:

硬件原理,电路图,采用器件的功能说明

(5)软件设计课题需要说明:

软件思想,流程图,源程序及程序注释

(6)调试记录及结果分析

(7)总结

(8)参考资料

(9)附录:

芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图

时间安排:

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喇叭发声。

按Q退出程序。

在课程设计任务书的基础上,进一步加入一项功能,即在屏幕上显示该汽车动画程序的操作说明,我认为这对程序本身的完整性来说是个很好的补充。

与此同时,本文将详细说明该汇编源程序的基本原理解析。

关键词:

DOS/BIOS调用;子程序调用;键盘输入;图像显示

 

汽车动画程序

1主程序的编程思路

此程序四项功能:

分别是显示汽车从屏幕由左向右驶过的程序,按P暂停,按S起动,按B喇叭发声。

按Q退出程序。

考虑该动画程序的实际含义,运行程序后,屏幕上应当在合适的位置显示汽车的图形,该位置作为动画的起始位置。

本程序设计时,首先通过调用一个子程序CLEAR_SCREEN,该子程序实现DOS调用的清屏功能初始化窗口,然后调用一个子程序XIANSHIQINCHE,该子程序设计在(10,0)处即屏幕的10行0列处依次显示汽车图形,同时,设计在屏幕的3到6行显示该程序的操作说明。

之后设置一个调用的8好功能,在键盘上输入四个不同的命令字母,通过CMP指令将AL寄存器与各个命令字母字符比较,分别调转到相应功能对应的程序段。

如果键盘上输入的不是所需要的四个命令字幕,则跳转到开始的DOS调用功能的程序段,等待下一个键盘输入命令。

2主程序流程框图

START

 

初始化

Y

Start_up

AL=‘S’?

 

调用子程序CLEAR_SCREEN

清屏

 

Y

N

N

SOUND

AL=‘B’?

Al

调用子程序XIANSHIQICHE

在屏幕初始位置显示汽车并且在屏幕上方指定位置显示操作说明

 

N

N

N

N

AL=‘Q’?

AL

FIRST

Y

OVER

O

DOS调用键盘输,AL=ASCLL码,CMP指令将AL与字母比较

END

END

 

图1主程序流程框图

SOUND

Start_up

 

调用子程MOVE_SHAPE

用于实现是汽车启动,同时在每次显示汽车下一位置的延时之后检查是否有键盘输入,进入相应功能

调用子程序HORN

实现喇叭发声

 

FIRST

OVER

 

END

图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

读当前显示方式

 

Y

CX>0?

CH清零,CL[DI];CL=7

INCDI

CHAR_CNTCX

POINTERDI

LINE_ONDH

COL_ONDL

 

N

OPERATE

PLOT_NEXT

通过DI相对寻址设置光标位置

DH[DI+2],DL[DI+3]

DH为行号,DL为列号

 

BIOS调用显示汽车组成字符

通过DI相对寻址提供字符和字符属性

AL[DI]BL[DI+1]

 

图4子程序XIANSHIQICHE流程框图

 

OPERATE

事先在数据段定义变量放入需要显示的字符串,四个字符串分别是:

STRING1STRING2

STRING3STRING4

 

DOS调用多字符输出屏幕

字符串STRING1

设置光标位置(3,5)

 

DOS调用多字符输出屏幕

字符串STRING2

设置光标位置(4,5)

 

DOS调用多字符输出屏幕

字符串STRING3

设置光标位置(5,5)

 

DOS调用多字符输出屏幕

字符串STRING3

设置光标位置(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入栈

Y

SOUND2

AL=’B’?

CONTINUE

N

Y

PAUSE

AL=’P’?

调用延时程序

DLY_QRTR

N

BACK

Y

AL=’S’?

N

DOS中断调用

检查键盘输入

N

AL=’Q’?

N

Y

AL=0?

OVER

Y

SOON

END

 

图6子程序MOVE_SHAPE流程框图

 

SOUND2

PAUSE

保护CX入栈

CX10

DOS中断调用

检查键盘输入

调用子程序HORN发声

 

子程序HORN

返回

AL=0?

 

DOS中断字符输入

AL=ASCLL

 

调用子程序HORN发声

并返回

AL=’B’?

SOUND1

END

OVER

AL=’Q’?

 

AL=’S’?

SOON

CX出栈

 

CX>0?

 

图7(续)子程序MOVE_SHAPE流程框图

SOON

调用子程序ERASE

擦除现有图形

 

NEXT

改变行列位置

DHDH+[DI+2]

DLDL+[DI+3]

 

N出屏

调用子程序ERASE

擦除现有图形

DL<80?

OVER

Y

BIOS调用设置光标

(DH,DL)

 

设置显示的字符和属性

AL[DI]

BL[DI+1]

 

BIOS调用

显示字符

CONTINUE

CX=7

DIDI+4

子程序

MOVE_SHAPE

返回

CXCX-1

N

CX>0?

Y

图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

Y

CX>0?

N

ERASE_NEXT

CXCHAR_CNT

DIPOINTER

DHLINE_ON

INCCOL_ON

DLCOL_ON

设置显示位置

([DI+2],[DI+3])

AL[DI]

BL=0;黑底黑字

 

子程序ERASE

返回

CX=7

DIDI+4

 

图9子程序ERASE流程框图

3.5子程序DLY_QRTR

3.5.1子程序编程思想

次子程序的目的在于在图形显示与擦除之间设置一个时间缓冲,相对简单。

由于里面要用到寄存器DX与CX,因此应该想将他们入栈保护现场,之后利用DX与CX设置内外两个循环体,完成循环之后,将入栈的两个寄存器弹出,返回子程序。

3.5.2子程序流程框图

调用子程序

DLY_QRTR

DX与CX入栈

DX=500

CX=1000

CXCX-1

Y

CX>0?

N

DECDX

Y

DX>0?

N

DX与CX入栈

子程序返回

 

图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

Y

BX>0?

AL=03H

将AL传送给8255的B口

使扬声器打开

N

AL=0

将AL传送给8255的B口

使扬声器关闭

BH=80H

CX=12500

AX、BX、CX出栈

CX-1

Y

CX>0?

调用子程序

返回

N

 

图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年

 

本科生课程设计成绩评定表

姓名

屈升

性别

专业、班级

自动化1304班

课程设计题目:

汽车动画程序

课程设计答辩或质疑记录:

 

成绩评定依据:

评定项目

评分成绩

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;',0DH,0AH,'$'

STRING3DB'B.pressforvoices;',0DH,0AH,'$'

STRING4DB'Q.presstoexit;',0DH,0AH,'$'

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

CMPAL,'S'

JZSTART_UP

CMPAL,'b'

JZSOUND

CMPAL,'B'

JZSOUND

CMPAL,'q'

JZOVER

CMPAL,'Q'

JZOVER

JMPFIRST

SOUND:

CALLHORN

JMPFIRST

OVER:

MOVAH,4CH

INT21H

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

OUT61H,AL;关闭扬声器

POPCX

POPAX

POPBX

RET

HORNENDP

MOVE_SHAPEPROCNEAR

PUSHAX;保护现场

PUSHBX

PUSHCX

PUSHDX

PUSHDI

CONTINUE:

CALLDLY_QRTR;调用延时子程序

BACK:

MOVAH,0BH

INT21H

CMPAL,0

JZSOON

MOVAH,8

INT21H

CMPAL,'b'

JZSOUND2

CMPAL,'B'

JZSOUND2

CMPAL,'p'

JZPAUSE

CMPAL,'P'

JZPAUSE

CMPAL,'Q'

JZPAUSE

CMPAL,'q'

JZOVER

CMPAL,'s'

JNZBACK

CMPAL,'S'

JNZBACK

JMPSOON

SOUND2:

CALLHORN

JMPBACK

PAUSE:

MOVCX,7

MOVAH,0BH

INT21H

CMPAL,0

JZPAUSE

MOVAH,8

INT21H

CMPAL,'b'

JZSOUND1

CMPAL,'B'

JZSOUND1

CMPAL,'q'

JZOVER

CMPAL,'Q'

JZOVER

CMPAL,'s'

JZSOON

CMPAL,'S'

JZSOON

LOOPPAUSE

SOUN

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 纺织轻工业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1