汽车动画程序设计微机课程设计说明书_第1页
汽车动画程序设计微机课程设计说明书_第2页
汽车动画程序设计微机课程设计说明书_第3页
汽车动画程序设计微机课程设计说明书_第4页
汽车动画程序设计微机课程设计说明书_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、学 号: xxx课 程 设 计题 目汽车动画程序学 院自动化学院专 业自动化班 级自动化1304班姓 名屈升指导教师石云2015年12月25日课程设计任务书学生姓名: 屈升 专业班级: 自动化1304班 指导教师: 石云 工作单位: 自动化学院 题 目: 汽车动画程序 初始条件:显示汽车从屏幕由左向右驶过的程序,按P暂停,按S起动,按B喇叭发声。按Q退出程序。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1) 设计任务及要求分析(2) 方案比较及认证说明(3) 系统原理阐述(4) 硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5) 软件设计课

2、题需要说明:软件思想,流程图,源程序及程序注释(6) 调试记录及结果分析(7) 总结(8) 参考资料(9) 附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图时间安排:12月3日12月6日:收集资料,方案选择12月7日12月19日:整体流程,程序细节,调试程序12月21日12月30日: 课程设计报告撰写1月4:交报告,程序演示,答辩指导教师签名: 年 月 日 系主任(或责任教师)签名: 年 月 日武汉理工大学微机原理与接口技术课程设计说明书目录摘要11主程序的编程思路22主程序流程框图23各子程序编程思想与流程框图33.1.1CLEAR_SCREEN编程思想33.1.2CLEAR_SCR

3、EEN流程框图33.2子程序XIANSHIQICHE43.2.1XIANSHIQICHE编程思想43.2.2XIANSHIQICHE流程框图53.3子程序MOVE_SHAPE73.3.1子程序编程思想73.3.2子程序流程框图83.4子程序ERASE113.4.1子程序编程思想113.4.2子程序流程框图113.5子程序DLY_QRTR123.5.1子程序编程思想123.5.2子程序流程框图123.6子程序HORN133.6.1子程序编程思想133.6.2子程序流程框图144调试记录与结果分析15参考文献16本科生课程设计成绩评定表17摘要随着计算机的快速发展,用汇编语言来实现动画更简单,直接

4、和便捷,它的目标代码简短,占用内存较少,执行速度较快,是高效的程序设计语言。本次课程设计的题目是编写一个汽车动画设计程序,并通过汇编集成软件进行编译调试运行,通过在键盘上输入不同的字母PBQS对程序的控制,采用段内调用子程序的方法来实现,使用了堆栈技术和中断技术,其中DOS/BIOS调用是整个程序设计的核心,本次试验主要应用了DOS调用的8号功能用于键盘输入和0BH功能用于检查是否有键盘输入;BIOS调用则应用了屏幕显示INT 10H的各项功能,用于将汽车图形显示在屏幕上。本次课程设计实现四项功能:分别是显示汽车从屏幕由左向右驶过的程序,按P暂停,按S起动,按B喇叭发声。按Q退出程序。在课程设

5、计任务书的基础上,进一步加入一项功能,即在屏幕上显示该汽车动画程序的操作说明,我认为这对程序本身的完整性来说是个很好的补充。与此同时,本文将详细说明该汇编源程序的基本原理解析。关键词:DOS/BIOS调用;子程序调用;键盘输入;图像显示汽车动画程序1主程序的编程思路此程序四项功能:分别是显示汽车从屏幕由左向右驶过的程序,按P暂停,按S起动,按B喇叭发声。按Q退出程序。考虑该动画程序的实际含义,运行程序后,屏幕上应当在合适的位置显示汽车的图形,该位置作为动画的起始位置。本程序设计时,首先通过调用一个子程序CLEAR_SCREEN,该子程序实现DOS调用的清屏功能初始化窗口,然后调用一个子程序XI

6、ANSHIQINCHE,该子程序设计在(10,0)处即屏幕的10行0列处依次显示汽车图形,同时,设计在屏幕的3到6行显示该程序的操作说明。之后设置一个调用的8好功能,在键盘上输入四个不同的命令字母,通过CMP指令将AL寄存器与各个命令字母字符比较,分别调转到相应功能对应的程序段。如果键盘上输入的不是所需要的四个命令字幕,则跳转到开始的DOS调用功能的程序段,等待下一个键盘输入命令。2主程序流程框图START初始化YStart_upAL=S?调用子程序CLEAR_SCREEN清屏YNNSOUNDAL=B?Al调用子程序XIANSHIQICHE在屏幕初始位置显示汽车并且在屏幕上方指定位置显示操作说

7、明NNNNAL=Q?ALFIRSTYOVERODOS调用键盘输,AL=ASCLL码,CMP指令将AL与字母比较ENDEND图1主程序流程框图SOUNDStart_up调用子程MOVE_SHAPE用于实现是汽车启动,同时在每次显示汽车下一位置的延时之后检查是否有键盘输入,进入相应功能调用子程序HORN实现喇叭发声FIRSTOVEREND图2(续)主程序流程框图3各子程序编程思想与流程框图3.1清屏子程序CLEAR_SCREEN3.1.1CLEAR_SCREEN编程思想此子程序编程相对简单,是一个顺序结构。其核心是调用DOS中断INT 10H的7号功能,设置入口参数AH、AL、DH、DL、BH,实

8、现对窗口的初始化。3.1.2CLEAR_SCREEN流程框图CLEAR_SCREEN设置入口参数AH=6 AL=0 DH=24DL=79 BH=7子程序返回 图3子程序CLEAR_SCREEN流程框图3.2子程序XIANSHIQICHE3.2.1XIANSHIQICHE编程思想此子程序的功能是在初始位置显示汽车图形,并在屏幕上方显示程序操作提示。在调用子程序此子程序之前有3行指令,分别是将数据段定义的变量CAR的偏移地址给DI,并设置初始位置DH=10,DL=0表示10行0列。其中变量CAR里面放的是组成汽车图形的7个字符的ASCLL码值、显示属性以及相对位移。这3个寄存器作为子程序的入口参数

9、,子程序首先DOS调用读取当前显示状态,然后利用寄存器DI将数据段变量CAR中的字符数量给CL以及变量CHAR_CNT,将首字符给POINTER,将车的起始位置的行列给变量LINE_ON和COL_ON,这项预留的变量操作是为了后面启动启动汽车时汽车被擦除后再次显示提供字符位置参数。之后设计一个循环结构,在循环体内,用变址相对寻址的方式分别给DOS调用的相应存储器赋值光标的行列,以及字符ASCLL码和字符属性,然后是DI加四指向下一条字符,用LOOP 指令,没显示一个字符,CX减去1,CX大于零则回到循环开始。这样就可以显示7个组成完整汽车的字符了。除此之外,考虑整个程序的完整性,在原有的功能之

10、上,我还加入了一项功能:在屏幕上方显示此汽车动画程序的操作说明。在此之前,已经在数据段定义了四段字符变量,里面的内容便是需要在屏幕上显示的操作提示字符串。在以上循环结构结束之后,此后是一个顺序结构,先利用BIOS中断设置光标位置,然后字符变量偏移地址给DX,然后利用DOS中断的9号功能将字符串显示在指定位置,然后再次设置光标位置,不过与上一次相比,行号加一,列号不变,然后再次显示字符串。依次将四个字符串显示在屏幕的四行。3.2.2XIANSHIQICHE流程框图DI 变量CAR偏移地址DH=10 行号DL=0列号 CX 7;字符个数 DI DI+4子程序XIANSHIQICHECX CX-1A

11、H 0FHINT 10H读当前显示方式YCX>0?CH清零, CL DI;CL=7INC DICHAR_CNT CXPOINTER DILINE_ON DHCOL_ON DLNOPERATEPLOT_NEXT通过DI相对寻址设置光标位置DH DI+2 , DL DI+3DH为行号,DL为列号BIOS调用显示汽车组成字符通过DI相对寻址提供字符和字符属性AL DI BL DI+1图4子程序XIANSHIQICHE流程框图OPERATE事先在数据段定义变量放入需要显示的字符串,四个字符串分别是:STRING1 STRING2STRING3 STRING4DOS调用多字符输出屏幕字符串STRI

12、NG1设置光标位置(3,5)DOS调用多字符输出屏幕字符串STRING2设置光标位置(4,5)DOS调用多字符输出屏幕字符串STRING3设置光标位置(5,5)DOS调用多字符输出屏幕字符串STRING3设置光标位置(6,5)子程序XIANSHIQICHE返回 图5(续)子程序XIANSHIQICHE流程框图3.3子程序MOVE_SHAPE3.3.1子程序编程思想此主程序的的功能是在屏幕上将显示的汽车图形从左向右移动,并在移动过程中能够通过键盘输入控制能够发出声音或者退出,并且还能够暂停同时还能从暂停中再次通过键盘命令使汽车再次启动。因此,程序的编程思想是在以上已经在初始位置显示汽车图形的基础

13、上,先调用一个延时程序,该延时程序的目的是在图形显示后在屏幕上存在的时间,也就是汽车前后两个位置之间的时间,因此延迟程序从某中意义上说是整个汽车动画程序的速度量度。延时程序返回后,调用DOS中断的0BH号功能,用于检查是否有键盘输入,如果没有则用跳转指令跳转到下一个程序段调用擦除子程序擦除原有图形,然后再在行号不变列号加一处显示下一个汽车图形;如果有键盘输入,则继续调用DOS中断8号功能,将键盘输入值的ASCLL码值传送到AL寄存器中,然后通过CMP指令将AL分别与字符QSBP比较,用条件跳转指令分别进入相应的程序段。其中通过与P比较进入暂停程序段比较特殊和复杂,需要详细说明,跳转到PAUSE

14、程序段之后,还是要检查是否有键盘输入,如果没有,则设计一个无限循环在该PAUSE中一直运行,此举的目的是实现暂停之后,如果没有键盘输入或者没有启动键盘命令输入,则程序一直在次暂停程序段运行,汽车图形位置不变,用以实现暂停功能。同时,在暂停时还能检查键盘是否有其他字符的命令,然后又可以跳转到相应的程序段。同时考虑该汽车程序的完整性,在完成擦除功能之后,然后设置下一个汽车图形的显示位置时,还有考虑位置是否出屏,通过将列号与80比较,如果小于则认为没有出屏继续指令后面显示下个位置图形的程序,如果不是则再次调用擦除程序将图形擦除,然后退出整个程序。3.3.2子程序流程框图子程序MOVE_SHAPEDO

15、S中断字符输入AL=ASCLL入栈保护现场AX,BX,CX,DX,DI入栈YSOUND2AL=B?CONTINUENYPAUSEAL=P?调用延时程序DLY_QRTRNBACKYAL=S?NDOS中断调用检查键盘输入NAL=Q?NYAL=0?OVERYSOONEND图6子程序MOVE_SHAPE流程框图SOUND2PAUSE保护CX入栈 CX 10DOS中断调用检查键盘输入调用子程序HORN发声子程序HORN返回AL=0?DOS中断字符输入AL=ASCLL调用子程序HORN发声并返回AL=B?SOUND1 ENDOVERAL=Q?AL=S?SOONCX出栈CX>0?图7(续)子程序MOV

16、E_SHAPE流程框图SOON调用子程序ERASE擦除现有图形NEXT改变行列位置DH DH+DI+2DL DL+DI+3N出屏调用子程序ERASE擦除现有图形DL<80?OVERYBIOS调用设置光标(DH,DL)设置显示的字符和属性AL DIBL DI+1BIOS调用显示字符CONTINUECX=7DI DI+4 子程序MOVE_SHAPE返回CX CX-1NCX>0?Y图8(续)子程序MOVE_SHAPE流程框图3.4子程序ERASE3.4.1子程序编程思想此程序目的在于擦除已显示的汽车图形,为下个位置的图形做准备。同时这个子程序永远包含于以上的MOVE_SHAPE之中,两者

17、是互相匹配的,无法分开。在以上汽车显示后,经过延时,此子程序现将数据段变量CHAR_CNT、POINTER、LINE_ON、COL_ON里的数据分别传送个CX、DI、DH、DL表示字符个数,字符码和显示位置,实际上,这个擦除子程序并不是调用中断窗口初始化,而是将字符显示但是借助字符属性将图形显示为黑底黑字,一次来达到擦出的目的。用一个循环结构完成擦除后,再次将以上变量里数据传送个以上寄存器,只不过变量COL_ON是先加一再传送,为返回到MOVE_SHAPE子程序里显示下个位置的图形提供坐标。完成这些工作,程序才返回。3.4.2子程序流程框图调用子程序ERASEDEC CXCX CHAR_CNT

18、;字符个数DI POINTER;字符指针DH LINE_ON;车起始位置DL COL_ONYCX>0?NERASE_NEXTCX CHAR_CNTDI POINTERDH LINE_ONINCCOL_ONDL COL_ON设置显示位置(DI+2,DI+3)AL DIBL=0;黑底黑字子程序ERASE返回CX=7DI DI+4图9子程序ERASE流程框图3.5子程序DLY_QRTR3.5.1子程序编程思想次子程序的目的在于在图形显示与擦除之间设置一个时间缓冲,相对简单。由于里面要用到寄存器DX与CX,因此应该想将他们入栈保护现场,之后利用DX与CX设置内外两个循环体,完成循环之后,将入栈的

19、两个寄存器弹出,返回子程序。3.5.2子程序流程框图调用子程序DLY_QRTRDX与CX入栈DX=500CX=1000CX CX-1YCX>0?NDECDXYDX>0?NDX与CX入栈子程序返回 图10子程序DLY_QRTR流程框图3.6子程序HORN3.6.1子程序编程思想这个喇叭子程序的发生原理是利用8253定时器产生方波与8255的B端口的低二位配合使扬声器发出声音。其电路原图如下。在该子程序中由于要用到AX、BX、CX寄存器,首先将他们入栈保护现场,然后设置AL的值传送到8253的控制端口定义通道2的工作方式为方式3产生方波,之后再设置AX的值分别先低位后高位写入8253通

20、道2端口作为时间常数。然后设置AL的值为03H送到8255的B口使D1D0为高电平,从而使图中与门打开扬声器响,从后再设计一个循环程序段延时使声音维持一段时间,最后再设置AL的值为0送到8255的B口使扬声器关闭。最后将入栈的寄存器弹出,子程序返回。图11控制扬声器发声原理图3.6.2子程序流程框图调用子程序HORNAX、BX、CX入栈AL=0B6H8253控制口地址43H43H ALDEC BXAX=1200H8253通道2地址42H42H AXYBX>0?AL=03H将AL传送给8255的B口使扬声器打开NAL=0将AL传送给8255的B口使扬声器关闭BH=80HCX=12500AX

21、、BX、CX出栈CX-1YCX>0?调用子程序返回N图12子程序HORN流程框图4调试记录与结果分析图13调试记录1这个问题是,在初始位置显示汽车图形后,按Q能够是程序退出,按B能够使汽车发出声音,但是按S却不能是汽车启动。如上图所示这个时候我考虑是不是让汽车启动的子程序出了问题,于是我将汽车图形初始位置后面的中断键盘输入字符用注释号去掉,使编译的时候直接显示图形后就启动汽车。结果汽车是可以运动的,如图调试记录2。图14调试记录2于是我断定是在汽车启动前的键盘输入的问题上出现了问题,于是通过仔细检查,发现在子程序MOVE_SHAPE里面的延迟子程序后面我加入的中断调用是键盘输入字符的程序

22、段有问题,因为在键盘输入之前没有检查是否键盘输入,因此每次S命令启动是一步一步的,这显然不符合课设任务要求,于是我在此之前加入键盘检查的相关指令并对源程序做出适当修改,结果,整个程序可以按照任务要求运行。实际上,除此之外,还有一些其他的问题,比如汽车的行驶速度太快或太慢,这个问题并不难解决,通过分析,可以知道,通过直接修改延迟子程序的相关参数就可以直接改变速度,多次调试得到较为合适的行驶速度。与此同理,关于汽车喇叭发声的持续时间,也是通过修改子程序的相关参数,反复调试得到较为满意的结果。参考文献1 沈美明、温冬婵编著.IBMPC汇编语言程序设计(第二版).北京:清华大学出版社. 2005年2周

23、佩玲、彭虎编著.微机原理与接口技术(第二版).北京:电子工业出版社.2005年3赵雪岩编著.微机原理与接口技术.北京:电子工业出版社.2001年4康华光编著.电子技术基础(第五版).北京:高等教育出版社.2005年5罗云彬编著.Windows环境下32位汇编语言程序设计.北京:电子工业出版社.2013年本科生课程设计成绩评定表姓 名屈升性 别男专业、班级自动化1304班课程设计题目:汽车动画程序课程设计答辩或质疑记录:成绩评定依据:评 定 项 目评分成绩1考勤、态度(10分)2. 查阅资料能力(10分)3. 系统设计(25分)包括系统实现原理、框图、方案的说明4编写程序,调试结果(25分)5设

24、计说明书质量及规范化、参考文献充分(不少于5篇)(10分)6答辩(20分)总分: 最终评定成绩(以优、良、中、及格、不及格评定)指导教师签字: 年 月 日程序附录: DATA SEGMENT CAR DB 7 ;字符图形表 DB 43H,70,0,0 DB 0B1H,70H,0,1 DB 41H,70,0,1 DB 52H,70,0,1 DB 4FH,7,1,0 DB 4FH,7,0,-3 DB 2,7,-2,1 CHAR_CNT DW ? POINTER DW ? LINE_ON DB ? COL_ON DB ? STRING1 DB 'P.press for pause ;'

