51单片机简易电梯控制程序[整理]
51单片机简易电梯控制程序
ORG 00H
N1 EQU 0020H ;系统初始化
ORG 0030H
MOV R0,#8
MOV R7,#0
MOV N1,#0
START: MOV R2,#15
CALL XS ;显示数据
JNB P3.5,$ ;检测急停键是否弹起
CALL XIAODOU
JNB P3.5,$
CALL XINCEN
CALL ANJ
JMP START
XINCEN: ;扫描急停键
JB P3.5,B0
CALL XIAODOU
JB P3.5,B0
CALL XIAODOU
JB P3.5,B0
CALL XIAODOU
JB P3.5,B0
CALL XIAODOU
JB P3.5,B0
SETB P0.7 ;关闭输出
SETB P0.5
MOV N1,#0 ;清空指令代码
MOV R2,#0
JMP START ;返回开始
RET
B0: JB P0.3,B1 ;扫描一楼行程,获取楼层信号
CALL XIAODOU
JB P0.3,B1
CALL XIAODOU
JB P0.3,B1
CALL XIAODOU
JB P0.3,B1
CALL XIAODOU
JB P0.3,B1
MOV R0,#1 ;载入1层代码1,2
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示1层半,3表示2层,4表
示2层半,5表示3层,6表示3层半,7表示4层
MOV R7,#1
CALL XS ;显示数据
RET
B1: JB P0.2,B2 ;扫描2楼行程,获取楼层信号
CALL XIAODOU
JB P0.2,B2
CALL XIAODOU
JB P0.2,B2
CALL XIAODOU
JB P0.2,B2
CALL XIAODOU
JB P0.2,B2
MOV R0,#3 ;载入2层代码
MOV R7,#2
CALL XS
RET
B2: JB P0.1,B3 ;扫描3楼行程,获取楼层信号
CALL XIAODOU
JB P0.1,B3
CALL XIAODOU
JB P0.1,B3
CALL XIAODOU
JB P0.1,B3
CALL XIAODOU
JB P0.1,B3
MOV R0,#5 ;载入3层代码
MOV R7,#3
CALL XS
RET
B3: JB P0.0,ANJ ;扫描4楼行程,获取楼层信号
CALL XIAODOU
JB P0.0,ANJ
CALL XIAODOU
JB P0.0,ANJ
CALL XIAODOU
JB P0.0,ANJ
CALL XIAODOU
JB P0.0,ANJ
MOV R0,#7 ;载入4层代码
MOV R7,#4
CALL XS
RET
ANJ: JB P2.0,C1 ;扫描按键,获取目的层
CALL XIAODOU
JB P2.0,C1
CALL XIAODOU
JB P2.0,C1
CALL XIAODOU
JB P2.0,C1
CALL XIAODOU
JNB P2.0,$
MOV N1,#1 ;载入目的1楼代码,R6为副寄存器
MOV R6,#1
MOV R2,#10
CALL XS
CALL BIJAO
RET
C1: JB P2.1,C2
CALL XIAODOU
JB P2.1,C2
CALL XIAODOU
JB P2.1,C2
CALL XIAODOU
JB P2.1,C2
CALL XIAODOU
JNB P2.1,$
MOV N1,#3 ;载入目的2楼代码,R6为副寄存器
MOV R6,#3
MOV R2,#11
CALL XS
CALL BIJAO
RET
C2: JB P2.2,C3
CALL XIAODOU
JB P2.2,C3
CALL XIAODOU
JB P2.2,C3
CALL XIAODOU
JB P2.2,C3
CALL XIAODOU
JNB P2.2,$
MOV N1,#5 ;载入目的3楼代码,R6为副寄存器
MOV R6,#5
MOV R2,#12
CALL XS
CALL BIJAO
RET
C3: JB P2.3,TIAO
CALL XIAODOU
JB P2.3,TIAO
CALL XIAODOU
JB P2.3,TIAO
CALL XIAODOU
JB P2.3,TIAO
CALL XIAODOU
JNB P2.3,$
MOV N1,#7 ;载入目的4楼代码,R6为副寄存器
MOV R6,#7
MOV R2,#4
CALL XS
CALL BIJAO
RET
TIAO:JMP XINCEN
RET
BIJAO: ;楼层比较子程序
MOV A,R0 ;楼层数与目的层不相等则转到大小比较段,比较大
小
CJNE A,N1,DIFF
JMP START
DIFF: JNC NEXT ;没有进位,说明目的层小于楼层,转到下行段
JMP UP ;有进位,说明目的层大于楼层,转到上行段
RET
NEXT: JMP DOWN
RET
UP: CLR P0.4 ;输出关门指令
CALL OPEN ;关门时间延时
SETB P0.4 ;关门完成
CALL OPENDOOR
K1: SETB P0.5 ;上行子程序段,禁止向下动作,输出上行指令
CLR P0.7
CALL XINCEN ;扫描行程,按键
CALL CUZUO ;检测否出错
MOV A,R0
CJNE A,N1,D1 ;判断是否到达指定层,没有则继续上行,到达则关闭上
行,返回开始
SETB P0.7
CALL OPENDOOR
CLR P0.6 ;输出开门指令
CALL OPEN ;关门时间延时
SETB P0.6 ;关门完成
JMP START
D1: JNC K2
INC R0
JMP K1
RET
DOWN: CLR P0.4 ;输出关门指令
CALL OPEN ;关门时间延时
SETB P0.4 ;关门完成
CALL OPENDOOR
K2: SETB P0.7 ;下行子程序段,禁止向上动作,输出下行指令
CLR P0.5
CALL XINCEN ;扫描行程,按键
CALL CUZUO ;检测是否出错
MOV A,R0
CJNE A,N1,D2 ;判断是否到达指定层,没有则继续下行,到达则关闭下行,
返回开始
SETB P0.5
CALL OPENDOOR
CLR P0.6 ;输出开门指令
CALL OPEN ;关门时间延时
SETB P0.6 ;关门完成
JMP START
D2: JC K1
DEC R0
JMP K2
RET
XS: ;显示数据 子程序
MOV A,R7
SWAP A
ADD A,R2
MOV P1,A
RET
CUZUO:MOV A,N1 ;出错比较子程序
CJNE A,#1,Y1 ;出错更正,若目的数不是1,2,3,4层的代码,
则将副寄存器R6的值写入主寄存器N1中
RET
Y1: CJNE A,#3,Y2
RET
Y2: CJNE A,#5,Y3
RET
Y3: CJNE A,#7,Y4
RET
Y4: MOV N1,R6
RET
XIAODOU: ;消抖动延时子程序
MOV R3,#60
F1: MOV R4,#248
DJNZ R4,$
DJNZ R3,F1
RET
OPEN: ;开门延时子程序
MOV R3,#80
L1:
MOV R4,#200
L2:
MOV R5,#248
DJNZ R5,$
DJNZ R4,L2
DJNZ R3,L1
RET
OPENDOOR: ;延时开门子程序
MOV R3,#100
L3:
MOV R4,#20
L4:
MOV R5,#248
DJNZ R5,$
DJNZ R4,L4
DJNZ R3,L3
RET