1、因为每一楼层上都有2个上行、下行按钮(第一层和第五层除外),实验设备上仅有8个开关,因此这里我们将楼层设置为5层,用幵关状态的变化模拟表示哪一楼层上行或者下行按钮被按下。开关与楼层对应关系如下:K1:第一层向上K2:第二层向上K3:第三层向上K4:第四层向上K5:第二层向下 K6:第三层向下K7:第四层向下K8:第五层向下8255A8255A8255A可以选用并行接口芯片的PA端口读取开关的状态,题目要求当电梯运行时,用红色发光二极管表示电梯上行,绿色发光二极管表示电梯下行,因此可以用的PB端口控制两个二极管的亮灭(连线要与控制字一致,且为低电平时灯才亮),在电梯运行过程中保持灯处于点亮的状态
2、,到达目的楼层后将灯熄灭。用户进入电梯后通过键盘输入目的楼层,电梯继续运行。同时在电梯运行过程中,用7段数码管表示电梯当前所处的楼层,用7段数码管 显示不同数字表示上行或者下行过程,这个过程可以使用8254定时器进行7段数码管定时显示的功能,也可以书写一段延时程序进行延时。7段数码管显示时需要给它低电平、显示的数、高电平,因此可以用的PC 口控制给7段数码管送高低电平和显示的第三部分流程8255A8255A程序利用的P A 口循环读取开关的变化,当开关有变化时跳出循环,编写程序查找哪个开关变化,并对应记录该楼层处运行的方向。初始化时电梯在第一层,若为K1幵关变化,则等待用户键盘输入目的楼层(模
3、拟用户进入电梯后的按键动作),若为其他开关变化,则进入上行或者下行。上行时先用的PB 口给红色发光二极管送个低电平,点亮红灯,表示上行,将当前的楼层数作为参数传递给7段数码管,然后调用7段数码管显示当前楼层,经过一段延时之后将当前楼层数减1,查看是否到达目的楼层,若没有到达则继续调用7段数码管显示当前楼层,直至电梯到达目的楼层,此时将灯熄灭;同理可得下行的过程。当电梯到达目的楼层后,等待用户键盘输入要去的楼层数,应注意目的楼层不大于S层且不小于1层,然后将输入的楼层数与当前的楼层数比较,比较过程同上到达目的楼层后电梯停下,二极管熄灭,7段数碍管的输入参数保持不变,继续等待用户输入目的楼层原理电
4、路图:ADOADIAD2AD3PAOAD48255 单元.AD5PA7Zz. XI2. 1/ AD6PBO巴及几一izi hTAD74 Ei 汉儿.-w LA0PB1A1PCOCEPCIRDWRDO DI D2 D3 D4 .总 DS 线 D6 接D7红n AOA1 CLK IOY 0 DI IORD IOWR原理电路图说明:8255A8255A8255A的W R、RD分别接到PC 104总线接口模块的IOWR和IORD,选通线CE接IOYO ,的数据线AD0A D7、地址线A0A 7分别用线连接到PC 104总线接口模块的数据(D0D7)、地址线(A0A7),的PA 口(PA0PA7)对应接
5、开关K 1K8, PB 口PB0、PB1分别接红色发光二极管和绿色发光二极管,PC 口的PC 0、PCI分别接7段数码管的CLK和DI程序代码:STACK1 SEGMENT STACK ;堆栈段STACK1 ENDSDATA S EGMENT ;数据段 P8255_A E QU 0 180HP 8255B EQ U01 81H P8 255_C EQU 018 2HP825SC ONTROL EQ U 01 83HOF;QIDUANDB9H;10A;DB4H;2;DB OBOH ;3DB 99H ;4DB 92H ;5INDIR DB1;人在电梯内部要向哪个方向走,1为向上走,0为向下走 SE
6、Tl DB 0 ;初始化第一层时候的判断条件SHOW DB *The curre nt floor i s:V$DCLKO EQU 00000000B ;CLK 低电平 DCL K1 EQU 000000 01B ;CLK 髙电平 DINO EQU 000 00010B ;给 PCI 口送一个0 DIN 1 EQU 0000001 IB ;给 PCI 口送一个 1 DE LAY_SET E QU 0 OFFH ;延时常数 DATA ENDSCODE SEGM ENT ;代码段ASSU ME CSX ODE,DS:DAT ASTA RT: MOV AX,DA TA ;DS 段初始化MOV DS
7、,AX;8个开关变化表示该层有按键:K 1:K 2:K3 :KS:第二层向下K6:M OV D X,P8255CO NTROLMOV AL,90H;PA 口输入(读取开关的状态),PB 口输出(控制灯的亮度),PC 口用来控制七段数码管DX,AL OUTMOVAUOFFH;因力AL与AH比较是在独处开关状态后进行比较的,如果幵始令开关全为1那么不用赋初值,否则电梯幵始就要动MOV A H,OFFH ;AH记录开关前-时刻的状态,这里初始化开关状态要和AL -样值MOV CL,3 1H ;初始化楼层,CL代表电梯所处楼层MOV B L,31H ;初始化为第一层,BL代表开关变化所处楼层MAIN
8、:PUSH AX ;保护 A H 和 ALMOVDX ,P825S 一 BMOV AL,OFFH ;给PB 口送FF将灯熄灭DX,AL OUTPOP AXCMP SETl,0 ;程汴运行的吋候给七段数码管初始化敁示1,之后被墀蔽掉 JN E X CALL QIDUANS HOWINC SET 1X: CMP CL35 H ;楼层为5的吋候敁示-次S即可,否则会不停的给七段数码管送数,会看不清楚数字的JE TEMPCMP CL,31H;楼层为1的时候显示一次1即可,否则会不停的给七段数码管送数,会看不淸楚数字的CALLQIDUANSHOW ;调用七段数码管显示电梯所处楼层,把CL传递给七段数码管
9、TE MP: MOV DX,P8 2SSAIN A L,DX ;把开关的状态传递给8255的PA 口,AL记录当前时刻的开关状态,下面将用到A L=CL,AH=CH ,先保护好现场MOV AH,1INT21HCMP AL,AH ;AH是前-吋刻开关的状态JE MAIN ;开关未变化则返回主程序继续等待不相等说明开关肯定有变化,找哪个开关变化了必须PUS H,保护当前时刻的开关状态AL,前一时刻的开关状态AH PUSH CX ;保护一下现场MOVBH,0;BH表示比较了几次,再写程序判断足哪个楼层,目的楼层想要往哪个方向走判断哪一层开关有变化,用当前开关状态与开关前一状态比较FLNUM:ADDB
10、H,1;BH表示比较了几次,再写程序判断是哪个楼层,目的楼层想要往哪个方向走SHL AH,1 ;左移一位JCAH1;记录移位值,如果为1则跳至H1JMP AH0AH1:MOV CH,1 ;CH表示前一时刻的开关状态JMP TEMPH ;CH记录初始化值的每一位移位值AH 0: MOV CH ,0TEMPH : SHL AL,1 ;右移-位JC AL1 JMP ALOAL1: MOV CL ,1 JMP TEMP L ALO: MOVCL,0 TEMPL :CMP CL,CH;AL记录开关变化识读取开关状态的每一位移位值,CH记录初始化值(前一时刻)的每一位移位值 JEFLNUM相等说明这一位没
11、有变化,则继续向下査找是哪个楼层不相等则说明到了査找到是哪-层MOV AH,1;这里再用IN DIR表示按键者想要往哪个方向走,初始化为1,表示向上走,为0则按键者想要向下走 MOV INDIR,AH CMP BH,1JE FI ;是第一层则跳转至nCMP BH,2 ;不是第一层,判断是否为第二层JEF2;目的楼层为第二层,按键者想要向上走CMP BH,5JED0WN2;目的楼层为第二戾,想要向下走CMPBH,3;不是第二层,判断是否为第三层JEF3;足第三层,想要向上走 CMP BH,6JED0WN3;是第三层,想要向下走CMP BH ,4;不是第三层,判断是否为第四层JEF 4;是第四层,
12、想要向上走CMP BH/7JED0WN4;第四层,想要向下走MOV AH,O ;为第五层则只能向下走 MOV IND IR,AHJ MP F 5DOWN2: M OV A H,0 MOV INDIR,AH ;INDR=O JMP F2DOWN3: MOV AH,0 MOV INDIR,AH ;IND R=0 JMP F3DOWN4 :INDR=O JMP F4GOMAINJMP MAIN ;通过一个 GOM AIN 来跳回到 MAI NFI: POP CXPOP AX ;第1层要求坐电梯MOV BL,3 1H ;BL代表目的楼层CMP CL,BLJEGO_UP;电梯在第一层,肯定要向上走,直接将人送到第五层JAGO_DOWN;电梯不在第一层,电梯要先下来 F2:POP CX POP AXMOV BL,32H ;第2层要求坐屯梯CM P CL ,BLJE GOM AINJA GO一DOWN JBGOJJPF3: POP CX ;第3层要求坐电梯POP AX MOV BL ,33H CM P CL ,BLJE GOM AIN ;通过一个GOMAIN来跳回到MAINJA GO_DOWN JB GO.UPF4:PO
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1