📄 keym.asm
字号:
mov common,a
xrl a,pin_row
LCALL DOG ;喂狗30
jz s_pr
mov pin_row,common
s_pr: ret
WIEGND:mov r0,#58h
mov r1,#60h
mov a,PIN_LENGTH
cjne a,#4,wiegnd1
mov @r1,#0
inc r1
mov @r1,#0
sjmp wiegnd2
wiegnd1:mov a,@r0
mov @r1,a
inc R0
inc R1
mov a,@r0
mov @r1,a
wiegnd2:push 07h
mov r7,#4
lcall dog
wiegnd3:inc R0
inc R1
mov a,@r0
mov @r1,a
djnz r7,wiegnd3
lcall change_str
lcall output_32
ret
change_str:mov r0,#60h
mov r1,#50h
mov a,@r0
mov r7,#6
LCALL DOG ;喂狗22
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,#60h
LCALL DOG ;喂狗21
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 ;喂狗20
mov add_shu,a
jmp change_str
change_shu7:mov r7,#3
mov r1,#4ah
mov r0,#60h
LCALL DOG ;喂狗19
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,#60h
; lcall dog
out_put1:LCALL DOG ;喂狗18
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: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
LCALL DOG ;喂狗17
djnz r5,$
pop 05h
ret
twie2:push 04h
push 05h
mov r5,#0
mov r4,#04h
twie2a:LCALL DOG ;喂狗16
djnz r5,$
djnz r4,twie2a
pop 05h
pop 04h
ret
I2C_WRITE: ACALL I2C_START
ACALL OUT
MOV R6,wr_digit
LCALL DOG ;喂狗15
WR_LP:MOV A, @R0
ACALL OUT
INC R0
DJNZ R6, WR_LP
AJMP I2C_STOP
I2C_READ: 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 ;喂狗14
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
ret
light_blink1:jnb green_blink,light_blink2
cpl green
ret
light_blink2:jnb orange_blink,light_blink3
cpl green
cpl red
light_blink3:ret
key_scan:mov r2,#60;defer ;r6r3r4r5r7
delay3: mov r5,#55
delay2:mov r6,#250
delay1:lcall key_on;;;;;;;;;;;
LCALL DOG ;喂狗10;;;;;;;;;
jnb b_j,no_sn;;;;;;;;;;;;;
jnb dr_sn,no_sn;;;;;;;;;
;setb relay
no_sn2:jnb relay,no_sn
mov cs,#2 ;oj9898l;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov cd,#25h
mov dc,#5
mov pl,#232
call str_bell
jb dr_sn,no_sn2
mov r6,#1
clr red
setb green
clr green_blink
setb red_blink
clr orange_blink
clr a
jb test_menu ,testqq
lcall del_10ms
jmp start_setset
testqq:jmp test
no_sn:jb press,out_press;;;;;;;;;;
key1_scan:jnz key_scan1;;;;;;;;;;;;;;
jnb slow_orange,key_rr;;;;;;;;;;;
jnb slow_orange2,key_rr
djnz r6,delay1
djnz r5,delay2
lcall light_blink
key_rr:jnb come_back,key_scan11;;;;;;;;
djnz r2,delay3
clr come_back;;;;;;;;;;;;;
jnb test_menu,main_menu
lcall buzzer
lcall buzzer
clr bell
clr b_j
jmp test
main_menu:jnb menu,op_menu
lcall buzzer
lcall buzzer
clr bell
jmp set_up13
op_menu:jnb set_menu,set_menu1
jmp start_set
set_menu1:jmp waitp;;;;;;;;;;;;;;;
out_press:jb press_open,key1_scan
lcall del_10ms
jb press_open,key1_scan
lcall buzzer
clr bell
clr press
jmp open_door
key_scan11:jmp key_scan
key_scan1:lcall del_10ms
lcall del_10ms
lcall del_10ms
lcall keY_on
LCALL DOG ;喂狗11
jz keY_scan11
lcall key_P
anl a,#0ffh
LCALL DOG ;喂狗12
jz key_scan11
lcall key_code
jb close_bell,key_0f
lcall buzzer
key_0f:push acc
key_off:lcall key_on
LCALL DOG ;喂狗13
jnz key_off
pop acc
CLR BELL
key_end: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_p1:clr p2.3
setb p2.4
setb p2.5
setb p2.6
mov a,p2
ORL A,#0F8H
cjne a,#0feh,key_p2
mov a,#11h
lcall buzzer
key_p2: 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
lcall del_10ms
lcall del_10ms
lcall del_10ms
mov a,p2
ORL A,#0F8H
MOV R3,A
MOV R4,#0FEH
CPL A
JZ NO_KEY
cjne a,#5,key_c1
clr red
clr green
mov a,#15h
ret ;;;;;;;;;;
key_c1:lcall del_10ms
lcall del_10MS
LCALL DEL_10MS
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
cjne a,#5,key_c
clr red
clr green
mov a,#15h
ret
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
LCALL DOG ;喂狗7
JZ KEY_13SCAN1
LCALL DEL_10MS
LCALL KEY_ON
LCALL DOG ;喂狗8
JZ KEY_13SCAN1
LCALL KEY_13P
ANL A,#0FFH
JZ KEY_13SCAN1
LCALL BUZZER
KEY_13SCAN1:PUSH ACC
KEY_OFF2:LCALL KEY_ON
LCALL DOG ;喂狗9
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
LOOP31:LCALL DOG ;喂狗6
MOV R3,#250 ;2ms
LOOP21:NOP
NOP
nop
nop
nop
nop
DJNZ R3,LOOP21
DJNZ R4,LOOP31
RET
str_bell:mov r4,cs
clr red
clr green
str_bell2:mov r5,dc
dlv1:mov r6,cd
dlv2:cpl bell
lcall delay_bell
djnz r6,dlv2
jnb dr_sn,no_door
cpl red
cpl green
no_door:djnz r5,dlv1
mov r5,dc
dlv3:mov r6,#12
dlv4:clr bell
lcall delay_bell
lcall delay_bell2
djnz r6,dlv4
jnb dr_sn,no_door1
cpl red
cpl green
no_door1:djnz r5,dlv3
djnz r4,str_bell2
clr bell
ret
delay_bell:mov r7,pl
LCALL DOG ;喂狗4
lla:nop
nop
djnz r7,lla
ret
delay_bell2:mov r7,#80
LCALL DOG ;喂狗5
llb:djnz r7,llb
ret
display_error: clr red
clr green
mov time,#250
lcall del_ms
setb red
setb bell
lcall del_ms
clr bell
lcall del_ms
setb bell
lcall del_ms
clr red
clr bell
lcall del_ms
ret
display_right:clr red
clr green
mov time,#250
lcall del_ms
setb GREEN
setb bell
lcall del_ms
lcall del_ms
clr GREEN
clr bell
lcall del_ms
ret
delay_time:mov r3,time3
del4:mov r4,#250
del5:LCALL DOG ;喂狗2
mov r5,#250
del6:jnb door_sensor,del_end1
clr ex0
jnb door_sensor2,del_end4
jb dr_sn,del_end2
clr door_sensor2
jmp del_end
del_end4:jnb dr_sn,del_end2
setb door_sensor2
del_end1:lcall delay6
del_end2:lcall delay6
del_end3:djnz r5,del6
djnz r4,del5
djnz r3,del4
del_end:clr door_sensor
ret
delay_time1:mov r3,time2
del41:mov r4,#240
del51:LCALL DOG ;喂狗2
mov r5,#250
del61:jnb dr_sn,del_end11
mov cs,#2
mov cd,#15 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov dc,#3
mov pl,#232
call str_bell
del_end11:jnb press,del_end31
jb press_open,del_end31
lcall del_10ms
jb press_open,del_end31
jmp open_door
del_end31:lcall key_on
jz del_end41
lcall key_p1
push acc
key_stop:lcall key_on
jnz key_stop
pop acc
clr bell
cjne a,#11h,del_end41
setb sck_bell
nop
nop
jnb sck_bell,have_bell31
setb sck_bell
lcall del_10ms
lcall del_10ms
clr sck_bell
mov r5,#1
jmp del_end41
have_bell31:mov cs,#3
mov dc,#35
mov cd,#50
mov pl,#152
call str_bell
mov r5,#1
del_end41:djnz r5,del61
djnz r4,del51
djnz r3,del41
del_endd: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
LOOP11:LCALL DOG ;喂狗1
MOV R3,#0F9H
LOOP12:NOP
NOP
DJNZ R3,LOOP12
DJNZ R4,LOOP11
pop 03h
pop 04h
RET
BUZZER:setb bell
mov time,#10
lcall del_ms
RET
dog:mov 0a6h,#01eh;喂狗
mov 0a6h,#0e1h
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -