微机原理与接口技术课程设计报告电梯调度模拟系统_第1页
微机原理与接口技术课程设计报告电梯调度模拟系统_第2页
微机原理与接口技术课程设计报告电梯调度模拟系统_第3页
微机原理与接口技术课程设计报告电梯调度模拟系统_第4页
微机原理与接口技术课程设计报告电梯调度模拟系统_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 微机原理与接口技术-课程设计报告 课题:电梯调度模拟系统完成时间:2011年12月成员:信息工程091 信息工程091 信息工程091 目录第一部分:需求分析第二部分:设计方案第三部分:详细设计第一部分需求分析题目要求: 7段数码管显示当前楼层 红色发光二极管表示电梯向上运行,绿色二极管表示向下运行 楼层不少于5层 每层设置上、下按钮,表示该层用户要向哪个方向走设计思想:根据题目要求整理一下大致的思路:电路连好线后,7段数码管显示当前电梯所处的楼层,当某楼层用按钮按下时,电梯自动运行到该楼层,用户进入电梯后按下要去的楼层数,电梯便可以将用户送到目的楼层。电梯在运行过程中用红绿发光二极管表示运

2、行的方向,红色表示上行,绿色表示下行,到达目的楼层后灯被熄灭。对于多个用户需要乘电梯的问题,分析起来较为复杂,因此我们的程序只允许一次运送一个用户,电梯运行时若有其他楼层的用户按键,则电梯到达当前运行状态的目的楼层后返回到其他用户楼层处再根据要求继续运行。第二部分设计方案在qth-2008pc实验设备上有7段数码管,8个开关,以及一些芯片的实验区。因为每一楼层上都有2个上行、下行按钮(第一层和第五层除外),实验设备上仅有8个开关,因此这里我们将楼层设置为5层,用开关状态的变化模拟表示哪一楼层上行或者下行按钮被按下。开关与楼层对应关系如下:k1:第一层向上k2:第二层向上k3:第三层向上k4:第

3、四层向上k5:第二层向下k6:第三层向下k7:第四层向下 k8:第五层向下可以选用8255a并行接口芯片的pa端口读取开关的状态,题目要求当电梯运行时,用红色发光二极管表示电梯上行,绿色发光二极管表示电梯下行,因此可以用8255a的pb端口控制两个二极管的亮灭(连线要与控制字一致,且为低电平时灯才亮),在电梯运行过程中保持灯处于点亮的状态,到达目的楼层后将灯熄灭。用户进入电梯后通过键盘输入目的楼层,电梯继续运行。同时在电梯运行过程中,用7段数码管表示电梯当前所处的楼层,用7段数码管显示不同数字表示上行或者下行过程,这个过程可以使用8254定时器进行7段数码管定时显示的功能,也可以书写一段延时程

4、序进行延时。7段数码管显示时需要给它低电平、显示的数、高电平,因此可以用8255a的pc口控制给7段数码管送高低电平和显示的数。第三部分详细设计开关状态流程图:8255a(pa口)开关变化n电梯楼层=目的楼层yn电梯楼层>目的楼层电梯楼层<目的楼层y8255 pb控制红色二极管亮,上行8255 pb控制红色二极管亮,上行7段数码管显示到达? n8255 灭灯y键盘输入目的楼层(上、下)程序利用8255a的pa口循环读取开关的变化,当开关有变化时跳出循环,编写程序查找哪个开关变化,并对应记录该楼层处运行的方向。初始化时电梯在第一层,若为k1开关变化,则等待用户键盘输入目的楼层(模拟用

5、户进入电梯后的按键动作),若为其他开关变化,则进入上行或者下行。上行时先用8255a的pb口给红色发光二极管送个低电平,点亮红灯,表示上行,将当前的楼层数作为参数传递给7段数码管,然后调用7段数码管显示当前楼层,经过一段延时之后将当前楼层数减1,查看是否到达目的楼层,若没有到达则继续调用7段数码管显示当前楼层,直至电梯到达目的楼层,此时将灯熄灭;同理可得下行的过程。当电梯到达目的楼层后,等待用户键盘输入要去的楼层数,应注意目的楼层不大于5层且不小于1层,然后将输入的楼层数与当前的楼层数比较,比较过程同上。到达目的楼层后电梯停下,二极管熄灭,7段数码管的输入参数保持不变,继续等待用户输入目的楼层

6、。原理电路图:ad0ad1ad2ad3 pa0ad4 8255单元 .ad5 pa7 ad6ad7 pb0a0 pb1a1 pc0ce pc1rdwr d0开关k1.k8 d1 d2 d3 d4 . 总 d5 线 d6 接 d7 红色发光二极管 口 a0 绿色发光二极管 a1 clk ioy0 din iord iowr原理电路图说明:8255a的wr、rd分别接到pc104总线接口模块的iowr和iord,选通线ce接ioy0,8255a的数据线ad0ad7、地址线a0a7分别用线连接到pc104总线接口模块的数据(d0d7)、地址线(a0a7),8255a的pa口(pa0pa7)对应接开关

7、k1k8,pb口pb0、pb1分别接红色发光二极管和绿色发光二极管,pc口的pc0、pc1分别接7段数码管的clk和din。程序代码: stack1 segment stack ;堆栈段 stack1 ends data segment ;数据段 p8255_a equ 0180h p8255_b equ 0181h p8255_c equ 0182h p8255_control equ 0183h ;qiduan db 0f9h ;1 ;db 0a4h ;2 ;db 0b0h ;3 ;db 99h ;4 ;db 92h ;5 indir db 1 ;人在电梯内部要向哪个方向走,1为向上走,0

8、为向下走 set1 db 0 ;初始化第一层时候的判断条件 show db 'the current floor is:','$' dclk0 equ 00000000b ;clk低电平 dclk1 equ 00000001b ;clk高电平 din0 equ 00000010b ;给pc1口送一个0 din1 equ 00000011b ;给pc1口送一个1 delay_set equ 00ffh ;延时常数 data ends code segment ;代码段 assume cs:code,ds:data start: mov ax,data ;ds段初始

9、化 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

10、 cl,31h ;初始化楼层,cl代表电梯所处楼层 mov bl,31h ;初始化为第一层,bl代表开关变化所处楼层 main: push ax ;保护ah和al mov dx,p8255_b mov al,0ffh ;给pb口送ff 将灯熄灭 out dx,al pop ax cmp set1,0 ;程序运行的时候给七段数码管初始化显示1,之后被屏蔽掉 jne x call qiduanshow inc set1 x: cmp cl,35h ;楼层为5的时候显示一次5即可,否则会不停的给七段数码管送数,会看不清楚数字的 je temp cmp cl,31h ;楼层为1的时候显示一次1即可,否

11、则会不停的给七段数码管送数,会看不清楚数字的 je temp call qiduanshow ;调用七段数码管显示电梯所处楼层,把cl传递给七段数码管 temp: mov 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

12、 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: mo

13、v 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 f2 ;目的楼层为第二层,按键者想要向上走 cmp bh,

14、5 je down2 ;目的楼层为第二层,想要向下走 cmp bh,3 ;不是第二层,判断是否为第三层 je f3 ;是第三层,想要向上走 cmp bh,6 je down3 ;是第三层,想要向下走 cmp bh,4 ;不是第三层,判断是否为第四层 je f4 ;是第四层,想要向上走 cmp bh,7 je down4 ;第四层,想要向下走 mov ah,0 ;为第五层则只能向下走 mov 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

15、f3 down4: mov ah,0 mov indir ,ah ;indr=0 jmp f4 gomain: jmp main ;通过一个gomain来跳回到main f1: pop cx pop ax ;第1层要求坐电梯 mov bl,31h ;bl代表目的楼层 cmp cl,bl je go_up ;电梯在第一层,肯定要向上走,直接将人送到第五层 ja go_down ;电梯不在第一层,电梯要先下来 f2: pop cx pop ax mov bl,32h ;第2层要求坐电梯 cmp cl,bl je gomain ja go_down jb go_up f3: pop cx ;第3层要

