📄 weigenshuchu.asm
字号:
orl a,initialize
mov @r0,a ;3
inc r0
mov @r0,pin_row ;4
inc r0
mov a,pin_length
swap a
orl a,time2
mov @r0,a ;5
inc r0
mov a,bypass
swap a
orl a,permanent
mov @r0,a ;6
inc r0
mov a,remove
swap a
orl a,initialize
mov @r0,a ;7
inc r0
mov @r0,pin_row ;8
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
jbc pin,wait_w1
;clr wp
mov addr,#0
mov addrs,#0
mov addrw,#98h
clr ji_ou
clr jishu
mov pin_row1,pin_row
mov a,pin_row
wait_r:jbc jishu,wait_w1
jz wait_w
mov r6,addr
mov r2,#3
mov r0,#60h
lcall i2c_read
mov r1,#60h
mov r0,#50h
jnb ji_ou,ww
mov r0,#53h
ww: mov a,@r1
swap a
inc r1
orl a,@r1
mov @r0,a
inc r0
inc r1
djnz r2,ww
jb ji_ou,wait_bao
setb ji_ou
wait_r1:inc addrs
mov a,addrs
mov b,#8
mul ab
mov addr,a
dec pin_row1
mov a,pin_row1
jmp wait_r
wait_bao:clr ji_ou
mov r0,#50h
mov a,addrw
add a,#8
mov addrw,a
mov r6,addrw
mov wr_digit,#8
lcall i2c_write
lcall del_10ms
lcall del_10ms
lcall del_10ms
;dec pin_row1
;mov a,pin_row1
jmp wait_r1
wait_w:setb jishu
jb ji_ou,wait_bao
wait_w1:setb wp
ret
start_in:mov r7,#4
mov r2,#2
mov r0,#50h
start_setup2:mov dptr,#tab
start_setup:clr a
movc a,@a+dptr
mov @r0,a
inc r0
inc dptr
djnz r7,start_setup
mov r7,#4
djnz r2,start_setup2
clr wp
mov addr,#0f0h
mov r0,#50h
mov wr_digit,#8
mov r6,addr
lcall i2c_write
lcall del_10ms
lcall del_10ms
setb wp
ret
rd_rd:mov addr,#0f8h
mov r0,#60h
mov r6,addr
lcall i2c_read
mov r0,#60h
clr a
xchd a,@r0
anl a,#0fh
mov time2,a
mov a,@R0
swap a
anl a,#0fh
mov pin_length,a
inc r0
clr a
xchd a,@r0
anl a,#0fh
mov permanent,a
mov a,@R0
swap a
anl a,#0fh
mov bypass,a
inc r0
clr a
xchd a,@r0
anl a,#0fh
mov initialize,a
mov a,@R0
swap a
anl a,#0fh
mov remove,a
inc r0
mov pin_row,@r0 ;;;;;;;
inc r0
clr a
xchd a,@r0
anl a,#0fh
mov common,a
xrl a,time2
jz t_t1
mov time2,common
t_t1:mov a,@R0
swap a
anl a,#0fh
mov common,a
xrl a,pin_length
jz s_pin
mov pin_length,common
s_pin:inc r0
clr a
xchd a,@r0
anl a,#0fh
mov common,a
xrl a,permanent
jz s_per
mov permanent,common
s_per:mov a,@R0
swap a
anl a,#0fh
mov common,a
xrl a,bypass
jz s_by
mov bypass,common
s_by: inc r0
clr a
xchd a,@r0
anl a,#0fh
mov common,a
xrl a,initialize
jz s_ini
mov initialize,common
s_ini:mov a,@R0
swap a
anl a,#0fh
mov common,a
xrl a,remove
jz s_rem
mov remove,common
s_rem:inc r0
mov a,@R0
mov common,a
xrl a,pin_row
jz s_pr
mov pin_row,common
s_pr: ret
change_str:mov r0,#58h
mov r1,#50h
mov a,@r0
mov r7,#6
change_shu:mov b,#16
div ab
mov @r1,a
mov a,b
mov chushu,a
mov b,#10
mul ab
inc r0
inc r1
add a,@r0
djnz r7,change_shu
mov r7,#6
mov r1,#50h
mov r0,#58h
change_shu1:mov a,@r1
mov @r0,a
inc r0
inc r1
djnz r7,change_shu1
mov a,add_shu
inc a
cjne a,#1,change_shu2
mov 4ah,chushu
jmp change_end
change_shu2:cjne a,#2,change_shu3
mov 4bh,chushu
jmp change_end
change_shu3:cjne a,#3,change_shu4
mov 4ch,chushu
jmp change_end
change_shu4:cjne a,#4,change_shu5
mov 4dh,chushu
jmp change_end
change_shu5:cjne a,#5,change_shu6
mov 4eh,chushu
jmp change_end
change_shu6:cjne a,#6,change_shu7
mov 4fh,chushu
change_end:;lcall dog
mov add_shu,a
jmp change_str
change_shu7:;jmp $
mov r7,#3
mov r1,#4ah
mov r0,#58h
change_over:mov a,@r1
anl a,#0fh
mov CHUSHU,a
inc r1
mov a,@r1
swap a
anl a,#0F0h
ORL a,CHUSHU
mov @r0,a
inc r0
inc r1
djnz r7,change_over
mov @r0,#0
ret
output_32:push 07h
push 06h
mov r7,#4
mov r6,#8
mov r0,#58h
;lcall dog
out_put1:mov a,@r0
inc r0
out_put2:rlc a
jc out_put3
clr wie_a0
lcall twie1
setb wie_a0
lcall twie2
jmp out_put4
out_put3:clr wie_a1
lcall twie1
setb wie_a1
lcall twie2
out_put4:;lcall dog
djnz r6,out_put2
mov r6,#8
mov a,@r0
inc r0
djnz r7,out_put2
lcall twie2
pop 06h
pop 07h
ret
twie1:push 05h
mov r5,#26h
djnz r5,$
pop 05h
ret
twie2:push 04h
push 05h
mov r5,#0
mov r4,#04h
twie2a:djnz r5,$
;lcall dog
djnz r4,twie2a
pop 05h
pop 04h
ret
;=============================================
I2C_WRITE: ; WRITE 8 BYTES TO EEROM ; INPUT: A - A*8 = EEROM START ADDR
; R0 - RAN START ADDR
; USE: C, A, R0, R6, R7
ACALL I2C_START
ACALL OUT
MOV R6,wr_digit
WR_LP:MOV A, @R0
ACALL OUT
INC R0
DJNZ R6, WR_LP
AJMP I2C_STOP
;==========================================
I2C_READ: ; READ 8 BYTES FROM EEROM ; INPUT: A - A*8 = EEROM START ADDR
; R0 - RAN START ADDR
; USE: C, A, R0, R6, R7
ACALL I2C_START
ACALL OUT
MOV R6, #8
MOV A, #0A1H; #RDCMD
ACALL OUTS
BRDLP:
MOV R7, #8
SETB I2C_SDA
INLP: CLR I2C_SCL
ACALL DELAY6
SETB I2C_SCL
NOP
MOV C, I2C_SDA
RLC A
DJNZ R7, INLP
CLR I2C_SCL
MOV @R0, A
INC R0
DJNZ R6, ACKLP
;;;;----------------------------
I2C_STOP:
CLR I2C_SDA
ACALL DELAY5
SETB I2C_SCL
ACALL DELAY5
SETB I2C_SDA
DELAY6:
NOP
DELAY5:
NOP
RET
;;-----------------------------
I2C_START:
MOV A, #0A0H; #WTCMD
ACALL OUTS
MOV A, R6
RET
;-------------------------------
ACKLP:
CLR I2C_SDA
SETB I2C_SCL
ACALL DELAY5
CLR I2C_SCL
AJMP BRDLP
;=======================
OUTS:
SETB I2C_SDA
SETB I2C_SCL
ACALL DELAY5
CLR I2C_SDA
ACALL DELAY5
CLR I2C_SCL
;========================
OUT:; lcall dog
SETB C
MOV R7, #9
OTLP: RLC A
NOP
MOV I2C_SDA, C
NOP
NOP
SETB I2C_SCL
ACALL DELAY5
CLR I2C_SCL
DJNZ R7, OTLP
RET
;========================
light_blink:jnb red_blink,light_blink1
cpl red
;clr green
mov time,#175
lcall del_ms
ret
light_blink1:jnb green_blink,light_blink2
cpl green
;clr red
mov time,#175
lcall del_ms
ret
light_blink2:jnb orange_blink,light_blink3
cpl green
cpl red
mov time,#175
lcall del_ms
ret
light_blink3:jnb orange_flash,light_blink4
cpl green
cpl red
mov time,#25
lcall del_ms
ret
light_blink4:jnb red_flash,light_blink5
;clr green
cpl red
mov time,#25
lcall del_ms
ret
light_blink5:jnb green_flash,light_blink6
cpl green
;clr red
mov time,#25
lcall del_ms
light_blink6: ;LCALL DOG ;喂狗
ret
key_scan:mov r6,#48
delay1:lcall light_blink
lcall key_on
jb press,out_press
key1_scan:jnz key_scan1
jnb come_back,key_scan
djnz r6,delay1
clr come_back
jmp waitp
out_press:jb press_open,key1_scan
lcall buzzer
lcall buzzer
clr bell
jmp open_door
key_scan1:lcall del_10ms
lcall keY_on
jz keY_scan
lcall key_P
anl a,#0ffh
jz key_scan
lcall key_code
jb close_bell,key_0f
lcall buzzer
key_0f: push acc
key_off:lcall key_on
jnz key_off
pop acc
CLR BELL
ret
key_on:clr p2.6
clr p2.5
clr p2.4
clr p2.3
mov a,p2
orl a,#0f8h
cpl a
ret
KEY_P:clr p2.4
setb p2.5
setb p2.6
setb p2.3
mov a,p2
ORL A,#0F8H
MOV R3,A
MOV R4,#0FDH
CPL A
JZ NEXT_LINE
JMP KEY_C
NEXT_LINE:clr p2.5
setb p2.4
setb p2.6
setb p2.3
mov a,p2
ORL A,#0F8H
MOV R3,A
MOV R4,#0FBH
CPL A
JZ NEXT_LINE1
JMP KEY_C
NEXT_LINE1:clr p2.6
setb p2.5
setb p2.4
setb p2.3
mov a,p2
ORL A,#0F8H
MOV R3,A
MOV R4,#0F7H
CPL A
JZ NEXT_LINE2
JMP KEY_C
NEXT_LINE2:clr p2.3
setb p2.5
setb p2.6
setb p2.4
mov a,p2
ORL A,#0F8H
MOV R3,A
MOV R4,#0FEH
CPL A
JZ NO_KEY
JMP KEY_C
NO_KEY:MOV A,#0
RET
KEY_C:MOV R7,#0
MOV R6,#0
MOV R5,#3
MOV A,R3
AGAIN1:JNB ACC.0,OUT1
INC R7
RR A
DJNZ R5,AGAIN1
OUT1:INC R7
MOV R5,#8
MOV A,R4
AGAIN2:JNB ACC.0,OUT2
INC R6
RR A
DJNZ R5,AGAIN2
OUT2:INC R6
MOV A,R6
SWAP A
ADD A,R7
RET
KEY_CODE:CJNE A,#12H,KEY_1ON
MOV A,#0
RET
KEY_1ON:CJNE A,#43H,KEY_2ON
MOV A,#1
RET
KEY_2ON:CJNE A,#42H,KEY_3ON
MOV A,#2
RET
KEY_3ON:CJNE A,#41H,KEY_4ON
MOV A,#3
RET
KEY_4ON:CJNE A,#33H,KEY_5ON
MOV A,#4
RET
KEY_5ON:CJNE A,#32H,KEY_6ON
MOV A,#5
RET
KEY_6ON:CJNE A,#31H,KEY_7ON
MOV A,#6
RET
KEY_7ON:CJNE A,#23H,KEY_8ON
MOV A,#7
RET
KEY_8ON:CJNE A,#22H,KEY_9ON
MOV A,#8
RET
KEY_9ON:CJNE A,#21H,KEY_10ON
MOV A,#9
KEY_10ON:RET
KEY_13SCAN:LCALL KEY_ON
JZ KEY_13SCAN1
LCALL DEL_10MS
LCALL KEY_ON
JZ KEY_13SCAN1
LCALL KEY_13P
ANL A,#0FFH
JZ KEY_13SCAN1
LCALL BUZZER
KEY_13SCAN1:PUSH ACC
KEY_OFF2:LCALL KEY_ON
JNZ KEY_OFF2
POP ACC
clr bell
RET
KEY_13P:CLR P2.6
SETB P2.5
SETB P2.4
SETB P2.3
MOV A,P2
anl a,#07h
CJNE A,#2,NO_KEY1
RET
NO_KEY1:MOV A,#0
RET
del_MS:MOV R4,time
; LCALL DOG ;喂狗
LOOP31:MOV R3,#250 ;2ms
LOOP21:NOP
NOP
nop
nop
nop
nop
DJNZ R3,LOOP21
DJNZ R4,LOOP31
RET
delay_time: mov r3,time1
del4:mov r4,#240
;LCALL DOG ;喂狗
del5:mov r5,#250
del6:nop
nop
nop
jbc door_sensor,del_end
djnz r5,del6
djnz r4,del5
djnz r3,del4
;LCALL DOG ;喂狗
del_end:ret
del_10MS:push 04h
push 03h
jnb ri_right,ri_wranG; 接受信息
JNB RI_RIGHT2,RI_WRANG
clr ri_right
CLR RI_RIGHT2
;setb fuwei
jmp main1
ri_wrang:MOV R4,#5
;LCALL DOG ;喂狗
LOOP11:MOV R3,#0F9H
LOOP12:NOP
NOP
DJNZ R3,LOOP12
DJNZ R4,LOOP11
pop 03h
pop 04h
RET
BUZZER:setb bell
mov time,#25
lcall del_ms
RET
;dog:mov 0a6h,#01eh
;mov 0a6h,#0e1h
; ret
tab:db 01h,02h,03h,04h
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -