您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 微机课程设计电梯仿真程序
二○一四~二○一五学年第一学期信息科学与工程学院自动化系课程设计报告书姓名:学号:201204134013班级:自动化1201课程名称:微机原理与应用课程设计指导教师:程磊2014年12月19日电梯仿真程序1.课程设计目的:在读懂任务书给出的几个子程序的基础上,学习运用计算机动画技术等手段自己独立编制出一个完整的电梯运行计算机仿真程序.通过编制仿真程序的实践,加强同学们对计算机顺序控制的了解与认识,以达到掌握计算机顺序控制规律和计算机顺序控制技术所需的编程技巧以及相关的硬件基础知识的目的。2.设计要求:(1).在1--8楼之间一次可输入多个任意楼层号连续控制电梯按指定楼层号顺序上升与下降.以上过程完成后可重新输入任意楼层号连续控制电梯按指定楼层号顺序上升与下降.只有按ESC键才退出程序返回DOS状态。例如:1-3-5-8-6-4-2-1(可观察教六楼电梯的实际运行情况).(2).在1--8楼之间按任意顺序不连续控制电梯上升与下降.按一次计算机键盘的上箭头电梯上升一楼,按一次计算机键盘的下箭头电梯下降一楼.(上箭头的ASCII码19H,下箭头的ASCII码1AH.)(3).在电梯上升与下降过程中,要显示出1--8楼之间所要到达的楼层数,同时还要用箭头显示电梯是上升状态还是下降状态.(4).电梯运行到指定楼层后,打开电梯门,然后关门继续运行.(5).电梯运行时,在任意时刻遇到紧急情况时应能实时中断电梯运行.也可以在任意时刻恢复电梯运行.(按A/a键模拟中断发生,电梯停止运行.按B/b键恢复电梯运行)(6).在计算机屏幕上将电梯的平面模型改成三维立体模型.(7).在电梯旁画一个小方块.这个小方块随电梯上升而上升,下降而下降.以增加电梯运行时的动感.(8).电梯仿真软件运行时,应在计算机屏幕上详细说明其使用方法,以及本软件作者姓名和日期.3.使用方法和介绍:①在提示“INPUTTHEORDER(1-8F)(SUCHAS1-2-5-2):”后面输入用户要去的楼层,可从任意楼层开始运行,指定楼层号顺序上升与下降,数字与数字之间用“-”连接,数字范围为1-8。②电梯上升与下降过程中,提示“NOWTHEFLOORIS:”后面显示出当前所要在的楼层数,提示“TO:”后面显示1--8楼之间所要到达的楼层数,提示“DIRECTION:”后面显示上下箭头,代表电梯当前是上升状态还是下降状态。③在电梯旁有一个小方块。这个小方块随电梯上升而上升,下降而下降。增加电梯运行时的动感.。小方块在一个8层的方框内上下移动,电梯每上升一层,小方块在方框内上升一层,电梯每下降一层,小方块在方框内下降一层。并且小方块在方框内的位置与电梯当前所在楼层时对应的,例如:若当前电梯运行到第8层,则小方块也位于第八层方框。为了使用户能更清晰地看到电梯的运行过程,小方块每到一层会停留1S的时间。电梯运行到指定楼层后,打开电梯门,然后关门继续运行,为了模拟真实的效果,电梯在指定楼层停下,大门依次闭合-半开门-全开门-半开门-闭合。④在1--8楼之间按任意顺序不连续控制电梯上升与下降。按一次计算机键盘的上箭头电梯上升一楼,按一次计算机键盘的下箭头电梯下降一楼。由于所使用的计算机的某些原因,这里输入“w”上升一楼,输入“s”下降一楼。电梯的不连续控制只在电梯停在某一层且关上的门之后。提示是“UPORDOWNONLYVAILABLEWHENLIFTSTOP(usewors)”,当用户可以对电梯进行不连续控制时,会出现“~~NOWVAILABLE”的提示。⑤电梯仿真软件运行时,在计算机屏幕上显示本软件日期“***DATA:2014-12-20***”,作者姓名“AUTHORIS:xiazhilong”和学号“XUEHAO:201204134013”。4.程序的设计思路在主程序的最前面是宏,将具有特定功能的画图代码打包成一个个宏放在住程序的最前面。有清屏的宏,移光标的宏,写横的宏,写竖的宏,画小方块上升的宏,画小方块下降的宏,画初始小方块的宏,画电梯关门状态的宏,画电梯半开门状态的宏,画电梯全开门状态的宏。由于这段画图的代码在程序中会经常使用,所将他们编成宏使用起来更方便。除了主程序外还有一个延时1S的子程序。开始主程序的运行后,先运行一段初始化程序,然后设置图形显示方式,再显示提示信息以及有关信息,然后再画电梯的三维模型,这样整个初始界面就完成了。然后再提示信息下,用户输入要去的楼层,判断该字符串的第一个字符的ASCII码是否在1-8范围,如果不是则结束并返回DOS界面,如果是则继续进行下一步程序。将第1个数字代表的楼层设为当前站X(n),并赋给COUNT(该变量用来记录当前层)。将下个数字代表的层数设为下一站(如果当前站为最后一站,则重新回到开头提示用户输入信息),将COUNT与下一站X(n+1)相比较,若COUNT大于下一站,则小方块下降一层,COUNT--,并显示当前层和目标层以及下箭头,一直循环直到相等;若COUNT小于下一站,则小方块上升一层,COUNT++,并显示当前层和目标层以及下箭头,一直循环直到相等;相等时,则电梯大门大门依次闭合-半开门-全开门-半开门-闭合。大门关上后,调用MOVAH,1;INT16H检测是否有按键按下,若没有键盘按下,则X(n)=X(n+1),读取下一个字符,将该字符所代表的楼层赋给X(n+1),并回到前面检测X(n)是否为最后目标层的程序段。若有键盘按下,则判断AL的值(该值为输入的字符的ASCII码),若AL为‘w’则小方块上升一层,COUNT++;若AL为‘s’则小方块下降一层,COUNT--;两者最后都回到“X(n)=X(n+1),读取下一个字符,将该字符所代表的楼层赋给X(n+1)”这一步,若AL即不为‘w’也不为‘s’,则直接回到该步骤。以上是整个程序的大致流程和思路。5.程序的流程图6.程序清单CLSSMACRO;清屏之宏MOVBH,7;卷入行属性,黑底白字,正常显示.MOVAX,0600H;AH=6屏幕初始化或上卷.AL=0整个窗口空白.INT10H;CH=左上角行号,CL=左下角列号.ENDM;DH=右上角行号,DL=右下角列号.GBMACRO;移光标之宏MOVBH,00H;BH=页号DH,DL=行号,列号.MOVAH,02H;AH=2置光标位置.INT10HENDMHENGMACROX1,Y1,COLOR,X2;写横的宏LOCALBH1;定义标号MOVCX,X1;起始点横作标--CXMOVDX,Y1;起始点纵作标--DXBH1:MOVAH,0CH;写象素MOVAL,COLOR;设定颜色参数--ALINT10HINCCXCMPCX,X2;写至终点横作标为止JNZBH1ENDMSHUMACROCX1,CY1,COLOR,CY2;写竖的宏LOCALBH2;定义标号MOVCX,CX1MOVDX,CY1BH2:MOVAH,0CHMOVAL,COLOR;AL=(00--0FH)共16种颜色.INT10HINCDXCMPDX,CY2JNZBH2ENDMUPMACRON,DX1;小方块上升的宏LOCALUPa,UPb;定义标号MOVAL,N;小方块从N-1层上升至N层MOVCH,30;小方块上升一层,并且将下一层的小方块清除MULCHMOVDX,430SUBDX,AXMOV[DZ],DXADDDX,20MOVDX1,DXUPa:HENG485,[DZ],04H,515;画小方块INC[DZ]MOVAX,DX1CMP[DZ],AXJNZUPaADDDX,11MOV[DZ],DXADDDX,20MOVDX1,DXUPb:HENG485,[DZ],00H,515;画小方块INC[DZ]MOVAX,DX1CMP[DZ],AXJNZUPbENDMDOWNMACRON,DX1;小方块下降的宏LOCALDNa,DNb;定义标号MOVAL,N;小方块从N+1层下降至N层MOVCH,30;小方块下降一层,并且将上一层的小方块清除MULCHMOVDX,430SUBDX,AXMOV[DZ],DXADDDX,20MOVDX1,DXDNa:HENG485,[DZ],04H,515;画小方块INC[DZ]MOVAX,DX1CMP[DZ],AXJNZDNaSUBDX,49MOV[DZ],DXADDDX,20MOVDX1,DXDNb:HENG485,[DZ],00H,515;画小方块INC[DZ]MOVAX,DX1CMP[DZ],AXJNZDNbENDMINITMACRON,DX1;画初始小方块的宏LOCALBEG;定义标号MOVAL,N;小方块最初停在第N层,表示电梯最初停第N层MOVCH,30MULCHMOVDX,430SUBDX,AXMOV[DZ],DXADDDX,20MOVDX1,DXBEG:HENG485,[DZ],04H,515;画小方块INC[DZ]MOVAX,DX1CMP[DZ],AXJNZBEGENDMCLOSEMACRO;画电梯关门状态的宏LOCALCC;定义标号MOV[DZ],220CC:HENG210,[DZ],09H,370;电梯关门INC[DZ]CMP[DZ],420JNZCCSHU291,220,02H,420;电梯大门缝隙SHU290,220,02H,420SHU289,220,02H,420ENDMHALFMACRO;画电梯半开门状态的宏LOCALHA;定义标号MOV[DZ],221HA:HENG210,[DZ],09H,250;电梯半开门HENG252,[DZ],07H,328HENG330,[DZ],09H,370INC[DZ]CMP[DZ],420JNZHASHU251,220,02H,420;电梯大门缝隙SHU329,220,02H,420ENDMFULLMACRO;画电梯全开门状态的宏LOCALF;定义标号MOV[DZ],221F:HENG210,[DZ],09H,215;电梯全开门HENG217,[DZ],07H,363HENG365,[DZ],09H,370INC[DZ]CMP[DZ],420JNZFSHU216,220,02H,420;电梯大门缝隙SHU364,220,02H,420ENDMDATASEGMENTMESSDB'LIFTMODEL',0AH,0DH,'$'ME1DB'PRESSANYKEYTORETUREDOS.',0AH,0DH,'$';当使用者进行非正常操作时,提示使用者手动返回DOSME2DB'NOWTHEFLOORIS:',0AH,0DH,'$';提示当前楼层ME3DB'DIRECTION:',0AH,0DH,'$'ME4DB'INPUTTHEORDER(1-8F)(SUCHAS1-2-5-2):$'ME5DB'AUTHORIS:xiazhilong',0AH,0DH,'XUEHAO:201204134013$';输出多个空格键是为了清空上一次的输入ME6DB'***DATA:2014-12-20***',0AH,0DH,'$'ME7DB'TO:',0AH,0DH,'$';提示电梯下一站要停的楼层ME8DB'UPORDOWN:',0AH,0DH,'$';提示使用者用上、下键不连续控制电梯ME9DB'ONLYVAILABLEWHENLIFT',0AH,0DH,'$'ME10DB'STOP(usewors)',0AH,0DH,'$'ME11DB'~NOWVAILABLE',0AH,0DH,'$'ME12DB'',0AH,0DH,'$'IBUFFDB0FFH,0,255DUP(0)DIDASEQU18DZDW0TIMESDW0,0NUMDB0NUM1DB0COUNTDB0COUNT1DB0DX1DW3DX2DW6DATAENDSSTACSEGMENTSTADW100DUP(0);堆栈段TOPDW?STACENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:DATADELAY1SPROCNEAR;延时1S的子函数PUSHDX;压栈PUSHCXXOR
本文标题:微机课程设计电梯仿真程序
链接地址:https://www.777doc.com/doc-2435843 .html