电梯调度模拟系统Word下载.docx
- 文档编号:947503
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:15
- 大小:26.16KB
电梯调度模拟系统Word下载.docx
《电梯调度模拟系统Word下载.docx》由会员分享,可在线阅读,更多相关《电梯调度模拟系统Word下载.docx(15页珍藏版)》请在冰点文库上搜索。
7段数码管显示时需要给它低电平、显示的数、高电平,因此可以用8255A的PC口控制给7段数码管送高低电平和显示的数。
第三部分详
细设计
开关状态
流程图:
8255A(PA口)
N
开关变化
Y
电梯楼层=目的楼层 N
电梯楼层<
目的楼层 电梯楼层>
目的楼层
8255 PB控制红色二极管亮,上
7段数码管显示
N 到达?
8255灭灯
键盘输入目的楼层(上、下)
程序利用8255A的PA口循环读取开关的变化,当开关有变化时跳
出循环,编写程序查找哪个开关变化,并对应记录该楼层处运行的方向。
初始化时电梯在第一层,若为K1开关变化,则等待用户键盘输入目的楼层(模拟用户进入电梯后的按键动作),若为其他开关变化,则进入上行或者下行。
上行时先用8255A的PB口给红色发光二极管送个低电平,点亮红灯,表示上行,将当前的楼层数作为参数传递给7段数码管,然后调用7段数码管显示当前楼层,经过一段延时之后将当前楼层数减1,查看是否到达目的楼层,若没有
到达则继续调用7段数码管显示当前楼层,直至电梯到达目的楼层,此时将灯熄灭;
同理可得下行的过程。
当电梯到达目的楼层后,等待用户键盘输入要去的楼层数,应注意目的楼层不大于5层且不小于1层,然后将输入的楼层数与当前的楼层数比较,比较过程同上。
到达目的楼层后电梯停下,二极管熄灭,7段数码管的输入参数保
持不变,继续等待用户输入目的楼层。
原理电路图:
D0
D3D4D5D6
D7
红色发光二极管
绿色发光二极管
CLK
DIN
IOWR
IORD
IOY0
A0
A1
........
开关
K1
......K8
D1
D2
CE PC1
RDWR
PB1
PC0
PB0
A0A1
PA7
AD5AD6
AD7
PA0
8255单元 ......
AD0AD1AD2AD3
AD4
总线接口
原理电路图说明:
8255A的WR、RD分别接到PC104总线接口模块的IOWR和
IORD,选通线CE接IOY0,8255A的数据线AD0~AD7、地址线
A0~A7分别用线连接到PC104总线接口模块的数据(D0~D7)、地址线(A0~A7),8255A的PA口(PA0~PA7)对应接开关
K1~K8,PB口PB0、PB1分别接红色发光二极管和绿色发光二极管,
PC口的PC0、PC1分别接7段数码管的CLK和DIN。
程序代码:
STACK1SEGMENT STACK ;
堆栈段STACK1ENDS
DATASEGMENT ;
数据段P8255_AEQU 0180H
P8255_BEQU 0181H
P8255_CEQU 0182HP8255_CONTROLEQU 0183H
;
QIDUANDB 0F9H ;
1
DB 0A4H ;
2
DB 0B0H ;
3
DB 99H ;
4
DB 92H ;
5
INDIRDB 1 ;
人在电梯内部要向哪个方向走,1为向上走,0为向下走
SET1DB 0 ;
初始化第一层时候的判断条件SHOWDB '
Thecurrentflooris:
'
'
$'
DCLK0EQU B ;
CLK低电平DCLK1EQU B ;
CLK高电平DIN0EQU B ;
给PC1口送一个0DIN1EQU B ;
给PC1口送一个1
DELAY_SETEQU 00FFH ;
延时常数DATAENDS
CODESEGMENT ;
代码段ASSUME CS:
CODE,DS:
DATA
START:
MOV AX,DATA ;
DS段初始化
MOV DS,AX
8个开关变化表示该层有按键:
MOV DX,P8255_CONTROL
MOV AL,90H ;
PA口输入(读取开关的状态),PB口输出(控制灯的亮度),PC口用来控制七
段数码管
OUT DX,AL
MOV AL,0FFH ;
因为AL与AH比较是在独处开关状态后进行比较的,如果开始令开关全为1那
么不用赋初值,否则电梯开始就要动
MOV
AH,0FFH
AH记录开关前一时刻的状态,这里初始化开关状态要和AL一样值
CL,31H
初始化楼层,CL代表电梯所处楼层
MAIN:
BL,31H
初始化为第一层,BL代表开关变化所处楼层
PUSH
AX
DX,P8255_B
保护AH和AL
OUT
AL,0FFH
DX,AL
给PB口送FF将灯熄灭
POP
CMP SET1,0 ;
程序运行的时候给七段数码管初始化显示1,之后被屏蔽掉JNE X
数字的
CALLINC
X:
CMP
QIDUANSHOWSET1
CL,35H ;
楼层为5的时候显示一次5即可,否则会不停的给七段数码管送数,会看不清楚
JE
TEMP
CMP
CL,31H ;
楼层为1的时候显示一次1即可,否则会不停的给七段数码管送数,会看不清楚
CALL
TEMP:
MOV
QIDUANSHOW;
调用七段数码管显示电梯所处楼层,把CL传递给七段数码管
DX,P8255_A
IN
AL,DX ;
把开关的状态传递给8255的PA口,AL记录当前时刻的开关状态,下面将用到
AL=CL,AH=CH,先保护好现场
AH,1
INT
21H
AL,AH
AH是前一时刻开关的状态
MAIN
开关未变化则返回主程序继续等待
不相等说明开关肯定有变化,找哪个开关变化了
必须PUSH,保护当前时刻的开关状态AL,前一时刻的开关状态AH
CX
保护一下现场
BH,0
BH表示比较了几次,再写程序判断是哪个楼层,目的楼层想要往哪个方向走
判断哪一层开关有变化,用当前开关状态与开关前一状态比较
FLNUM:
ADD
BH,1
SHL
左移一位
JC
AH1
记录移位值,如果为1则跳至H1
JMP
AH0
AH1:
MOV
CH,1
CH表示前一时刻的开关状态
TEMPH
CH记录初始化值的每一位移位值
AH0:
CH,0
TEMPH:
SHL
AL,1
右移一位
AL1
AL0
AL1:
CL,1
TEMPL
AL0:
CL,0
TEMPL:
CL,CH
AL记录开关变化后读取开关状态的每一位移位值,CH记录初始化值(前一时刻)
的每一位移位值
JE FLNUM ;
相等说明这一位没有变化,则继续向下查找是哪个楼层
不相等则说明到了查找到是哪一层
MOV AH,1 ;
这里再用INDIR表示按键者想要往哪个方向走,初始化为1,表示向上走,为0
则按键者想要向下走
INDIR,AH
F1
是第一层则跳转至F1
BH,2
不是第一层,判断是否为第二层
F2
BH,5
目的楼层为第二层,按键者想要向上走
DOWN2
目的楼层为第二层,想要向下走
BH,3
不是第二层,判断是否为第三层
F3
BH,6
是第三层,想要向上走
DOWN3
是第三层,想要向下走
BH,4
不是第三层,判断是否为第四层
F4
BH,7
是第四层,想要向上走
DOWN4
第四层,想要向下走
AH,0
为第五层则只能向下走
F5
DOWN2:
MOV AH,0
MOV INDIR,AH ;
INDR=0
JMP F2
DOWN3:
JMP F3
DOWN4:
JMP F4
GOMAIN:
JMP MAIN ;
通过一个GOMAIN来跳回到MAINF1:
POP CX
POP AX ;
第1层要求坐电梯
MOV BL,31H ;
BL代表目的楼层CMP CL,BL
JE GO_UP ;
电梯在第一层,肯定要向上走,直接将人送到第五层JA GO_DOWN ;
电梯不在第一层,电梯要先下来
F2:
POP AX
MOV BL,32H ;
第2层要求坐电梯CMP CL,BL
JE GOMAIN
JA GO_DOWN
JB GO_UP
F3:
POP CX ;
第3层要求坐电梯POP AX
MOV BL,33H
CMP CL,BL
JE GOMAIN ;
通过一个GOMAIN来跳回到MAINJA GO_DOWN
F4:
第4层要求坐电梯POP AX
MOV BL,34H
F5:
第5层要求坐电梯POP AX
MOV BL,35H
JE GO_DOWN ;
电梯在第五层,直接将人送到第一层JB GO_UP
电梯来接人
GO_DOWN:
PUSH AX
MOV DX,P8255_B;
给8255PB口对应绿灯OUT一个值,电梯向下走直到按键者所处的位置
MOV AL,0DFH ;
这里的值要根据所接的线对应写一个低电平值,保持绿灯亮OUT DX,AL
DREACH:
CMP CL,BL
JE IN_UD ;
到达目的楼层,跳至判断是外面按键还是里面按键SUB CL,1
CALL DELAY
CALL QIDUANSHOW;
不相等则用七段数码管延时显示楼层JMP DREACH
GO_UP:
给8255PB口对应红灯OUT一个值
MOV AL,0FEH ;
这里的值要根据所接的线对应写一个低电平值,保持红灯亮OUT DX,AL
UREACH:
CMP BL,CL
到达楼层了
ADD CL,1
CALL QIDUANSHOW;
不相等则用七段数码管延时显示楼层
JMP UREACH
IN_UD:
到达楼层了MOV AL,0FFH ;
将灯熄灭
CALL DELAY ;
延迟,表明电梯到目的楼层后有人进去了,然后向5楼或者1楼走
CMP INDIR,1
JE INUP ;
向上走
PUSH AX
MOV AH,1 ;
键盘输入目的楼层向下走INT 21H
MOV BL,AL
向下走
MOV AL,0FDH ;
IN_DOWN:
CALL DELAY
JE RETURN
SUB CL,1
可以去掉
不相等则用七段数码管延时显示楼层JMP IN_DOWN
INUP:
键盘输入目的楼层向上走INT 21H
MOV BL,35H ;
给8255PC口对应红灯OUT一个值
IN_UP:
CALL
DELAY
BL,CL
ADD
RETURN
到达楼层了,返回主程序
不相等则用七段数码管延时显示楼层JMP IN_UP
RETURN:
MOV AH,AL ;
将开关的状态重新赋值给AHMOV BH,0 ;
将判断第几层的BH清零
JMP MAIN
*******************************************
QIDUANSHOWPROC NEAR ;
七段数码管显示楼层
PUSH AX ;
个位数字的显示PUSH CX
PUSH DX
MOV DX,OFFSETSHOW
MOV AH,9
INT 21H
MOV DL,CL
MOV AH,2
SUB CL,30H
MOV DL,0DH
MOV DL,0AH
POP DX
CMP CL,1
JE L1
CMP CL,2
JE L2
CMP CL,3
JE L3
CMP CL,4
JE L4
JMP L5
L1:
MOV AH,0F9H ;
Floor1JMP T1
L2:
MOV AH,0A4H ;
Floor2
T1
L3:
AH,0B0H ;
Floor3
L4:
AH,99H ;
Floor4
L5:
AH,92H ;
Floor5
T1:
CX,01H ;
要显示的数字的每一位移出,如果是1则送DIN1,是0则送DIN0
SEND1:
DX,P8255_CONTROL
AL,DCLK0 ;
DCLK<
-0
RCL
AL,CL
SEND2 ;
是1则跳到SEND2
AL,DIN0 ;
DIN<
-0 将数据0送给PC口的PC1,发送0给七段数码管DX,AL
SEND3
SEND2:
MOV AL,DIN1 ;
-1将数据1送给PC口的PC1,发送1给七段数码管OUT DX,AL ;
完成数据的发送
SEND3:
AL,DCLK1
DX,AL ;
-1
INC
CX,09H
JNZ
SEND1
AL,DIN1
十位数字显示0
AH,0C0H
CX,01H
SEND4:
SEND5 ;
-0 将数据0送给PC口的PC0,发送0给七段数码管
SEND6
SEND5:
SEND6:
MOV AL,DCLK1
OUT DX,AL ;
INC CX
CMP CX,09H
JNZ SEND4
MOV AL,DIN1
POP CX
RETQIDUANSHOWENDP
DELAYPROC NEAR ;
延时程序PUSHF
PUSH CX
MOV DX,DELAY_SETD1:
MOV CX,-1
D2:
DEC CX
JNZ D2 ;
不为0则循环,共有2^16次内层循环
DEC DX
JNZ D1
POPFRET
DELAYENDP
MOV AX,4C00H ;
退出程序
INT 21HCODEENDS
END START
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电梯 调度 模拟 系统