16、求坐电梯 pop ax mov bl,33h cmp cl,bl je gomain ;通过一个gomain来跳回到main ja go_down jb go_up f4: pop cx ;第4层要求坐电梯 pop ax mov bl,34h cmp cl,bl je gomain ja go_down jb go_up f5: pop cx ;第5层要求坐电梯 pop ax mov bl,35h cmp cl,bl je go_down ;电梯在第五层,直接将人送到第一层 jb go_up ;电梯来接人 go_down: push ax mov dx,p8255_b ;给8255 pb口对应

17、绿灯out一个值,电梯向下走直到按键者所处的位置 mov al,0dfh ;这里的值要根据所接的线对应写一个低电平值,保持绿灯亮 out dx,al pop ax dreach: cmp cl,bl je in_ud ;到达目的楼层,跳至判断是外面按键还是里面按键 sub cl,1 call delay call delay call qiduanshow ;不相等则用七段数码管延时显示楼层 jmp dreach go_up: push ax mov dx,p8255_b ;给8255 pb口对应红灯out一个值 mov al,0feh ;这里的值要根据所接的线对应写一个低电平值,保持红灯亮

18、out dx,al pop ax ureach: cmp bl,cl je in_ud ;到达楼层了 add cl,1 call delay call delay call qiduanshow ;不相等则用七段数码管延时显示楼层 jmp ureach in_ud: push ax mov dx,p8255_b ;到达楼层了 mov al,0ffh ;将灯熄灭 out dx,al pop ax call delay ;延迟,表明电梯到目的楼层后有人进去了,然后向5楼或者1楼走 cmp indir,1 je inup ;向上走 push ax mov ah,1 ;键盘输入目的楼层向下走 int

19、21h mov bl,al pop ax ;mov bl,31h ;向下走 push ax mov dx,p8255_b ;给8255 pb口对应绿灯out一个值,电梯向下走直到按键者所处的位置 mov al,0fdh ;这里的值要根据所接的线对应写一个低电平值,保持绿灯亮 out dx,al pop ax in_down: call delay call delay cmp cl,bl je return sub cl,1 call delay ;可以去掉 call qiduanshow ;不相等则用七段数码管延时显示楼层 jmp in_down inup: push ax mov ah,1

20、 ;键盘输入目的楼层向上走 int 21h mov bl,al pop ax ;mov bl,35h ;向上走 push ax mov dx,p8255_b ;给8255 pc口对应红灯out一个值 mov al,0feh ;这里的值要根据所接的线对应写一个低电平值,保持红灯亮 out dx,al pop ax in_up: call delay call delay cmp bl,cl je return ;到达楼层了,返回主程序 add cl,1 call delay ;可以去掉 call qiduanshow ;不相等则用七段数码管延时显示楼层 jmp in_up return: mov

21、 ah,al ;将开关的状态重新赋值给ah mov bh,0 ;将判断第几层的bh清零 jmp main;* qiduanshow proc near ;七段数码管显示楼层 push ax ;个位数字的显示 push cx push dx mov dx,offset show mov ah,9 int 21h mov dl,cl mov ah,2 int 21h sub cl,30h mov dl,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h pop dx cmp cl,1 je l1 cmp cl,2 je l2 cmp cl,3 je l

22、3 cmp cl,4 je l4 jmp l5 l1: mov ah,0f9h ;floor 1 jmp t1 l2: mov ah,0a4h ;floor 2 jmp t1 l3: mov ah,0b0h ;floor 3 jmp t1 l4: mov ah,99h ;floor 4 jmp t1 l5: mov ah,92h ;floor 5 t1: mov cx,01h ;要显示的数字的每一位移出,如果是1则送din1,是0则送din0 send1: mov dx,p8255_control mov al,dclk0 ;dclk<-0 out dx,al mov al,ah rcl al,cl jc send2 ;是1则跳到send2 mov al,din0 ;din<-0 将数据0送给pc口的pc1,发送0给七段数码管 out dx,al jmp send3 send2: mov al,din1 ;din<-1 将数据1送给pc口的pc1,发送1给七段数码管 o

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论