📄 alarm.txt
字号:
ljmp testpw_end
tp61:
clr tr0
clr c
mov a,54h
subb a,#0ah
jnc tp_101
mov a,position
cjne a,#5eh,save_buffle01
ljmp reapt
save_buffle01:
mov r0,position ;键值是09a之间
mov @r0,54h
inc position
inc count1
mov a,count1
cjne a,#length_pw,tp92
setb right
totp92:
ljmp tp92
tp_101:
mov a,54h
clr c
subb a,#0ah
jz test_a
mov 54h,#0ffh
ljmp tp92
test_a:
mov position,#5ah
mov count1,#0
inc count2
jb right,tp_3
mov a,count2
cjne a,#times_pw,times_no
ljmp testpw_end
times_no:
ljmp reapt
tp_3:
clr right
mov r0,#24h
cmpagain:
mov 29h,@r0
mov a,r0
add a,#36h
mov r0,a
mov a,@r0
cjne a,29h,tryagain
mov a,r0
clr c
subb a,#36h
mov r0,a
inc r0
cjne r0,#28h,cmpagain
setb valid1
lcall beep
ljmp testpw_end
tryagain:
clr valid1
mov a,count2
cjne a,#times_pw,times_no
testpw_end:
mov count2,#00
lcall beep
mov a,#10h
lcall disp_seg
ret
;==============================
rd_valid:
mov r6,#05
mov MRD,#51h
LCALL IRDNBYTE
MOV A,MRD
cjne a,#0,valid_1
clr valid
ajmp rd_valid_out
valid_1:
cjne a,#0ffh,rd_valid
setb valid
rd_valid_out: ret
;===============================保存valid 于eeprom===================
save_valid:
jb valid,iic05_1
mov a,#0
mov 3ch,a
ljmp save_valid1
iic05_1:
mov a,#0ffh
mov 3ch,a
clr ea
save_valid1:
mov MTD,3ch
mov r6,#05
lcall IWRNBYTE
NOP
mov MRD,#51h
LCALL IRDNBYTE
MOV A,MRD
cjne a,3ch,save_valid1
setb ea
ret
;------------------------清EEPROM----------------------------------
clrEEPR0M:
clr ea
MOV MTD,#00H
mov r6,#06
WR24WCXXS:
LCALL IWRNBYTE
NOP ;在此设置断点,观察ACK位,ACK为1时操作正确\
RD24WCXXS:
mov MRD,#51h
LCALL IRDNBYTE
mov a,MRD
cjne a,MTD,WR24WCXXS
djnz r6,WR24WCXXS
clr valid
mov 37h,#1
clr_phone:
mov a,37h
mov b,#18
mul ab
mov R6,a
MOV MTD,#0AH
clr_iic1:
lcall IWRNBYTE
NOP
mov MRD,#51h
LCALL IRDNBYTE
mov a,MRD
cjne a,MTD,clr_iic1
INC 37H
MOV A,#MAX
INC a
cjne a,37H,clr_phone ;是#号键吗;清密码
lcall beeplong
setb ea
RET
;==================录音==========================
RECORD:
LCALL BEEP
mov 7fh,#00h
mov 7eh,#00h
clr 03h
setb tr0
CLR p_record
CLR p_play
RECORD1:
lcall findkey
jb 03h,record_end
mov a,54h
cjne a,#0ffh,record_end
ljmp RECORD1
record_end:
clr tr0
setb firstflag1
SETB p_record
ret
play:
LCALL BEEP
MOV 21H,#0FFH
CLR LED4
MOV A,21H
mov sbuf,a
jnb ti,$
clr ti
clr es
clr 03h
mov 7fh,#00h
mov 7eh,#00h
setb tr0
clr mute ;放音
setb p_play
SETB p_record
play1:
setb ex1
lcall findkey
jb 03h,play_end
mov a,54h
cjne a,#0ffh,play_end
ljmp play1
play_end:
clr p_play
clr tr0
setb mute
mov 30h,#30
lcall delay5ms
setb firstflag1
setb ex1
lcall beep
jnb relax_flag,play_end1
clr ex1
play_end1:
ret
;===================== 进入存储状态 ========================
STORE:
MOV 21H,#0FFH
CLR LED2 ;预置灯
MOV A,21H
mov sbuf,a
jnb ti,$
clr ti
L90:
mov addresspoint,#1
setb firstflag1
L91:
lcall beep
setb a_flag
mov position,#40h
mov 40h,#0ah
mov 58h,addresspoint
mov 57h,#10h
mov 56h,#10h
mov 55h,#10h
mov 54h,#0ffh
mov 59h,#00h
L92:
mov 7eh,#00h
mov 7fh,#00h
setb ea
clr time_out
setb tr0
L92_1:
lcall disp ;显示
lcall findkey
jb keyflag,L61
jb time_out,L92_3
ljmp L92_1
L92_3:
clr time_out
ljmp store_end
L61:
clr tr0
clr c
mov a,54h
subb a,#0ah
jnc store_101 ;键值是0~a之间
ljmp store_1
store_101:
mov a,54h
cjne a,#0ah,L62
jnb a_flag,store_3
ljmp store_end
store_3:
mov r0,position ;将 # 存入缓存
mov @r0,#0ah
mov position,#40h ;将缓存中的数存入IIC
mov a,addresspoint
mov b,#18
mul ab
mov r6,a ;r6中存放页面首地址
wt_iic1:
mov r0,position
mov a,@r0
mov 36h,a
wt_iic:
mov a,36h
clr ea
MOV MTD,A
lcall IWRNBYTE
NOP
mov MRD,#51h
LCALL IRDNBYTE
MOV A,MRD
clr c
subb a,36h ;保存r0
jnz wt_iic
mov a,36h
cjne a,#0ah,goon_wt
clr a_flag ;退出标志
setb ea
mov a,addresspoint
cjne a,#max,addresspoint_inc
ljmp L90
addresspoint_inc:
inc addresspoint
setb firstflag1
ljmp L91
goon_wt:
inc r6
inc position
ljmp wt_iic1
L62:
cjne a,#0dh,L63 ;上翻
lcall scan_up
nop
nop
nop
nop
Ljmp L91
L63:
cjne a,#0eh,L64 ;删除
lcall delete
nop
Ljmp L91
L64:
cjne a,#0ch,L65 ;修改
mov 58h,#10H
mov 57h,#10h
mov 56h,#10h
mov 55h,#10h
mov 59h,#00h
mov 54h,#0ffh
nop
setb firstflag1
Ljmp L91
L65:
mov 54h,#0ffh
ljmp L92
;===============进入存储号码状态7==5==5==========================
store_1:
clr a_flag
mov a,position
cjne a,#52h,save_buffle
ljmp L91
save_buffle:
mov r0,position
mov @r0,54h
inc position
ljmp L92
; ==================== 关显示 ========================
store_end:
setb ea
lcall beeplong
setb firstflag1
mov 54h,#0ffh
mov 55h,#10h
mov 56h,#10h
mov 57h,#10h
mov 58h,#10h
mov 59h,#00h
mov a,#10h
lcall disp_seg
ret
;===================================== 上翻 ===========================
scan_up:
mov a,addresspoint
cjne a,#max,scan_cycle
mov addresspoint,#1
ljmp cycle
scan_cycle:
inc addresspoint
cycle:
clr firstflag1
mov a,addresspoint ;循环显示
mov b,#18
mul ab
mov 3Ah,a
mov 58h,addresspoint
mov 57h,#10h
mov 56h,#10h
mov 55h,#10h
mov 54h,#0ffh
mov 59h,#00h
againi000:
mov 2fh,#40
disp_goon:
lcall disp
lcall findkey
jb keyflag,cycle_end
djnz 2fh,disp_goon
re_rdiic:
MOV r6,3AH
INC 3AH
clr ea
mov MRD,#51h
LCALL IRDNBYTE
MOV A,MRD
mov 54h,a ;保存 a 里面为键值
cjne a,#0ah,againi000 ;是#号键吗
ljmp scan_end2
cycle_end:
mov a,54h
cjne a,#0dh,cycle_out ;scan
ljmp scan_up
cycle_out:
cjne a,#0ah,recify
ljmp scan_end2
recify:
JNB valid,morefunc
ljmp re_rdiic
morefunc:
cjne a,#0ch,delt ;modify
ljmp L91
delt:
cjne a,#0eh,re_rdiic ;delete
lcall delete
scan_end2:
lcall beep ;修改完成
setb ea
MOV 21H,#0FFH
mov 54h,#0ffh
mov 55h,#10h
mov 56h,#10h
mov 57h,#10h
mov 58h,#10h
mov 59h,#00h
ret
;===================================== 删除 ===========================
delete:
lcall beep
mov 58h,addresspoint
mov 57h,#10h
mov 56h,#10h
mov 55h,#11h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -