📄 lll.asm
字号:
ACALL DELAY
ACALL DELAY ; ...
ACALL DELAY
ACALL DELAY
ACALL DELAY ; ...
ACALL DELAY
MOV P0,#0CH ; 开显示
ACALL ENABLE
JNB CHECK,ERR4 ; 等待键释放
MOV 65H,#00H ; 检修完毕信号送65H
MOV 64H,#9
MOV 30H,#1
MOV R0,#31H ; 一楼信号送R0
CLY: MOV @R0,#00H ; 清除该信号
INC R0 ; 加1后送R0
DJNZ 64H,CLY ; 自减循环8次
AJMP MAIN
;=========================================
DISP: ; 显示子程序
CJNE R2,#00H,DISP1 ; 楼层信号判断
Mov dptr,#table2 ; 送向下显示代码
SJMP DISP2 ; 跳显示主程序
DISP1: CJNE R2,#11H,DISP3 ; 楼层信号判断
Mov dptr,#table1 ; 送向上显示代码
SJMP DISP2 ; 跳显示主程序
DISP3: CJNE R2,#33H,DISP4
MOV DPTR,#TABLE00 ; 楼层信号判断
AJMP DISP2
DISP4: MOV DPTR,#TABLE3
DISP2: MOV R1,#00H ; 送代码指针到R1
Acall write1 ; 调1602读数据子程序
mov p0,#0c0h ; 显示位置设置
Acall enable ; 调1602写数据子程序
MOV A,30H ; 当前楼层信号送A
CJNE A,#1,NT1 ; 等于1显示1F
SJMP DISP01
NT1: CJNE A,#2,NT2 ; 等于2显示2F
SJMP DISP02
NT2: CJNE A,#3,NT3 ; 等于3显示3F
SJMP DISP03
NT3: CJNE A,#4,NT4 ; 等于4显示4F
SJMP DISP04
NT4: CJNE A,#5,NT5 ; 等于5显示5F
SJMP DISP05
NT5: CJNE A,#6,NT6 ; 等于6显示6F
SJMP DISP06
NT6: CJNE A,#7,NT7 ; 等于7显示7F
SJMP DISP07
DISP01: mov dptr,#table10 ; 1楼显示代码首地址
SJMP EXP
DISP02: MOV DPTR,#TABLE20 ; 2楼显示代码首地址
SJMP EXP
DISP03: MOV DPTR,#TABLE30 ; 3楼显示代码首地址
SJMP EXP
DISP04: MOV DPTR,#TABLE40 ; 4楼显示代码首地址
SJMP EXP
DISP05: MOV DPTR,#TABLE50 ; 5楼显示代码首地址
SJMP EXP
DISP06: MOV DPTR,#TABLE60 ; 6楼显示代码首地址
SJMP EXP
DISP07: MOV DPTR,#TABLE70 ; 7楼显示代码首地址
SJMP EXP ; 转显示主程序
; 等于8显示8F
NT7: CJNE A,#8,CHECKING
MOV DPTR,#TABLE80 ; 8楼显示代码首地址
SJMP EXP
CHECKING:
MOV DPTR,#TABLE100
EXP: Acall write1 ; 调1602读数据子程序
mov p0,#0c2h ; 显示位置设置
Acall enable ; 调1602写数据子程序
MOV P0,#80H ; 显示位置
ACALL ENABLE ; 调1602写数据子程序
RET ; 返回
;=======================================
KEYBORDSCAN: ; 键盘扫描子程序
JNB DOOR,COMP ; 首次判断
AJMP L1 ; 转扫描主程序
COMP: ACALL DELAY ; 消斗
JNB DOOR,COMP0 ; 二次判断
L1: JNB CHECK,CHECK1
AJMP L2
CHECK1: ACALL DELAY
JNB CHECK,CHECK2
L2: MOV 70H,#0F7H ; 开始扫描
MOV 71H,#00H ; 00H送键盘信号寄存器
L3: MOV A,70H ; 送扫描信号到A
MOV P1,A ; 送扫描信号到P1口
MOV A,P1 ; 读取P1口信息
MOV 50H,A ; 暂存P1口信息
SETB C ; CY=1
MOV 72H,#4 ; 列扫描初值送72H单元
L4: RLC A ; 带CY左移P1口信号
JNC KEY ; CY?=0
INC 71H ; CY=1,键盘信号寄存器加1
DJNZ 72H,L4 ; 子减72H单元内容
MOV A,70H ; 扫描信号送到A
SETB C ; 让CY=1
RRC A ; 带CY右移扫描信号
MOV 70H,A ; 暂存扫描
JC L3 ; CY?=1
AJMP KEYBORDSCAN1 ; CY=0退出扫描
KEY: MOV R7,#10 ; CY=0,有键按下
D1: MOV R6,#248 ; 25MS延时消斗
DJNZ R6,$ ; 25MS延时消斗
DJNZ R7,D1 ; 25MS延时消斗
MOV A,71H ; 取键盘信号
MOV DPTR,#TABLE ; 送键盘代码首地址到DPTR
MOVC A,@A+DPTR ; 查表,求键值,送A
AJMP DATASCAN ; 跳至键盘数据读取程序
;=============================
COMP0: ACALL DELAY ; 门开关键
JNB DOOR,$ ; 等待键释放
CJNE R2,#0FFH,KEYBORDSCAN10 ; 判断电梯状态
CPL MEN ; 停止时开启或关闭电梯门
CPL 7FH
MOV 31H,#00H ; 清除楼层请求指针信号
AJMP KEYBORDSCAN10
CHECK2: ACALL DELAY
JNB CHECK,$
MOV A,65H
CJNE A,#00H,KEYBORDSCAN10
CLR JINGGAO
KEYBORDSCAN10:
AJMP KEYBORDSCAN1 ; 退出扫描
DATASCAN: ; 读取键盘数据
CJNE A,#01H,COMP1 ; 1号键
MOV 21H,#1
MOV 31H,#0FFH
AJMP KEYBORDSCAN1 ; 退出扫描
COMP1: CJNE A,#02H,COMP3 ; 2号键
MOV 22H,#1 ; 2楼信号指针送1
MOV 32H,#0FFH ; 2楼请求信号送0FFH
AJMP KEYBORDSCAN1 ; 退出扫描
COMP3: CJNE A,#03H,COMP4 ; 3号键
MOV 23H,#1 ; 3楼信号指针送1
MOV 33H,#0FFH ; 3楼请求信号送0FFH
AJMP KEYBORDSCAN1 ; 退出扫描
COMP4: CJNE A,#04H,COMP5 ; 4号键
MOV 24H,#1 ; 4楼信号指针送1
MOV 34H,#0FFH ; 4楼请求信号送0FFH
AJMP KEYBORDSCAN1 ; 退出扫描
COMP5: CJNE A,#05H,COMP6 ; 5号键
MOV 25H,#1 ; 5楼信号指针送1
MOV 35H,#0FFH ; 5楼请求信号送0FFH
AJMP KEYBORDSCAN1 ; 退出扫描
COMP6: CJNE A,#06H,COMP7 ; 6号键
MOV 26H,#1 ; 6楼信号指针送1
MOV 36H,#0FFH ; 6楼请求信号送0FFH
AJMP KEYBORDSCAN1 ; 退出扫描
COMP7: CJNE A,#07H,COMP8 ; 7号键
MOV 27H,#1 ; 7楼信号指针送1
MOV 37H,#0FFH ; 7楼请求信号送0FFH
AJMP KEYBORDSCAN1 ; 退出扫描
COMP8: CJNE A,#08H,KEYBORDSCAN1 ; 8号键
MOV 28H,#1 ; 8楼信号指针送1
MOV 38H,#0FFH ; 8楼请求信号送0FFH
KEYBORDSCAN1:
RET ; 退出扫描
;=============================定时报警限制
TT0: PUSH ACC ; 保护ACC
MOV TH0,#3CH ; 重置定时器初值
MOV TL0,#0B0H
DJNZ R3,OUT ; 循环指针自减1
MOV R3,#50 ; 减完后重置初值
MOV A,65H ; (65H)送到A
CJNE A,#0FFH,KK ; 是否为0FFH
AJMP UUUU ; 下行
KK: JNB XIANWEI,CONT ; 电梯限位判断
JNB XIANWEI,CONT
JNB XIANWEI,CONT
JNB XIANWEI,CONT
CLR JINGGAO ; =0发出警告
CLR TR0 ; 关闭定时器
AJMP OUT ; 退出中断
CONT: CJNE R2,#11H,UUU ; 当前运行状态判断
INC 30H ; 上行将楼层信号加1
MOV A,30H ; 信号送到A
CJNE A,#9,OUT ; 顶层判断
MOV 30H,#8 ; 重置初值
SJMP OUT ; 退出中断
UUU: CJNE R2,#00H,OUT ; 楼层运行状态判断
UUUU: DEC 30H ; 下行将楼层信号减1
MOV A,30H ; 信号送到A
CJNE A,#0,OUT ; 极限判断
MOV 30H,#1 ; 重置初值
OUT: POP ACC ; 恢复ACC的内容
RETI ; 退出中断
;======================================
ENABLE: ; 1602写数据子程序
CLR RS ; RS=0
CLR RW ; RW=0
CLR E ; E=0
ACALL DELAY ; 高脉冲到E
SETB E ; E=1
RET ; 退出
;=====================================
WRITE1: ; 1602读数据子程序
MOV R4,#00H ; 数据偏移地址送R4
A1: MOV A,R4 ; 转送到A
MOVC A,@A+DPTR ; 查表
ACALL WRITE2 ; 调读数据子程序
INC R4 ; 偏移地址加1显示下1个代码
CJNE A,#00H,A1 ; 判断是否取完代码
RET ; 退出
;=====================================
WRITE2: MOV P0,A ; 代码送P0
SETB RS ; RS=1
CLR RW ; RW=0
CLR E ; E=0
ACALL DELAY ; 高脉冲送到E
SETB E ; E=1
RET ; 退出
;==================================== ; 延时子程序
DELAY: MOV R7,#255
DD1: MOV R6,#10
DJNZ R6,$
DJNZ R7,DD1
RET
DELAY1: MOV R7,#150 ; 延时子程序1
DD2: MOV R6,#255
DJNZ R6,$
DJNZ R7,DD2
RET
;====================================
table1: ;显示UP
db 2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,55h,50h,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,00h;
table2: ;显示DOWN
db 2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,44h,4Fh,57h,4Eh,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,00h;
table3: ;显示!!!!
db 2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,21h,21h,21h,21h,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,00h;
table10: ;显示1F
db 2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,31h,46h,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,00h;
table20: ;显示2F
db 2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,32h,46h,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,00H
table30: ;显示3F
db 2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,33h,46h,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,00H
table40: ;显示4F
db 2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,34h,46h,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,00H
table50: ;显示5F
db 2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,35h,46h,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,00H
table60: ;显示6F
db 2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,36h,46h,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,00H
table70: ;显示7F
db 2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,37h,46h,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,00H
table80: ;显示8F
db 2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,38h,46h,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,00H
table00: ;显示ERR
db 2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,45h,52h,52h,2Ah,2Ah,2Ah,2Ah,2Ah,2Ah,00h
TABLE: ;键盘代码8181727263635454
DB 08H,01H,08H,01H,07H,02H,07H,02H,06H,03H,06H,03H,05H,04H,05H,04H
TABLE100: ;显示CHECKING
DB 2Ah,2Ah,2Ah,2Ah,43h,48h,45h,43h,4Bh,49h,4Eh,47h,2Ah,2Ah,2Ah,2Ah,00h
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -