模拟电梯接口技术课设Word文件下载.docx
《模拟电梯接口技术课设Word文件下载.docx》由会员分享,可在线阅读,更多相关《模拟电梯接口技术课设Word文件下载.docx(23页珍藏版)》请在冰点文库上搜索。
电梯运行到指定楼层后,打开电梯门,然后关门继续运行,为了模拟真实的效果,电梯在指定楼层停下,大门依次闭合-半开门-全开门-半开门-闭合。
⑤在1--8楼之间按任意顺序不连续控制电梯上升与下降。
按一次计算机键盘的上箭头电梯上升一楼,按一次计算机键盘的下箭头电梯下降一楼。
由于所使用的计算机的某些原因,这里输入“w”上升一楼,输入“s”下降一楼。
电梯的不连续控制只在电梯停在某一层且关上的门之后。
提示是“upordownaflooronlyvailablewhenelevatorstop(usewors)”,当用户可以对电梯进行不连续控制时,会出现“~nowvailable”的提示。
⑥电梯仿真软件运行时,在计算机屏幕上显示本软件作者姓名“wustzhengliming”和日期“2014.12.18”。
五、原理分析
1、在主程序的最前面是宏,将具有特定功能的画图代码打包成一个个宏放在住程序的最前面。
有清屏的宏,移光标的宏,写横的宏,写竖的宏,画小方块上升的宏,画小方块下降的宏,画初始小方块的宏,画电梯关门状态的宏,画电梯半开门状态的宏,画电梯全开门状态的宏。
由于这段画图的代码在程序中会经常使用,所将他们编成宏使用起来更方便。
除了主程序外还有一个延时1S的子程序。
2、开始主程序的运行后,先运行一段初始化程序,然后设置图形显示方式,再显示提示信息以及有关信息,然后再画电梯的三维模型,这样整个初始界面就完成了。
3、然后再提示信息下,用户输入要去的楼层,判断该字符串的第一个字符的ASCII码是否在1-8范围,如果不是则结束并返回DOS界面,如果是则继续进行下一步程序。
将第1个数字代表的楼层设为当前站X(n),并赋给COUNT(该变量用来记录当前层)。
将下个数字代表的层数设为下一站(如果当前站为最后一站,则重新回到开头提示用户输入信息),将COUNT与下一站X(n+1)相比较,若COUNT大于下一站,则小方块下降一层,COUNT--,并显示当前层和目标层以及下箭头,一直循环直到相等;
若COUNT小于下一站,则小方块上升一层,COUNT++,并显示当前层和目标层以及下箭头,一直循环直到相等;
相等时,则电梯大门大门依次闭合-半开门-全开门-半开门-闭合。
大门关上后,调用MOVAH,1;
4、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’,则直接回到该步骤。
六、硬件设计
生成文件
(1).我使用的运行环境为虚拟机下的xp系统,汇编软件使用的是轻松汇编。
(2).打开轻松汇编,输入代码,保存为.asm格式文件。
(3).编译程序。
可以直接使用轻松汇编菜单栏的按键运行—编译和运行—生成按钮进行编译,也可以进入dos环境,使用masm.exe编译源程序生成OBJ文件和一些交叉文件。
格式:
masmexam1.asm;
如果结尾不加分号,那么回车后会有一个提示,提示将生成的OBJ文件名和相应的其他一些文件名是什么?
可以一路回车取默认值,即与源文件同文件名。
如果加上分号,既可避免这些提示。
直接生成同文件名的OBJ文件。
(4).连接程序。
用LINK.exe连接OBJ文件,生成可执行的exe文件。
格式:
linkexam1.obj;
如果原程序无堆栈段,则在连接完后,有一个警告提示,提示程序无堆栈段。
(5).运行。
直接在轻松汇编菜单栏中单击运行按钮或在dos环境中执行debug将生成的可执行exe文件装入内存后,用G命令来运行
(6).查看程序运行结果。
BIOS显示功能调用
显示器是微型机系统重要的输出设备。
显示器与微型机之间的接口电路又称做显示适配器(显示卡)。
显示卡的种类很多,有MDA卡、HGC卡、CGA卡、EGA卡和VGA卡等。
IBM-PC和PC/XT单色显示器使用单色显示器适配器MDA(MonochromeDisplayAdapter)卡,它不支持图形方式,只支持80列和25行的文本方式。
文本方式又称为字符方式、字符/数字方式。
IBM-PC和PC/XT彩色显示器使用彩色/图形适配器CGA(ColorGraphicsAdapter)卡,支持文本和图形两种方式且有单色、彩色两种显示。
有关显示输出的DOS功能调用不多,而BIOS调用(INT10H)的功能很强,主要包括设置显示方式,设置光标大小和位置,设置调色板号,显示字符和显示图形等
七、软件分析
程序功能示意图↑
初始界面示意图↑
流程图:
程序清单:
CLEARMACRO;
清屏的宏
MOVBH,7;
卷入行属性,黑底白字,正常显示.
MOVAX,0600H;
AH=6屏幕初始化或上卷.AL=0整个窗口空白.
INT10H;
CH=左上角行号,CL=左下角列号.
ENDM;
DH=右上角行号,DL=右下角列号.
;
---------------------------------------
POSMACRO;
移动光标的宏
MOVBH,00H;
BH=页号DH,DL=行号,列号.
MOVAH,02H;
AH=2置光标位置.
INT10H
ENDM
;
HENGMACROX1,Y1,COLOR,X2;
写横的宏
LOCALBH1;
定义标号
MOVCX,X1;
起始点横作标-->
CX
MOVDX,Y1;
起始点纵作标-->
DX
BH1:
MOVAH,0CH;
写象素
MOVAL,COLOR;
设定颜色参数-->
AL
INCCX
CMPCX,X2;
写至终点横作标为止
JNZBH1
SHUMACROCX1,CY1,COLOR,CY2;
写竖的宏
LOCALBH2;
MOVCX,CX1
MOVDX,CY1
BH2:
MOVAH,0CH
AL=(00--0FH)共16种颜色.
INCDX
CMPDX,CY2
JNZBH2
DELAYMACRO;
延时1s的宏
LOCALREAD
PUSHDX;
入栈,保护原有DX、CX中的数据
PUSHCX
SUBAX,AX
INT1AH;
INT1AH的0号功能读当前时钟值,CX:
DX=时钟计数值
MOVTIME,DX
MOVTIME[2],CX
READ:
INT1AH
SUBDX,TIME
SBBCX,TIME[2]
CMPDX,DLY
JBREAD
POPCX;
出栈,恢复现场
POPDX
UPMACRON,DX1;
小方块上升的宏
LOCALUPA,UPB;
MOVAL,N;
小方块从N-1层上升至N层
MOVCH,30;
小方块上升一层,并且将下一层的小方块清除
MULCH;
30*N个像素
MOVDX,430
SUBDX,AX;
430-30*N个像素得到画小方块的纵坐标下限值
MOV[DZ],DX
ADDDX,20;
每个小方块边长为20个像素
MOVDX1,DX;
得到纵坐标上限值
UPA:
HENG170,[DZ],0CH,190;
画小方块
INC[DZ]
MOVAX,DX1
CMP[DZ],AX
JNZUPA
ADDDX,11;
坐标调整到移动之前的坐标
ADDDX,20
MOVDX1,DX
UPB:
HENG170,[DZ],00H,190;
擦原小方块
JNZUPB
DOWNMACRON,DX1;
小方块下降的宏
LOCALDOWNA,DOWNB;
小方块从N+1层下降至N层
小方块下降一层,并且将上一层的小方块清除
MULCH
SUBDX,AX
DOWNA:
JNZDOWNA
SUBDX,49
DOWNB:
擦原有小方块
JNZDOWNB
CLOSEMACRO;
画电梯关门状态的宏
LOCALCE
MOV[DZ],220
CE:
HENG210,[DZ],09H,370;
电梯关门
CMP[DZ],420
JNZCE
SHU291,220,02H,420;
电梯大门缝隙
SHU290,220,02H,420
SHU289,220,02H,420
HALFMACRO;
画电梯半开门状态的宏
LOCALHF
MOV[DZ],221
HF:
HENG210,[DZ],09H,250;
电梯半开门
HENG252,[DZ],07H,328
HENG330,[DZ],09H,370
JNZHF
SHU251,220,02H,420;
SHU329,220,02H,420
FULLMACRO;
画电梯全开门状态的宏
LOCALFL
FL:
HENG210,[DZ],09H,215;
电梯全开门
HENG217,[DZ],07H,363
HENG365,[DZ],09H,370
JNZFL
SHU216,220,02H,420;
SHU364,220,02H,420
PAUSEMACRO;
电梯紧急暂停的宏
LOCALWAIT,WAN
MOVAH,1
INT16H
CMPAL,'
a'
读取键盘缓存中是否有"
a"
,有就进入暂停等待循环,没有则退出
JNZWAN
MOVDX,0301H
POS
MOVDX,OFFSETMSG7;
显示MSG7
MOVAH,9
INT21H
清空键盘缓存
WAIT:
CLC;
CF=0
b'
检测键盘缓存中是否有"
b"
,有就退出暂停等待循环,没有则继续循环
JNZWAIT
WAN:
MOVDX,OFFSETMSG6;
用于将MSG7的信息擦除
DATASEGMENT
MSG1DB'
Pleasepress"
1-8"
or"
w/s"
rootherstoterminate.(eg:
1-3-8/w):
$'
输出多个空格是为了清空上一次的输入
MSG2DB'
Pleasepressanykey.'
'
$'
MSG3DB'
Floor:
MSG4DB'
Direction:
MSG5DB'
To:
MSG6DB'
Whentheelevatorrunning,pleasepress"
toemergencystop.$'
MSG7DB'
tocontinue.$'
MSG8DB'
zhengliming2014.12.18$'
DATDB0FFH,0,255DUP(0)
DLYEQU18
DZDW0
TIMEDW0,0
NUM1DB1
NUM2DB1
COUNTDB0
DX1DW0
DX2DW0
DATAENDS
STACKSSEGMENT
STADW100DUP(0)
TOPDW?
STACKSENDS
---------------------------------------
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACKS
STARTPROCFAR
MOVAX,DATA
MOVDS,AX
MOVAX,STACKS
MOVSS,AX
MOVES,AX
PUSHAX
PUSHBX
PUSHDX
PUSHSI
PUSHDI
MOVCX,0
MOVDX,2479H
MOVBH,7
MOVAX,0601H
MOVAX,0012H;
置图形显示方式
640列*480行,16色.
MOVDX,0;
光标位置初始化
HENG220,99,0AH,420;
信息栏外边框
HENG220,151,0AH,420
SHU220,99,0AH,151
SHU420,99,0AH,151
HENG223,102,0AH,417;
信息栏内边框
HENG223,148,0AH,417
SHU223,102,0AH,148
SHU417,102,0AH,148
CLOSE;
电梯大门处于关闭状态
HENG210,220,02H,370;
电梯大门缝隙边框
HENG210,420,02H,370
SHU210,220,02H,420
SHU370,220,02H,420
HENG209,219,02H,371;
加粗边框
SHU209,220,02H,420
SHU371,220,02H,420
MOV[DZ],219
MOVDX1,210
MOVDX2,370
SB1:
HENGDX1,[DZ],03H,DX2;
三维电梯上侧面
DEC[DZ]
INCDX1
INCDX2
CMP[DZ],180
JNZSB1
MOV[DZ],371
MOVDX1,220
MOVDX2,420
SB2:
SHU[DZ],DX1,03H,DX2;
三维电梯右侧面
DECDX1
DECDX2
CMP[DZ],410
JNZSB2
MOV[DZ],421
SB3:
HENG160,[DZ],0EH,200;
画电梯框架
SUB[DZ],30
CMP[DZ],151
JNZSB3
SHU160,181,0EH,422
SHU200,181,0EH,422
MOV[DZ],400
BRICK:
画初始小方块
MOVAX,420
JNZBRICK
MOVDX,072BH
MOVDL,NUM1
ADDDL,30H
MOVAH,2
INT21H;
初始楼层显示"
1"
MOVDX,1C3BH
MOVDX,OFFSETMSG8;
显示MSG8
MOVDX,0723H
MOVDX,OFFSETMSG3;
显示MSG3
MOVDX,081DH
MOVDX,OFFSETMSG4;
显示MSG4
MOVDX,082DH
MOVDX,OFFSETMSG5;
显示MSG5
显示MSG6
INPUT:
MOVDX,0101H
MOVDX,OFFSETMSG1;
显示MSG1
MOVDX,0143H
MOVDX,OFFSETDAT;
输入并显示字符串
MOVAH,10
MOVAL,DAT+1
MOVCOUNT,AL;
记录输入的字符个数
MOVBP,2
MOVAL,DAT[BP]
w'
输入w则上升一层
JEA1
JMPB1
A1:
JMPUP1
B1:
s'
输入s则下降一层
JEA2
JMPB2
A2:
JMPDOWN1
B2:
CMPAL,31H;
输入小于1的ACSⅡ码则退出
JBA3
JMPB3
A3:
JMPOVER
B3:
CMPAL,38H;
输入大于8的ACSⅡ码则退出
JAA4
JMPB4
A4:
B4:
ANDAL,0FH;
输入1至8则进入多楼层控制命令循环TARGET1
MOVNUM1,AL
TARGET1:
ADDBP,2;
因为输入格式为"
1-2-6"
,每次BP偏移两位起到了仅取有效位数字的作用
将字符转换为数字
CMPAL,1;
检测后续输入的字符是否合法,超出1~8范围则返回输入界面
JBINPUT
CMPAL,8
JAINPUT
MOVNUM2,AL
MOVDX,0831H
MOVDL,DAT[BP];
显示电梯下一站要停的楼层数
DELAY
TARGET2:
MOVAL,NUM2
CMPAL,NUM1;
若下一站楼层大于当前楼层,则跳至上升命令段
JAA5
JMPB5
A5:
JMPTARGET3;
若下一站楼层小于当前楼层,则