25、;, 0DH, 0AH, '$' STRING2 DB 'S.press for start up ;', 0DH, 0AH, '$' STRING3 DB 'B.press for voices ;', 0DH, 0AH, '$' STRING4 DB 'Q.press to exit ;', 0DH, 0AH, '$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX ;初始化DS

26、 CALL CLEAR_SCREEN LEA DI,CAR MOV DH,10 ;车身起始位置(10,0) MOV DL,0 CALL XIANSHIQICHE FIRST: MOV AH,8 INT 21H CMP AL,'s' JZ START_UP CMP AL,'S' JZ START_UP CMP AL,'b' JZ SOUND CMP AL,'B' JZ SOUND CMP AL,'q' JZ OVER CMP AL,'Q' JZ OVER JMP FIRST SOUND: CALL H

27、ORN JMP FIRST OVER: MOV AH,4CH INT 21H START_UP: CALL MOVE_SHAPE JMP OVER HORN PROC NEAR PUSH BX PUSH AX PUSH CX MOV AL,0B6H OUT 43H,AL MOV AX,1200H OUT 42H, AL MOV AL,AH OUT 42H,AL ;送时间常数 MOV AL,03H OUT 61H,AL ;使与门打开,GETE2有效,扬声器响 MOV BX,80H ;声音频率 DELAY2: MOV CX,12500 DELAY1: LOOP DELAY1 ;延时10ms,使声音

28、维持 DEC BX JNZ DELAY2 ;根据BX的内容延迟 MOV AL,00H OUT 61H,AL ;关闭扬声器 POP CX POP AX POP BX RET HORN ENDP MOVE_SHAPE PROC NEAR PUSH AX ;保护现场 PUSH BX PUSH CX PUSH DX PUSH DI CONTINUE: CALL DLY_QRTR ;调用延时子程序 BACK: MOV AH,0BH INT 21H CMP AL,0 JZ SOON MOV AH,8 INT 21H CMP AL,'b' JZ SOUND2 CMP AL,'B

29、9; JZ SOUND2 CMP AL,'p' JZ PAUSE CMP AL,'P' JZ PAUSE CMP AL,'Q' JZ PAUSE CMP AL,'q' JZ OVER CMP AL,'s' JNZ BACK CMP AL,'S' JNZ BACK JMP SOON SOUND2: CALL HORN JMP BACK PAUSE: MOV CX,7 MOV AH,0BH INT 21H CMP AL,0 JZ PAUSE MOV AH,8 INT 21H CMP AL,'b&

30、#39; JZ SOUND1 CMP AL,'B' JZ SOUND1 CMP AL,'q' JZ OVER CMP AL,'Q' JZ OVER CMP AL,'s' JZ SOON CMP AL,'S' JZ SOON LOOP PAUSE SOUND1: CALL HORN JMP PAUSE SOON: CALL ERASE ;调用擦除子程序 NEXT: ADD DH,DI+2 ;改变行列位置 ADD DL,DI+3 CMP DL,80 ;出屏否? JB MOV_CRSR CALL ERASE ;擦除屏幕

31、JMP OVER MOV_CRSR: MOV AH,2 ;移动光标位置 INT 10H MOV AL,DI ;取字符 MOV BL,DI+1 ;取字符属性 PUSH CX MOV CX,1 ;显示次数 MOV AH,09 INT 10H ;显示字符 POP CX ADD DI,4 ;DI指向下一个字符 LOOP NEXT JMP CONTINUE RET MOVE_SHAPE ENDP ERASE PROC NEAR MOV CX,CHAR_CNT ;字符个数 MOV DI,POINTER ;字符R地址送DI MOV DH,LINE_ON ;车起始位置 MOV DL,COL_ON ERASE_

32、NEXT: ADD DH,DI+2 ;计算显示字符的行列值 ADD DL,DI+3 MOV AH,2 INT 10H ;设置光标位置DH行,DL列 MOV AL,DI MOV BL,0 ;黑底黑字 PUSH CX MOV CX,1 MOV AH,9 INT 10H POP CX ADD DI,4 ;指向下一个字符 LOOP ERASE_NEXT ;擦除显示痕迹 MOV CX,CHAR_CNT ;重新初始化 MOV DI,POINTER MOV DH,LINE_ON INC COL_ON ;指向下一行 MOV DL,COL_ON RET ERASE ENDP DLY_QRTR PROC NEAR ;延时子程序 PUSH CX PUSH DX MOV DX,5

温馨提示

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

评论

0/150

提交评论