电梯调度模拟系统.docx
《电梯调度模拟系统.docx》由会员分享,可在线阅读,更多相关《电梯调度模拟系统.docx(15页珍藏版)》请在冰豆网上搜索。
微机原理与接口技术---课程设计报告
课题:
电梯调度模拟系统完成时间:
2011年12月成员:
信息工程091
信息工程091
信息工程091
目录
第一部分:
需求分析
第二部分:
设计方案
第三部分:
详细设计
第一部分需
求分析
题目要求:
①7段数码管显示当前楼层
②红色发光二极管表示电梯向上运行,绿色二极管表示向下运行
③楼层不少于5层
④每层设置上、下按钮,表示该层用户要向哪个方向走
设计思想:
根据题目要求整理一下大致的思路:
电路连好线后,7段数码管显示当前电梯所处的楼层,当某楼层用按钮按下时,电梯自动运行到该楼层,用户进入电梯后按下要去的楼层数,电梯便可以将用户送到目的楼层。
电梯在运行过程中用红绿发光二极管表示运行的方向,红色表示上行,绿色表示下行,到达目的楼层后灯被熄灭。
对于多个用户需要乘电梯的问题,分析起来较为复杂,因此我们的程序只允许一次运送一个用户,电梯运行时若有其他楼层的用户按键,则电梯到达当前运行状态的目的楼层后返回到其他用户楼层处再根据要求继续运行。
第二部分设
计方案
在QTH-2008PC实验设备上有7段数码管,8个开关,以及一些芯片的实验区。
因为每一楼层上都有2个上行、下行按钮(第一层和第五层除外),实验设备上仅有8个开关,因此这里我们将楼层设置为5层,用开关状态的变化模拟表示哪一楼层上行或者下行按钮被按下。
开关与楼层对应关系如下:
K1:
第一层向上
K2:
第二层向上
K3:
第三层向上
K4:
第四层向上
K5:
第二层向下
K6:
第三层向下
K7:
第四层向下
K8:
第五层向下
可以选用8255A并行接口芯片的PA端口读取开关的状态,题目要
求当电梯运行时,用红色发光二极管表示电梯上行,绿色发光二极管表示电梯下行,因此可以用8255A的PB端口控制两个二极管的亮灭(连线要与控制字一致,且为低电平时灯才亮),在电梯运行过程中保持灯处于点亮的状态,到达目的楼层后将灯熄灭。
用户进入电梯后通过键盘输入目的楼层,电梯继续运行。
同时在电梯运行过程中,用7段数码管表示电梯当前所处的楼层,用7段数码管显示不同数字表示上行或者下行过程,这个过程可以使用8254定时器进行7段数码管定时显示的功能,也可以书写一段延时程序进行延时。
7段数码管显示时需要给它低电平、显示的数、高电平,因此可以用8255A的PC口控制给7段数码管送高低电平和显示的数。
第三部分详
细设计
开关状态
流程图:
8255A(PA口)
N
开关变化
Y
电梯楼层=目的楼层 N
Y
电梯楼层<目的楼层 电梯楼层>目的楼层
8255 PB控制红色二极管亮,上
8255 PB控制红色二极管亮,上
7段数码管显示
N 到达?
8255灭灯
Y
键盘输入目的楼层(上、下)
程序利用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个开关变化表示该层有按键:
;K1:
第一层向上
;K2:
第二层向上
;K3:
第三层向上
;K4:
第四层向上
;K5:
第二层向下
;K6:
第三层向下
;K7:
第四层向下
;K8:
第五层向下
MOV DX,P8255_CONTROL
MOV AL,90H ;PA口输入(读取开关的状态),PB口输出(控制灯的亮度),PC口用来控制七
段数码管
OUT DX,AL
MOV AL,0FFH ;因为AL与AH比较是在独处开关状态后进行比较的,如果开始令开关全为1那
么不用赋初值,否则电梯开始就要动
MOV
AH,0FFH
;AH记录开关前一时刻的状态,这里初始化开关状态要和AL一样值
MOV
CL,31H
;初始化楼层,CL代表电梯所处楼层
MOV
MAIN:
BL,31H
;初始化为第一层,BL代表开关变化所处楼层
PUSH
MOV
AX
DX,P8255_B
;保护AH和AL
MOV
OUT
AL,0FFH
DX,AL
;给PB口送FF将灯熄灭
POP
AX
CMP SET1,0 ;程序运行的时候给七段数码管初始化显示1,之后被屏蔽掉JNE X
数字的
CALLINC
X:
CMP
QIDUANSHOWSET1
CL,35H ;楼层为5的时候显示一次5即可,否则会不停的给七段数码管送数,会看不清楚
JE
TEMP
CMP
CL,31H ;楼层为1的时候显示一次1即可,否则会不停的给七段数码管送数,会看不清楚
数字的
JE
TEMP
CALL
TEMP:
MOV
QIDUANSHOW;调用七段数码管显示电梯所处楼层,把CL传递给七段数码管
DX,P8255_A
IN
AL,DX ;把开关的状态传递给8255的PA口,AL记录当前时刻的开关状态,下面将用到
AL=CL,AH=CH,先保护好现场
;MOV
AH,1
;INT
21H
CMP
AL,AH
;AH是前一时刻开关的状态
JE
MAIN
;开关未变化则返回主程序继续等待
;不相等说明开关肯定有变化,找哪个开关变化了
PUSH
AX
;必须PUSH,保护当前时刻的开关状态AL,前一时刻的开关状态AH
PUSH
CX
;保护一下现场
MOV
BH,0
;BH表示比较了几次,再写程序判断是哪个楼层,目的楼层想要往哪个方向走
;判断哪一层开关有变化,用当前开关状态与开关前一状态比较
FLNUM:
ADD
BH,1
;BH表示比较了几次,再写程序判断是哪个楼层,目的楼层想要往哪个方向走
SHL
AH,1
;左移一位
JC
AH1
;记录移位值,如果为1则跳至H1
JMP
AH0
AH1:
MOV
CH,1
;CH表示前一时刻的开关状态
JMP
TEMPH
;CH记录初始化值的每一位移位值
AH0:
MOV
CH,0
TEMPH:
SHL
AL,1
;右移一位
JC
AL1
JMP
AL0
AL1:
MOV
CL,1
JMP
TEMPL
AL0:
MOV
CL,0
TEMPL:
CMP
CL,CH
;AL记录开关变化后读取开关状态的每一位移位值,CH记录初始化值(前一时刻)
的每一位移位值
JE FLNUM ;相等说明这一位没有变化,则继续向下查找是哪个楼层
;不相等则说明到了查找到是哪一层
MOV AH,1 ;这里再用INDIR表示按键者想要往哪个方向走,初始化为1,表示向上走,为0
则按键者想要向下走
MOV
INDIR,AH
CMP
BH,1
JE
F1
;是第一层则跳转至F1
CMP
BH,2
;不是第一层,判断是否为第二层
JE
CMP
F2
BH,5
;目的楼层为第二层,按键者想要向上走
JE
DOWN2
;目的楼层为第二层,想要向下走
CMP
BH,3
;不是第二层,判断是否为第三层
JE
CMP
F3
BH,6
;是第三层,想要向上走
JE
DOWN3
;是第三层,想要向下走
CMP
BH,4
;不是第三层,判断是否为第四层
JE
CMP
F4
BH,7
;是第四层,想要向上走
JE
DOWN4
;第四层,想要向下走
MOV
MOV
AH,0
INDIR,AH
;为第五层则只能向下走
JMP
F5
DOWN2:
MOV AH,0
MOV INDIR,AH ;INDR=0
JMP F2
DOWN3:
MOV AH,0
MOV INDIR,AH ;INDR=0
JMP F3
DOWN4: