📄 weigenshuchu.asm
字号:
wp equ p1.0
I2C_scl equ p1.1
I2C_sda equ p1.2
relay equ p1.3
RELAY2 EQU P2.7
red equ p1.4
green equ p1.5
bell equ p1.6
press_open equ p1.7
WIE_A0 EQU P3.6
WIE_A1 EQU P3.7
time equ 30h
addr equ 31h
data8 equ 32h
pin_length equ 33h
pin_row equ 34h
pin_digit equ 35h ;JIA4/6
ADDRS EQU 36H
PIN_ROW1 EQU 37H
BYPASS EQU 38H
permanent equ 39h
remove equ 3ah
initialize equ 3bh
master_pin equ 3ch
degree equ 3dh
time1 equ 3eh
mpin equ 3fh
time2 equ 40h
time3 equ 41h
pin_row3 equ 42h
pin_row2 equ 43h
wr_digit equ 44h
addrw equ 45h
e equ 46h
oo equ 70h
common equ 47h
chushu equ 48h
add_shu equ 49h
ri_inform1 equ 71h
ri_right equ 22h.5
RED_FLASH EQU 20H.0
GREEN_FLASH EQU 20H.1
RED_BLINK EQU 20H.2
GREEN_blink equ 20h.3
orange_blink equ 20h.4
orange_flash equ 20h.5
come_back equ 20h.6
door_sensor equ 20h.7
press equ 21h.0
close_bell equ 21h.1
ma_pin equ 21h.2
ad_pin equ 21h.3
dis_pin equ 21h.4
key_13 equ 21h.5
ji_ou equ 21h.6
read_two equ 21h.7
judge equ 22h.0
fuwei equ 22h.1
chushihua equ 22h.2
jishu equ 22h.3
pin equ 22h.4
ri_right2 EQU 22H.5
org 0
jmp main
org 003h
jmp int0_sub
org 0013h
jmp int1_sub
org 0023h
jmp ri_sub
org 0030h
main:nop
mov p1,#0ffh
mov p3,#0ffh
mov p2,#0ffh
clr a
mov r0,#02h
mov r7,#0fdh
t1:mov @r0,a
inc r0
djnz r7,t1
mov sp,#71h
mov 0a6h,#01eh ;启动WATCHDOG
mov 0a6h,#0e1h
clr red
clr green
clr relay
CLR RELAY2
mov tmod,#20h
mov th1,#0fdh
mov tl1,#0fdh
setb es
setb tr1
clr ri
clr it0
CLR IT1
clr ri_right
mov pcon,#00h
mov scon,#50h
mov ip,#0
setb ea
clr fuwei
clr chushihua
lcall key_13scan
jnz str1
lcall del_10ms
lcall key_13scan
jz start_setSET ;;;;;;
str1:lcall rd_rd
mov a,initialize
cjne a,#08h,wait_main1
jmp start1_set
wait_main1:mov a,62h
anl a,#0fh
mov initialize,a
wait_goon:mov a,initialize
cjne a,#08h,main1
jmp start1_set
main1:mov initialize,#08h
lcall start_in
mov r0,#50h
mov @r0,#62h
inc r0
mov @r0,#56h
inc r0
mov @r0,#78h
inc r0
mov @r0,#00h
inc r0
mov @r0,#62h
inc r0
mov @r0,#56h
inc r0
mov @r0,#78h
inc r0
mov @r0,#00h
clr wp
mov addr,#0f8h
mov r6,addr
mov r0,#50h
mov wr_digit,#8
lcall i2c_write
lcall del_10ms
lcall del_10ms
setb wp
lcall rd_rd
start1_set:mov degree,#0
set_up:mov a,degree
cjne a,#5,set_up0
start_setSET:jmp start_set ;;;;;;;;;;;
set_up0:setb green
clr red_flash
clr red_blink
clr orange_blink
clr orange_flash
clr green_blink
clr green_flash
clr come_back
mov r0,#50h
clr key_13
mov pin_digit,#0
set_up1:lcall key_scan
cjne a,#13h,set_up2
jbc key_13,set_up ;;;;;;;;;;;;;
clr red
clr green
mov time1,#5
lcall delay_time
jmp start_set ;;;;;;;;;;;
set_up2:cjne a,#11h,set_up3
jnb key_13,set_up0
clr key_13
MOV A,PIN_DIGIT
CJNE A,#4,SET_UP4
mov time1,#1
lcall delay_time
mov r0,#60h
mov addr,#0f0h
mov r6,addr
set_up5:lcall i2c_read
mov r7,#4
mov r0,#50h
mov r1,#60h
mov r7,#4
set_upr:mov a,@r1
xrl a,@r0
jnz set_up4
inc r0
inc r1
djnz r7,set_upr
jmp set_up6
set_up4:mov r0,#50h
mov r1,#64h
mov r7,#4
set_1upr1:mov a,@r1
xrl a,@r0
jnz set_4up4
inc r0
inc r1
djnz r7,set_1upr1
jmp set_up6
set_4up4:inc degree
setb red
clr green
mov time1,#1
lcall delay_time
clr green
clr red
lcall delay_time
jmp set_up
SET_UP3:MOV @R0,A
INC PIN_DIGIT
INC R0
setb key_13
JMP SET_UP1
set_up6:clr green
mov time,#250
lcall del_ms
setb green
lcall del_ms
clr green
;set_6up:clr green
;clr red
;setb orange_blink
;clr orange_flash
;clr red_flash
;clr green_flash
;clr red_blink
;clr green_blink
;setb come_back
;set_up7:lcall key_scan
;mov r0,#50h
;clr come_back
;cjne a,#11h,set_up27
;set_up8:setb green
;clr red
;clr orange_blink
;setb orange_flash
;clr red_flash
;clr green_flash
;clr red_blink
;clr green_blink
;lcall key_scan
;cjne a,#11h,set_up9
;jmp set_up8
;set_up27:cjne a,#13h,set_up7
;jmp set_6up ;;;;;;;;;;;;
;set_up9:cjne a,#13h,set_up10
;jmp set_6up ;;;;;;;;;
;set_up10:mov @r0,a
;inc r0
;cjne r0,#54h,set_up8
;mov r0,#60h
;mov addr,#0f0h
;mov r6,addr
;set_up11:lcall i2c_read
;mov r1,#60h
; mov r0,#50h
;mov r7,#4
;set_upr1:mov a,@r1
;xrl a,@r0
;jnz set_upr2
;inc r0
;inc r1
;djnz r7,set_upr1
;mov r1,#64h
;mov r0,#50h
;mov r7,#4
;set_upr2:mov a,@r1
;xrl a,@r0
;jnz set_6up
;inc r0
;inc r1
;djnz r7,set_upr2
set_up13:clr red
clr green
;mov time1,#1
; lcall delay_time
setb green_blink
clr red_blink
clr orange_blink
clr green_flash
clr red_flash
clr orange_flash
clr red
lcall key_SCAN
jnz set_0up
lcall test
set_0up:cjne a,#1,set_up12
setb pin
LCALL ADD_PIN0
set_up12:cjne a,#2,set_up14
setb pin
lcall sub_pin0
set_up14:cjne a,#3,set_up15
lcall time_delay
jmp set_up21
set_up15:cjne a,#4,set_up16
lcall PIN_46DIGIT
jmp set_up21
set_up16:cjne a,#5,set_up17
lcall by_pass
jmp set_up21
set_up17:cjne a,#6,set_up18
lcall permanent_lock
jmp set_up21
set_up18:cjne a,#7,set_up19
lcall remove_door
jmp set_up21
set_up19:cjne a,#8,set_up20
lcall master
set_up20:cjne a,#13h,set_up21
clr red
clr green
lcall waitp
mov time1,#20
lcall delay_time
jmp start_set
set_up21:jmp set_up13
; mov 0a6h,#01eh
; mov oa6h,#0e1h
start_set:lcall rd_rd
begin_str:mov a,permanent
cjne a,#6,open_door11
;mov a,remove
;cjne a,#7,WIEGAND_11
mov a,bypass
cjne a,#5,set_bypass1
mov a,pin_row
jnz program_s
mov pin_row,63h
jz program_end1
program_s:cjne a,#21,begin
pro_end1:mov pin_row,#0
jmp program_end1
;WIEGAND_11:JMP WIEGAND
begin:jnc pro_end1
mov degree,#0
mov a,pin_length
start_1:setb orange_flash
clr red_flash
clr green_flash
clr orange_blink
clr red_blink
clr green_blink
mov pin_digit,#0
mov r0,#58h
mov a,degree
cjne a,#5,start0
program_end1:jmp program_end
open_door11:jmp open_door1
set_bypass1:jmp set_bypass
start0:setb press
lcall key_scan
cjne a,#13h,start1
sjmp start_1
start2_1:jmp start2
start1:cjne a,#11h,start2_1
PASS_DIGITH:clr red
clr green
mov pin_row1,pin_row
mov a,pin_digit
jz start_1
cjne a,pin_length,start3_3
cjne a,#4,start7
mov @r0,#0fh
inc r0
mov @r0,#0fh
start7:mov addr,#0
mov addrs,#0
start77:mov r1,#58h
start5:mov r0,#60h
mov r6,addr
lcall i2c_read
mov r0,#60h
mov r1,#58h
mov r7,#6
startr:mov a,@r1
xrl a,@r0
jnz start4
inc r0
inc r1
djnz r7,startr
jmp open_door
start3_3:jmp start3
start4:inc addrs
mov a,addrs
mov b,#8 ;;;;;;;;;;
mul ab
mov addr,a
dec pin_row1
mov a,pin_row1
jnz start77
mov pin_row2,pin_row
mov pin_row3,#0
mov addr,#0a0h
mov addrs,#0a0h
st_two4:mov r6,addr
mov r0,#60h
lcall i2c_read
mov r0,#60h
mov r1,#58h
mov r2,#3
st_two2:mov a,@r0
swap a
anl a,#0fh
xrl a,@r1
jnz st_two1
mov a,@r0
anl a,#0fh
inc r1
xrl a,@r1
jnz st_two1
inc r0
inc r1
djnz r2,st_two2
clr wp
mov a,pin_row3
mov b,#8
mul ab
mov r6,a
mov r0,#58h
lcall i2c_write
lcall del_10ms
lcall del_10ms
setb wp
jmp open_door
st_two1:inc pin_row3
dec pin_row2
mov a,pin_row2
jz start3
mov r0,#63h
mov r1,#58h
mov r2,#3
st_two3:mov a,@r0
swap a
anl a,#0fh
xrl a,@r1
jnz st_two6
mov a,@r0
anl a,#0fh
inc r1
xrl a,@r1
jnz st_two6
inc r0
inc r1
djnz r2,st_two2 ;;hj;;;
clr wp
mov a,pin_row3
mov b,#8
mul ab
mov r6,a
mov r0,#58h
lcall i2c_write
lcall del_10ms
lcall del_10ms
setb wp
jmp open_door
st_two6:inc pin_row3
dec pin_row2
mov a,pin_row2
jz start3
mov a,addr
add a,#8
mov addr,a
jmp st_two4
start3:inc degree
setb red
clr green
mov time1,#3
lcall delay_time
clr red
lcall delay_time
jmp start_1
start2:inc pin_digit
mov @r0,a
inc r0
MOV A,PIN_DIGIT
CJNE A,PIN_LENGTH,PASS_digit
jmp PASS_DIGITh
PASS_DIGIT:jmp start0
set_bypass:lcall del_10ms
clr red
clr green
clr red_flash
clr red_blink
setb orange_blink
clr orange_flash
clr green_blink
clr green_flash
setb press
setb close_bell
lcall key_scan
clr close_bell
cjne a,#13h,set_bypass
lcall buzzer
lcall buzzer
lcall buzzer
clr bell
clr close_bell
sjmp open_door3
open_door:mov a,remove
cjne a,#7,WIEGAND_11
open_door3:clr press
setb relay
SETB RELAY2
setb green
clr red
;mov a,permanent
;cjne a,#6,open_door1
mov a,time2
cjne a,#1,time_del3
mov time3,#8
sjmp time_del
WIEGAND_11:jmp WIEGAND
time_del3:cjne a,#2,time_del5
mov time3,#15
sjmp time_del
time_del5:cjne a,#3,time_del10
mov time3,#28
sjmp time_del
time_del10:mov time3,#50
time_del:mov time1,time3
setb ex0
SETB EX1
clr door_sensor
lcall delay_time
clr ex0
CLR EX1
clr door_sensor
clr relay
CLR RELAY2
;LCALL RD_RD
;mov time1,#5
;lcall delay_time
jmp START_SET
open_door1:setb relay
SETB RELAY2
setb green
open_door2:lcall del_10ms
sjmp open_door2
WIEGAND:lcall buzzer
lcall buzzer
lcall buzzer
clr bell
wiegand4:mov a,5ch
cjne a,#0fh,wiegand1
mov a,5dh
cjne a,#0fh,wiegand1
mov r1,#60h
mov r0,#58h
mov r7,#4
mov @r1,#0
inc r1
mov @r1,#0
inc r1
wiegnd2:mov a,@r0
mov @r1,a
inc r0
inc r1
djnz r7,wiegnd2
mov r7,#6
mov r0,#58h
mov r1,#60h
wiegand3: mov a,@R1
mov @r0,a
inc r0
inc r1
djnz r7,wiegand3
wiegand1:mov add_shu,#0
lcall change_str
lcall output_32
mov time1,#40
lcall delay_time
jmp start_set
program_end:clr green;休眠
clr red
mov r2,#4
program1:mov time1,#250
lcall delay_time
djnz r2,program1
jmp start_set
int0_sub:push acc
push dph
push dpl
push 03h
push 04h
push 05h
setb door_sensor
pop 05h
pop 04h
pop 03h
pop dpl
pop dph
pop acc
reti
INT1_SUB:push acc
push dph
push dpl
push 03h
push 04h
push 05h
setb door_sensor
pop 05h
pop 04h
pop 03h
pop dpl
pop dph
pop acc
reti
ri_sub:push acc
push dph
push dpl
push 6dh
jnb ri,$
clr ri
mov a,sbuf
clr ri_right
mov ri_inform1,a
xrl a,#0eah
jnz ri_eer
setb ri_right
SETB RI_RIGHT2
ri_eer:pop 6dh
pop dpl
pop dph
pop acc
reti
test:clr red
setb green
clr green_blink
clr red_blink
clr orange_blink
clr orange_flash
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -