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

下载本文档

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

文档简介

此文档收集于网络,如有侵权,请联系网站删除学 号: 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:交报告,程序演示,答辩指导教师签名: 年 月 日 系主任(或责任教师)签名: 年 月 日此文档仅供学习与交流目录摘要11主程序的编程思路22主程序流程框图23各子程序编程思想与流程框图33.1.1CLEAR_SCREEN编程思想33.1.2CLEAR_SCREEN流程框图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摘要随着计算机的快速发展,用汇编语言来实现动画更简单,直接和便捷,它的目标代码简短,占用内存较少,执行速度较快,是高效的程序设计语言。本次课程设计的题目是编写一个汽车动画设计程序,并通过汇编集成软件进行编译调试运行,通过在键盘上输入不同的字母PBQS对程序的控制,采用段内调用子程序的方法来实现,使用了堆栈技术和中断技术,其中DOS/BIOS调用是整个程序设计的核心,本次试验主要应用了DOS调用的8号功能用于键盘输入和0BH功能用于检查是否有键盘输入;BIOS调用则应用了屏幕显示INT 10H的各项功能,用于将汽车图形显示在屏幕上。本次课程设计实现四项功能:分别是显示汽车从屏幕由左向右驶过的程序,按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初始化YStart_upAL=S?调用子程序CLEAR_SCREEN清屏YNNSOUNDAL=B?Al调用子程序XIANSHIQICHE在屏幕初始位置显示汽车并且在屏幕上方指定位置显示操作说明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,实现对窗口的初始化。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个寄存器作为子程序的入口参数,子程序首先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列号 CX 7;字符个数 DI DI+4子程序XIANSHIQICHECX CX-1AH 0FHINT 10H读当前显示方式YCX0?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调用多字符输出屏幕字符串STRING1设置光标位置(3,5)DOS调用多字符输出屏幕字符串STRING2设置光标位置(4,5)DOS调用多字符输出屏幕字符串STRING3设置光标位置(5,5)DOS调用多字符输出屏幕字符串STRING3设置光标位置(6,5)子程序XIANSHIQICHE返回 图5(续)子程序XIANSHIQICHE流程框图3.3子程序MOVE_SHAPE3.3.1子程序编程思想此主程序的的功能是在屏幕上将显示的汽车图形从左向右移动,并在移动过程中能够通过键盘输入控制能够发出声音或者退出,并且还能够暂停同时还能从暂停中再次通过键盘命令使汽车再次启动。因此,程序的编程思想是在以上已经在初始位置显示汽车图形的基础上,先调用一个延时程序,该延时程序的目的是在图形显示后在屏幕上存在的时间,也就是汽车前后两个位置之间的时间,因此延迟程序从某中意义上说是整个汽车动画程序的速度量度。延时程序返回后,调用DOS中断的0BH号功能,用于检查是否有键盘输入,如果没有则用跳转指令跳转到下一个程序段调用擦除子程序擦除原有图形,然后再在行号不变列号加一处显示下一个汽车图形;如果有键盘输入,则继续调用DOS中断8号功能,将键盘输入值的ASCLL码值传送到AL寄存器中,然后通过CMP指令将AL分别与字符QSBP比较,用条件跳转指令分别进入相应的程序段。其中通过与P比较进入暂停程序段比较特殊和复杂,需要详细说明,跳转到PAUSE程序段之后,还是要检查是否有键盘输入,如果没有,则设计一个无限循环在该PAUSE中一直运行,此举的目的是实现暂停之后,如果没有键盘输入或者没有启动键盘命令输入,则程序一直在次暂停程序段运行,汽车图形位置不变,用以实现暂停功能。同时,在暂停时还能检查键盘是否有其他字符的命令,然后又可以跳转到相应的程序段。同时考虑该汽车程序的完整性,在完成擦除功能之后,然后设置下一个汽车图形的显示位置时,还有考虑位置是否出屏,通过将列号与80比较,如果小于则认为没有出屏继续指令后面显示下个位置图形的程序,如果不是则再次调用擦除程序将图形擦除,然后退出整个程序。3.3.2子程序流程框图子程序MOVE_SHAPEDOS中断字符输入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出栈CX0?图7(续)子程序MOVE_SHAPE流程框图SOON调用子程序ERASE擦除现有图形NEXT改变行列位置DH DH+DI+2DL DL+DI+3N出屏调用子程序ERASE擦除现有图形DL0?Y图8(续)子程序MOVE_SHAPE流程框图3.4子程序ERASE3.4.1子程序编程思想此程序目的在于擦除已显示的汽车图形,为下个位置的图形做准备。同时这个子程序永远包含于以上的MOVE_SHAPE之中,两者是互相匹配的,无法分开。在以上汽车显示后,经过延时,此子程序现将数据段变量CHAR_CNT、POINTER、LINE_ON、COL_ON里的数据分别传送个CX、DI、DH、DL表示字符个数,字符码和显示位置,实际上,这个擦除子程序并不是调用中断窗口初始化,而是将字符显示但是借助字符属性将图形显示为黑底黑字,一次来达到擦出的目的。用一个循环结构完成擦除后,再次将以上变量里数据传送个以上寄存器,只不过变量COL_ON是先加一再传送,为返回到MOVE_SHAPE子程序里显示下个位置的图形提供坐标。完成这些工作,程序才返回。3.4.2子程序流程框图调用子程序ERASEDEC CXCX CHAR_CNT;字符个数DI POINTER;字符指针DH LINE_ON;车起始位置DL COL_ONYCX0?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设置内外两个循环体,完成循环之后,将入栈的两个寄存器弹出,返回子程序。3.5.2子程序流程框图调用子程序DLY_QRTRDX与CX入栈DX=500CX=1000CX CX-1YCX0?NDECDXYDX0?NDX与CX入栈子程序返回 图10子程序DLY_QRTR流程框图3.6子程序HORN3.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子程序流程框图调用子程序HORNAX、BX、CX入栈AL=0B6H8253控制口地址43H43H ALDEC BXAX=1200H8253通道2地址42H42H AXYBX0?AL=03H将AL传送给8255的B口使扬声器打开NAL=0将AL传送给8255的B口使扬声器关闭BN=80HCX=12500AX、BX、CX出栈CX-1YCX0?调用子程序返回N图12子程序HORN流程框图4调试记录与结果分析图13调试记录1这个问题是,在初始位置显示汽车图形后,按Q能够是程序退出,按B能够使汽车发出声音,但是按S却不能是汽车启动。如上图所示这个时候我考虑是不是让汽车启动的子程序出了问题,于是我将汽车图形初始位置后面的中断键盘输入字符用注释号去掉,使编译的时候直接显示图形后就启动汽车。结果汽车是可以运动的,如图调试记录2。图14调试记录2于是我断定是在汽车启动前的键盘输入的问题上出现了问题,于是通过仔细检查,发现在子程序MOVE_SHAPE里面的延迟子程序后面我加入的中断调用是键盘

温馨提示

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

评论

0/150

提交评论