模拟电梯接口技术课设.docx
《模拟电梯接口技术课设.docx》由会员分享,可在线阅读,更多相关《模拟电梯接口技术课设.docx(23页珍藏版)》请在冰豆网上搜索。
模拟电梯接口技术课设
河南理工大学
计算机科学与技术学院
课程设计报告
2015—2016学年第二学期
课程名称微机原理与接口技术
设计题目模拟电梯
姓名。
。
学号36130901021
专业班级计科13-02
指导教师李莹莹
2016年1月9日
目录
一、课程设计题目3
二、设计要求3
三、设计目的3
四、设计方案3
五、原理分析4
六、硬件设计4
七、软件分析6
八、总结与展望20
一、课程设计题目
模拟电梯
二、设计要求
用键盘用键盘、按钮、八段码和LED发光管模拟电梯工作过程。
楼层设为8层,键盘数字键1-8用来键入希望停的楼层,8个LED发光管显示希望停的楼层,八段码指示电梯当前所在楼层,按钮用来开停电梯。
电梯正常运行时以每0.5秒一层的速度上升或下降。
三、设计目的
在读懂任务书给出的几个子程序的基础上,学习运用计算机动画技术等手段自己独立编制出一个完整的电梯运行计算机仿真程序.通过编制仿真程序的实践,加强同学们对计算机顺序控制的了解与认识,以达到掌握计算机顺序控制规律和计算机顺序控制技术所需的编程技巧以及相关的硬件基础知识的目的
四、设计方案
①在提示“inputthefloor(1-8F)(suchas1-3-4-1):
”后面输入用户要去的楼层,可从任意楼层开始运行,指定楼层号顺序上升与下降,数字与数字之间用“-”连接,数字范围为1-8。
在一轮运行完以后程序会清空楼层提示后面的数字,用户可再输入要去的楼层,若用户希望停止运行该程序,可以在下一轮开始时在楼层提示后面输入0或非数字键,可返回到DOS
②在1--8楼之间按任意顺序不连续控制电梯上升与下降.按一次计算机键盘的上箭头电梯上升一楼,按一次计算机键盘的下箭头电梯下降一楼.
③电梯上升与下降过程中,在电梯三维模型的正上方的蓝色矩形框内,提示“nowtheflooris:
”后面显示出当前所要在的楼层数,提示“TO:
”后面显示1--8楼之间所要到达的楼层数,提示“direction:
”后面显示上下箭头,代表电梯当前是上升状态还是下降状态。
④在电梯旁有一个小方块。
这个小方块随电梯上升而上升,下降而下降。
增加电梯运行时的动感.。
小方块在一个8层的方框内上下移动,电梯每上升一层,小方块在方框内上升一层,
电梯每下降一层,小方块在方框内下降一层。
并且小方块在方框内的位置与电梯当前所在楼层时对应的,例如:
若当前电梯运行到第3层,则小方块也位于第三层方框。
为了使用户能更清晰地看到电梯的运行过程,小方块每到一层会停留1S的时间。
电梯运行到指定楼层后,打开电梯门,然后关门继续运行,为了模拟真实的效果,电梯在指定楼层停下,大门依次闭合-半开门-全开门-半开门-闭合。
⑤在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
INT10H
INCCX
CMPCX,X2;写至终点横作标为止
JNZBH1
ENDM
;---------------------------------------
SHUMACROCX1,CY1,COLOR,CY2;写竖的宏
LOCALBH2;定义标号
MOVCX,CX1
MOVDX,CY1
BH2:
MOVAH,0CH
MOVAL,COLOR;AL=(00--0FH)共16种颜色.
INT10H
INCDX
CMPDX,CY2
JNZBH2
ENDM
;---------------------------------------
DELAYMACRO;延时1s的宏
LOCALREAD
PUSHDX;入栈,保护原有DX、CX中的数据
PUSHCX
SUBAX,AX
INT1AH;INT1AH的0号功能读当前时钟值,CX:
DX=时钟计数值
MOVTIME,DX
MOVTIME[2],CX
READ:
SUBAX,AX
INT1AH
SUBDX,TIME
SBBCX,TIME[2]
CMPDX,DLY
JBREAD
POPCX;出栈,恢复现场
POPDX
ENDM
;---------------------------------------
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;坐标调整到移动之前的坐标
MOV[DZ],DX
ADDDX,20
MOVDX1,DX
UPB:
HENG170,[DZ],00H,190;擦原小方块
INC[DZ]
MOVAX,DX1
CMP[DZ],AX
JNZUPB
ENDM
;---------------------------------------
DOWNMACRON,DX1;小方块下降的宏
LOCALDOWNA,DOWNB;定义标号
MOVAL,N;小方块从N+1层下降至N层
MOVCH,30;小方块下降一层,并且将上一层的小方块清除
MULCH
MOVDX,430
SUBDX,AX
MOV[DZ],DX
ADDDX,20
MOVDX1,DX
DOWNA:
HENG170,[DZ],0CH,190;画小方块
INC[DZ]
MOVAX,DX1
CMP[DZ],AX
JNZDOWNA
SUBDX,49
MOV[DZ],DX
ADDDX,20
MOVDX1,DX
DOWNB:
HENG170,[DZ],00H,190;擦原有小方块
INC[DZ]
MOVAX,DX1
CMP[DZ],AX
JNZDOWNB
ENDM
;---------------------------------------
CLOSEMACRO;画电梯关门状态的宏
LOCALCE
MOV[DZ],220
CE:
HENG210,[DZ],09H,370;电梯关门
INC[DZ]
CMP[DZ],420
JNZCE
SHU291,220,02H,420;电梯大门缝隙
SHU290,220,02H,420
SHU289,220,02H,420
ENDM
;---------------------------------------
HALFMACRO;画电梯半开门状态的宏
LOCALHF
MOV[DZ],221
HF:
HENG210,[DZ],09H,250;电梯半开门
HENG252,[DZ],07H,328
HENG330,[DZ],09H,370
INC[DZ]
CMP[DZ],420
JNZHF
SHU251,220,02H,420;电梯大门缝隙
SHU329,220,02H,420
ENDM
;---------------------------------------
FULLMACRO;画电梯全开门状态的宏
LOCALFL
MOV[DZ],221
FL:
HENG210,[DZ],09H,215;电梯全开门
HENG217,[DZ],07H,363
HENG365,[DZ],09H,370
INC[DZ]
CMP[DZ],420
JNZFL
SHU216,220,02H,420;电梯大门缝隙
SHU364,220,02H,420
ENDM
;---------------------------------------
PAUSEMACRO;电梯紧急暂停的宏
LOCALWAIT,WAN
SUBAX,AX
MOVAH,1
INT16H
CMPAL,'a';读取键盘缓存中是否有"a",有就进入暂停等待循环,没有则退出
JNZWAN
MOVDX,0301H
POS
MOVDX,OFFSETMSG7;显示MSG7
MOVAH,9
INT21H
MOVAH,0CH;清空键盘缓存
INT21H
WAIT:
CLC;CF=0
MOVAH,1
INT16H
CMPAL,'b';检测键盘缓存中是否有"b",有就退出暂停等待循环,没有则继续循环
JNZWAIT
WAN:
MOVDX,0301H
POS
MOVDX,OFFSETMSG6;用于将MSG7的信息擦除
MOVAH,9
INT21H
MOVAH,0CH
INT21H
ENDM
;---------------------------------------
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"a"toemergencystop.$'
MSG7DB'Pleasepress"b"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
MOVAX,DATA
MOVES,AX
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHSI
PUSHDI
MOVCX,0
MOVDX,2479H
MOVBH,7
MOVAX,0601H
INT10H
MOVAX,0012H;置图形显示方式
INT10H;640列*480行,16色.
MOVDX,0;光标位置初始化
POS
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;三维电梯右侧面
INC[DZ]
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:
HENG170,[DZ],0CH,190;画初始小方块
INC[DZ]
MOVAX,420
CMP[DZ],AX
JNZBRICK
MOVDX,072BH
POS
MOVDL,NUM1
ADDDL,30H
MOVAH,2
INT21H;初始楼层显示"1"
MOVDX,1C3BH
POS
MOVDX,OFFSETMSG8;显示MSG8
MOVAH,9
INT21H
MOVDX,0723H
POS
MOVDX,OFFSETMSG3;显示MSG3
MOVAH,9
INT21H
MOVDX,081DH
POS
MOVDX,OFFSETMSG4;显示MSG4
MOVAH,9
INT21H
MOVDX,082DH
POS
MOVDX,OFFSETMSG5;显示MSG5
MOVAH,9
INT21H
MOVDX,0301H
POS
MOVDX,OFFSETMSG6;显示MSG6
MOVAH,9
INT21H
INPUT:
MOVDX,0101H
POS
MOVDX,OFFSETMSG1;显示MSG1
MOVAH,9
INT21H
MOVDX,0143H
POS
MOVDX,OFFSETDAT;输入并显示字符串
MOVAH,10
INT21H
MOVAL,DAT+1
MOVCOUNT,AL;记录输入的字符个数
MOVBP,2
MOVAL,DAT[BP]
CMPAL,'w';输入w则上升一层
JEA1
JMPB1
A1:
JMPUP1
B1:
CMPAL,'s';输入s则下降一层
JEA2
JMPB2
A2:
JMPDOWN1
B2:
CMPAL,31H;输入小于1的ACSⅡ码则退出
JBA3
JMPB3
A3:
JMPOVER
B3:
CMPAL,38H;输入大于8的ACSⅡ码则退出
JAA4
JMPB4
A4:
JMPOVER
B4:
ANDAL,0FH;输入1至8则进入多楼层控制命令循环TARGET1
MOVNUM1,AL
TARGET1:
ADDBP,2;因为输入格式为"1-2-6",每次BP偏移两位起到了仅取有效位数字的作用
MOVAL,DAT[BP]
ANDAL,0FH;将字符转换为数字
CMPAL,1;检测后续输入的字符是否合法,超出1~8范围则返回输入界面
JBINPUT
CMPAL,8
JAINPUT
MOVNUM2,AL
MOVDX,0831H
POS
MOVDL,DAT[BP];显示电梯下一站要停的楼层数
MOVAH,2
INT21H
DELAY
TARGET2:
MOVAL,NUM2
CMPAL,NUM1;若下一站楼层大于当前楼层,则跳至上升命令段
JAA5
JMPB5
A5:
JMPTARGET3;若下一站楼层小于当前楼层,则