📄 超市存物箱模拟装置程序下载.txt
字号:
本超市存物箱模拟装置汇编语言程序
ORG 0000H
MAIN:MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV 41H,#88H
MOV 42H,#88H
MOV 40H,P2
MOV 45H,#00H
;=======主程序=======
START:CLR P0.5
JB P0.0,N1
LCALL D1
JB P0.0,N1
LCALL RING
SETB P0.0
SETB P0.5
AJMP ADMIN
N1:SETB P0.5
CLR P0.7
JB P0.3,N2
LCALL D1
JB P0.3,N2
LCALL RING
SETB P0.3
SETB P0.7
LJMP SAVE
N2:MOV 60H,A
MOV A,40H
CJNE A,#0FFH,G1
MOV A,60H
SJMP N3
G1:MOV A,60H
JB P0.1,N3
LCALL D1
JB P0.1,N3
LCALL RING
SETB P0.1
SETB P0.7
LJMP TAKE
N3:SETB P0.7
INC 10H
MOV A,10H
JNB ACC.5,G2
INC 11H
G2:SJMP START
;======管理员程序=====
ADMIN:MOV R0,#00H
MOV P1,#40H
CLR P3.4
;======键盘查询======
KEY: CLR P0.4
JB P0.3,N4
LCALL D1
JB P0.3,N4
LCALL RING
SETB P0.3
SETB P0.4
AJMP K1
N4:JB P0.2,N5
LCALL D1
JB P0.2,N5
LCALL RING
SETB P0.2
SETB P0.4
AJMP K2
N5:JB P0.1,N6
LCALL D1
JB P0.1,N6
LCALL RING
SETB P0.1
SETB P0.4
AJMP K3
N6:SETB P0.4
CLR P0.5
JB P0.3,N7
LCALL D1
JB P0.3,N7
LCALL RING
SETB P0.3
SETB P0.5
AJMP K4
N7:JB P0.2,N8
LCALL D1
JB P0.2,N8
LCALL RING
SETB P0.2
SETB P0.5
AJMP K5
N8:JB P0.1,N9
LCALL D1
JB P0.1,N9
LCALL RING
SETB P0.1
SETB P0.5
AJMP K6
N9:JB P0.0,N10
LCALL D1
JB P0.0,N10
LCALL RING
SETB P0.0
SETB P0.5
AJMP START
N10:SETB P0.5
CLR P0.6
JB P0.3,N11
LCALL D1
JB P0.3,N11
LCALL RING
SETB P0.3
SETB P0.6
AJMP K7
N11:JB P0.2,N12
LCALL D1
JB P0.2,N12
LCALL RING
SETB P0.2
SETB P0.6
AJMP K8
N12:CJNE R2,#03H,G3
JB P0.1,N13
LCALL D1
JB P0.1,N13
LCALL RING
SETB P0.1
SETB P0.6
AJMP K9
N13:SETB P0.6
CLR P0.7
JB P0.2,G3
LCALL D1
JB P0.2,G3
LCALL RING
SETB P0.2
SETB P0.7
AJMP K0
G3:SETB P0.7
CLR P0.5
JB P0.0,N14
LCALL D1
JB P0.0,N14
LCALL RING
SETB P0.0
SETB P0.5
AJMP START
N14:SETB P0.5
AJMP KEY
K1:MOV 50H,#10H
MOV 51H,#01H
CJNE R1,#05H,N15
AJMP JUD2
N15:CJNE R2,#08H,N16
SETB P2.0
LJMP CLOSE1
N16:AJMP JUD1
K2:MOV 50H,#20H
MOV 51H,#02H
CJNE R1,#05H,N17
AJMP JUD2
N17:CJNE R2,#08H,N18
SETB P2.1
LJMP CLOSE1
N18:AJMP JUD1
K3:MOV 50H,#30H
MOV 51H,#03H
CJNE R1,#05H,N19
AJMP JUD2
N19:CJNE R2,#08H,N20
SETB P2.2
LJMP CLOSE1
N20:AJMP JUD1
K4:MOV 50H,#40H
MOV 51H,#04H
CJNE R1,#05H,N21
AJMP JUD2
N21:CJNE R2,#08H,N22
SETB P2.3
LJMP CLOSE1
N22:AJMP JUD1
K5:MOV 50H,#50H
MOV 51H,#05H
CJNE R1,#05H,N23
AJMP JUD2
N23:CJNE R2,#08H,N24
SETB P2.4
LJMP CLOSE1
N24:AJMP JUD1
K6:MOV 50H,#60H
MOV 51H,#06H
CJNE R1,#05H,N25
AJMP JUD2
N25:CJNE R2,#08H,N26
SETB P2.5
LJMP CLOSE1
N26:AJMP JUD1
K7:MOV 50H,#70H
MOV 51H,#07H
CJNE R1,#05H,N27
AJMP JUD2
N27:CJNE R2,#08H,N28
SETB P2.6
LJMP CLOSE1
N28:AJMP JUD1
K8:MOV 50H,#80H
MOV 51H,#08H
CJNE R1,#05H,N29
AJMP JUD2
N29:CJNE R2,#08H,N30
SETB P2.7
LJMP CLOSE1
N30:AJMP JUD1
K9:MOV 50H,#90H
MOV 51H,#09H
CJNE R1,#05H,N31
AJMP JUD2
N31:AJMP JUD1
K0:MOV 50H,#00H
MOV 51H,#00H
CJNE R1,#05H,N32
AJMP JUD2
N32:AJMP JUD1
;====4位密码位数判断==
JUD1: INC 45H
CLR CY
MOV A,45H
SUBB A,#01H
JZ T11
CLR CY
MOV A,45H
SUBB A,#02H
JZ T12
CLR CY
MOV A,45H
SUBB A,#03H
JZ T13
CLR CY
MOV A,45H
SUBB A,#04H
JZ T14
;===四位密码存入单元===
T11:CLR P3.3
CJNE R0,#00H,A11
MOV 43H,50H
AJMP KEY
A11:MOV 30H,50H
AJMP KEY
T12:CLR P3.2
CJNE R0,#00H,A12
MOV A,43H
ORL A,51H
MOV 43H,A
AJMP KEY
A12:MOV A,30H
ORL A,51H
MOV 30H,A
AJMP KEY
T13:CLR P3.1
CJNE R0,#00H,A13
MOV 44H,50H
AJMP KEY
A13:MOV 31H,50H
AJMP KEY
T14:MOV 45H,#00H
CLR P3.0
CJNE R0,#00H,A14
MOV A,44H
ORL A,51H
MOV 44H,A
AJMP TEXT1
A14:MOV A,31H
ORL A,51H
MOV 31H,A
AJMP TEXT2
;====管理员密码校验===
TEXT1:MOV A,41H
CLR CY
SUBB A,43H
JZ RIGHT1
AJMP WRONG1
RIGHT1:CLR CY
MOV A,42H
SUBB A,44H
JZ RIGHT2
WRONG1:SETB P3.4
CLR P3.5
LCALL D2
ORL P3,#0FH
SETB P3.5
AJMP START
RIGHT2:LCALL D2
MOV P1,#3FH
LCALL D2
SETB P3.4
ORL P3,#0FH
;====管理员功能选择===
CHOOSE:CLR P0.6
JB P0.0,N33
LCALL D1
JB P0.0,N33
LCALL RING
SETB P0.6
SETB P0.0
MOV R2,#08H
AJMP KEY
N33:SETB P0.6
CLR P0.7
JB P0.0,N34
LCALL D1
JB P0.0,N34
LCALL RING
SETB P0.7
SETB P0.0
MOV R1,#05H
AJMP KEY
N34:SETB P0.7
CLR P0.5
JB P0.0,N35
LCALL D1
JB P0.0,N35
LCALL RING
SETB P0.5
SETB P0.0
MOV R0,#01H
AJMP START
N35:SETB P0.5
AJMP CHOOSE
;===8位密码位数判断===
JUD2: INC 45H
CLR CY
MOV A,45H
SUBB A,#01H
JZ T21
CLR CY
MOV A,45H
SUBB A,#02H
JZ T22
CLR CY
MOV A,45H
SUBB A,#03H
JZ T23
CLR CY
MOV A,45H
SUBB A,#04H
JZ T24
CLR CY
MOV A,45H
SUBB A,#05H
JZ T25
CLR CY
MOV A,45H
SUBB A,#06H
JZ T26
CLR CY
MOV A,45H
SUBB A,#07H
JZ T27
CLR CY
MOV A,45H
SUBB A,#08H
JZ T28
;===新密码存入单元===
T21:CLR P3.3
MOV 33H,50H
AJMP KEY
T22:CLR P3.2
MOV A,33H
ORL A,51H
MOV 33H,A
AJMP KEY
T23:CLR P3.1
MOV 34H,50H
AJMP KEY
T24:CLR P3.0
MOV A,34H
ORL A,51H
MOV 34H,A
SETB P3.4
MOV P1,#3FH
LCALL D2
ORL P3,#0FH
CLR P3.4
AJMP KEY
T25:CLR P3.3
MOV 35H,50H
AJMP KEY
T26:CLR P3.2
MOV A,35H
ORL A,51H
MOV 35H,A
AJMP KEY
T27:CLR P3.1
MOV 36H,50H
AJMP KEY
T28:CLR P3.0
MOV A,36H
ORL A,51H
MOV 36H,A
SETB P3.4
MOV 45H,#00H
AJMP TEXT3
;=====修改新密码校验===
TEXT3:MOV A,33H
SUBB A,35H
JZ RIGHT3
AJMP WRONG2
RIGHT3:MOV A,34H
CLR CY
SUBB A,36H
JZ RIGHT4
WRONG2:CLR P3.5
LCALL D3
SETB P3.5
MOV R1,#00H
AJMP CHOOSE
RIGHT4:MOV 41H,33H
MOV 42H,34H
SETB P3.4
MOV P1,#3FH
LCALL D2
ORL P3,#0FH
MOV R1,#00H
AJMP CHOOSE
;======存物程序======
SAVE: MOV 52H,10H
MOV A,52H
ANL A,#0F0H
SWAP A
LCALL CHAGE
MOV 54H,A
MOV A,52H
ANL A,#0FH
LCALL CHAGE
MOV 55H,A
MOV 53H,11H
MOV A,53H
ANL A,#0F0H
SWAP A
LCALL CHAGE
MOV 56H,A
MOV A,53H
ANL A,#0FH
LCALL CHAGE
MOV 57H,A
;===10H\11H赋修正值===
MOV A,54H
SWAP A
ORL A,55H
MOV 62H,A
MOV A,56H
SWAP A
ORL A,57H
MOV 63H,A
MOV 10H,62H
MOV 11H,63H
;===查询密码是否存在==
G4:MOV 12H,R0
MOV 13H,R1
MOV R0,#20H
MOV R1,#08H
G5:MOV A,10H
SUBB A,@R0
JZ G6
INC R0
INC R0
DJNZ R1,G5
MOV R0,12H
MOV R1,13H
AJMP G7
G6:MOV A,10H
RL A
INC A
MOV 10H,A
SJMP SAVE
;===判断密码是否都为0==
G7:MOV A,54H
CLR CY
CJNEA,#00H,DISP
MOV A,55H
CLR CY
CJNE A,#00H,DISP
MOV A,56H
CLR CY
CJNE A,#00H,DISP
MOV A,57H
CLR CY
CJNE A,#00H,DISP
MOV 10H,#50H
MOV 11H,#21H
AJMP SAVE
;=====密码显示=======
DISPLAY:MOV R3,#150
DIS:MOV A,54H
LCALL TABLE
CLR P3.3
MOV P1,A
LCALL D0
SETB P3.3
MOV A,55H
LCALL TABLE
CLR P3.2
MOV P1,A
LCALL D0
SETB P3.2
MOV A,56H
LCALL TABLE
CLR P3.1
MOV P1,A
LCALL D0
SETB P3.1
MOV A,57H
LCALL TABLE
CLR P3.0
MOV P1,A
LCALL D0
SETB P3.0
DJNZ R3,DIS
;====寻找空箱======
ORL P3,#0FH
MOV A,40H
JB ACC.0,NO_1
JB ACC.1,NO_2
JB ACC.2,NO_3
JB ACC.3,NO_4
JB ACC.4,NO_5
JB ACC.5,NO_6
JB ACC.6,NO_7
JB ACC.7,NO_8
NO_1:MOV 20H,62H
MOV 21H,63H
CLR P2.0
AJMP CLOSE2
NO_2:MOV 22H,62H
MOV 23H,63H
CLR P2.1
AJMP CLOSE2
NO_3:MOV 24H,62H
MOV 25H,63H
CLR P2.2
AJMP CLOSE2
NO_4:MOV 26H,62H
MOV 27H,63H
CLR P2.3
AJMP CLOSE2
NO_5:MOV 28H,62H
MOV 29H,63H
CLR P2.4
AJMP CLOSE2
NO_6:MOV 2AH,62H
MOV 2BH,63H
CLR P2.5
AJMP CLOSE2
NO_7:MOV 2CH,62H
MOV 2DH,63H
CLR P2.6
AJMP CLOSE2
NO_8:MOV 2EH,62H
MOV 2FH,63H
CLR P2.7
AJMP CLOSE2
;======开关箱1======
CLOSE1:MOV R4,#6
MOV 32H,40H
CLOS1:LCALL D2
MOV 40H,P2
MOV P2,32H
LCALL D2
MOV P2,40H
DJNZ R4,CLOS1
LJMP CHOOSE
;=====开关箱2=======
CLOSE2:MOV R4,#6
MOV 32H,40H
CLO2:LCALL D2
MOV 40H,P2
MOV P2,32H
LCALL D2
MOV P2,40H
DJNZ R4,CLO2
MOV A,40H
CLR CY
SUBB A,#00H
JZ FULL
LJMP START
;======箱满提醒======
FULL:SETB P0.7
SETB P0.1
;=====显示FULL====
CLR P3.3
MOV P1,#71H
LCALL D0
SETB P3.3
CLR P3.2
MOV P1,#3EH
LCALL D0
SETB P3.2
CLR P3.1
MOV P1,#38H
LCALL D0
SETB P3.1
CLR P3.0
MOV P1,#38H
LCALL D0
SETB P3.0
;===查询“管”,“取”==
CLR P0.5
JB P0.0,N36
LCALL D1
JB P0.0,N36
LCALL RING
SETB P0.0
SETB P1.5
ORL P3,#0FH
LJMP ADMIN
N36:SETB P0.5
CLR P0.7
JB P0.1,FULL
LCALL D1
JB P0.1,FULL
LCALL RING
SETB P0.1
SETB P0.7
ORL P3,#0FH
LJMP TAKE
;=======取物程序=====
TAKE:MOV R0,#03H
MOV R1,#03H
MOV R2,#03H
MOV P1,#40H
CLR P3.4
LJMP KEY
;===用户取物密码校验===
TEXT2:MOV A,30H
CLR CY
CJNE A,#00H,G18
MOV 31H,A
CLR CY
CJNE A,#00H,G18
LJMP WRONG1
G18:CLR CY
MOV A,30H
CJNE A,20H,N37
CLR CY
MOV A ,31H
CJNE A,21H,N37
SETB P2.0
AJMP OPEN
N37:CLR CY
MOV A,30H
CJNE A,22H,N38
CLR CY
MOV A ,31H
CJNE A,23H,N38
SETB P2.1
AJMP OPEN
N38:CLR CY
MOV A,30H
CJNE A,24H,N39
CLR CY
MOV A ,31H
CJNE A,25H,N39
SETB P2.2
AJMP OPEN
N39:CLR CY
MOV A,30H
CJNE A,26H,N40
CLR CY
MOV A ,31H
CJNE A,27H,N40
SETB P2.3
AJMP OPEN
N40:CLR CY
MOV A,30H
CJNE A,28H,N41
CLR CY
MOV A ,31H
CJNE A,29H,N41
SETB P2.4
AJMP OPEN
N41:CLR CY
MOV A,30H
CJNE A,2AH,N42
CLR CY
MOV A ,31H
CJNE A,2BH,N42
SETB P2.5
AJMP OPEN
N42:CLR CY
MOV A,30H
CJNE A,2CH,N43
CLR CY
MOV A ,31H
CJNE A,2DH,N43
SETB P2.6
AJMP OPEN
N43:CLR CY
MOV A,30H
CJNE A,2EH,N44
CLR CY
MOV A ,31H
CJNE A,2FH,N44
SETB P2.7
AJMP OPEN
N44:CLR P3.5
LCALL D3
LJMP START
;======开关箱程序=====
OPEN:MOV R4,#6
MOV 32H,40H
OPE1:LCALL D2
MOV 40H,P2
MOV P2,32H
LCALL D2
MOV P2,40H
DJNZ R4,OPE1
LJMP START
;====延时5ms子程序====
D0:MOV R5,#5
D01:MOV R6,#7DH
D00:NOP
NOP
DJNZ R6,D00
DJNZ R5,D01
RET
;===延时10ms子程序===
D1:MOV R5,#10
D11:MOV R6,#7DH
D10:NOP
NOP
DJNZ R6,D10
DJNZ R5,D11
RET
;====延时0.5s子程序====
D2:MOV R5,#50
D22:MOV R6,#20
D21:MOV R7,#7DH
D20:NOP
NOP
DJNZ R7,D20
DJNZ R6,D21
DJNZ R5,D22
RET
;====延时2s子程序====
D3:MOV R5,#200
D32:MOV R6,#20
D31:MOV R7,#7DH
D30:NOP
NOP
DJNZ R7,D30
DJNZ R6,D31
DJNZ R5,D32
RET
;====按键提示音程序==
RING:CLR P3.6
LCALL D2
SETB P3.6
RET
;=====数值修正程序====
CHAGE:MOV 61H,A
CJNE A,#09H,Q1
SJMP Q2
Q1:JNC Q3
SJMP Q2
Q3:CLR CY
SUBB A,#0AH
SJMP Q4
Q2:MOV A,61H
Q4:NOP
RET
;======查表程序=====
TABLE:MOV DPTR,#TAB
MOVC A,@A+DPTR
RET
;=======数据表======
TAB:DB 3FH,06H,5BH
DB 4FH,66H
DB 6DH,7DH,07H
DB 7FH,6FH
END
=*=*=*=>>说明<<=*=*=*=
在程序流程图及实施细则中对该制作算法的阐述已经很清楚了,所以程序中就不再加以解释说明。
======◆程序部分说明◆=====
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -