📄 12864lcdlocker.asm
字号:
CLR KDEC
MOV A,MINTUE
LCALL DEC1
MOV MINTUE,A
CJNE A,#99H,DECMINTUE1
MOV MINTUE,#59H
DECMINTUE1:
MOV DS1302_ADDR,#82H ;分钟值送1302
MOV DS1302_DATA,MINTUE
LCALL WRITE
LCALL TIMEDIS ;分钟减1之后,送液晶显示
LJMP CH_KEY
ADJ_OUT:
CLR MINBIT
CLR KF
CLR KO
CLR KADD
CLR KDEC
CLR F_7
CLR ADJ_RL
CLR KBL1
CLR KBL2
CLR KBL3
CLR KBL4
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H ;1302振荡
LCALL WRITE
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#80H ;禁止写入1302
LCALL WRITE
MOV A,#0CH
LCALL SEND_I
LJMP CH_KEY
;--------------------修改密码处理子程序------------------
MODI:
JB F_5,MODI_1
MOV TIMERS,#0
CLR F_1
CLR F_7
CLR IRIN_1
SETB F_5
MOV A,#1
LCALL SEND_I
LCALL INITPS
LCALL INITLCD1
LCALL MENU_B1
LCALL MENU_B2
SETB F_2
LJMP CH_KEY
MODI_1:
CLR F_5
CLR F_2
CLR F_3
CLR F_4
CLR F_6
MOV TIMERS,#0
LJMP MAIN1
MODI_EXIT:
LJMP CH_KEY
;--------------------确认键处理子程序------------------
ENTER:
NOP
NOP
NOP
JB F_7,ENTER_EXIT
JB IRIN_1,IRIN_SAVE
JB F_1,BKCOMP1
JB BUF_FULL,ENTER_RUN ;判断密码是否已经够6位。
AJMP ENTER_EXIT ;如果密码不够6位,退出确认键程序。
IRIN_SAVE:
AJMP IRIN_CODE
BKCOMP1:
AJMP BKCOMP
ENTER_RUN:
CLR BUF_FULL
CLR PASSBIT5
JB F_3,CONFIPRD_1
LCALL AT_READ ;读取24C02地址单元密码
LCALL PSW_COMP ;调用密码比较程序
JB PSW_TF,OPEN_1
INC TIMERS1 ;密码次数加1
MOV A,TIMERS1
CJNE A,#03H,DOIT
DOIT:
JC ENTER_1
MOV TIMERS1,#0
LCALL MENU_A4
MOV 75H,#200
ALARM:
LCALL FMQ ;三次密码输入有误,蜂鸣器,鸣叫3声,锁定1分钟
DJNZ 75H,ALARM
JNB F_5 ,KBLKING
AJMP ENTER_A
OPEN_1:
AJMP OPEN
CONFIPRD_1:
AJMP CONFIPRD
ENTER_1:
CJNE A,#1,ENTER_SEC
LCALL MENU_A2 ;中文提示:第一次密码输入错误
AJMP WRONG_SOUN
ENTER_SEC:
LCALL MENU_A3
;中文提示:第二次密码输入错误
WRONG_SOUN:
LCALL DELAY2S
KBLKING:
JB F_5,ENTER_A
LCALL MENU4
AJMP ENTER_EXIT
ENTER_A:
MOV A,#98H
LCALL SEND_I
LCALL CLR_LINE
ENTER_EXIT:
LCALL INITPS
LCALL INITLCD1
MOV TIMERS,#0
MOV BUFF,#0
CLR FLAG1
;判断按键是否松开,防止按键误触发
LJMP CH_KEY
IRIN_CODE:
NOP
JNB IRIN_SF,CODE_OUT
CLR IRIN_SF
LCALL IRIN_WR
LCALL MENU_C5 ;地址码和数据码,
LCALL MENU_C6 ;保存成功!
LCALL DELAY2S
CLR IRIN_1
CLR IRIN_2
LJMP MAIN1
CODE_OUT:
LCALL MENU_C5 ; 地址码和数据码,
LCALL MENU_C7 ;保存失败!
LCALL DELAY2S
CLR IRIN_1
CLR IRIN_2
LJMP MAIN1
;****************后门两次密码进行比较****************************
BKCOMP:
NOP
NOP
LCALL BK_COMP
JB PSW_TF,BKTURE
CLR F_1
MOV TIMERS,#0
LCALL INITPS
LCALL INITNEW
LCALL INITTWO
LJMP MAIN1
BKTURE:
CLR PSW_TF
LCALL MENU_E3 ;密码锁的密码是
LCALL AT_READ
;前1位密码显示
MOV A,AT1
ADD A,#48
LCALL SEND_D
MOV A,AT2
ADD A,#48
LCALL SEND_D
MOV A,AT3
ADD A,#48
LCALL SEND_D
MOV A,AT4
ADD A,#48
LCALL SEND_D
MOV A,AT5
ADD A,#48
LCALL SEND_D
MOV A,AT6
ADD A,#48
LCALL SEND_D
LCALL DELAY2S
LCALL DELAY1S
LCALL INITPS
LCALL INITNEW
LCALL INITTWO
MOV TIMERS,#0
CLR F_1
LJMP MAIN1
;****************开锁子程序******************************
OPEN:
NOP
CLR PSW_TF
JB F_2,NEWPRD
MOV A,#0CH ;关闭光标
LCALL SEND_I
LCALL MENU_A1 ;中文提示:密码输入正确
CLR OKEY ;开锁,持续时间2秒。
LCALL DELAY5MS
LCALL DELAY5MS
LCALL DELAY5MS
LCALL DELAY6MS
SETB OKEY
LCALL DELAY2S
LCALL DELAY2S
MOV TIMERS1,#0
AJMP ENTER_EXIT
;****************输入新密码*****************************
NEWPRD:
NOP
LCALL MENU_B3
SETB F_3
SETB F_6
AJMP ENTER_EXIT
;****************确认新密码******************************
CONFIPRD:
NOP
JB F_4,TWOCOMP
LCALL MENU_B4
SETB F_4
CLR F_6
AJMP ENTER_EXIT
;****************两次密码进行比较****************************
TWOCOMP:
NOP
LCALL TWO_COMP
JB PSW_TF,TRUE
LCALL MENU_B8
LCALL MENU_B9
LCALL MENU_B10
;两次输入密码不符合,密码修改失败,退出修改
LCALL DELAY2S
WRONG:
MOV TIMERS,#0
LCALL INITPS
LCALL INITLCD1
CLR F_2
CLR F_3
CLR F_4
CLR F_5
LJMP MAIN1
TRUE:
CLR F_5
CLR F_2
CLR F_3
CLR F_4
CLR PSW_TF
LCALL MENU_B5
LCALL MENU_B6
LCALL AT_WR
LCALL DELAY6MS ;密码修改成功
LCALL AT_READ
MOV A,AT1
ADD A,#48
LCALL SEND_D
MOV A,AT2 ;显示前2位密码
ADD A,#48
LCALL SEND_D
MOV A,AT3 ;显示3位密码显示
ADD A,#48
LCALL SEND_D
MOV A,AT4 ;前4位密码显示
ADD A,#48
LCALL SEND_D
MOV A,AT5 ;前5位密码显示
ADD A,#48
LCALL SEND_D
MOV A,AT6 ;前6位密码显示
ADD A,#48
LCALL SEND_D
LCALL DELAY2S
LCALL DELAY2S
AJMP WRONG
;****************检验后门密码正误******************************
BK_COMP:
PUSH PSW
PUSH ACC
MOV R2,#06H
MOV R0,#BKPS1
MOV R1,#PS1
BK_P:
CLR C
MOV A,@R0
SUBB A,@R1
JNZ BKRE
INC R0
INC R1
DJNZ R2,BK_P
NOP
SETB PSW_TF ;密码正确,密码对错标志位置1。
AJMP BK_EXIT7
BKRE:
CLR PSW_TF ;密码错误,密码对错标志位置0。
BK_EXIT7:
NOP
POP ACC
POP PSW
RET
;****************检验密码正误******************************
PSW_COMP:
PUSH PSW
PUSH ACC
MOV R2,#06H
MOV R0,#AT1
MOV R1,#PS1
C_P:
CLR C
MOV A,@R0
SUBB A,@R1
JNZ RETURN
INC R0
INC R1
DJNZ R2,C_P
NOP
SETB PSW_TF ;密码正确,密码对错标志位置1。
AJMP EXIT7
RETURN:
CLR PSW_TF ;密码错误,密码对错标志位置0。
EXIT7:
NOP
POP ACC
POP PSW
RET
;****************检验两次密码正误******************************
TWO_COMP:
PUSH PSW
PUSH ACC
MOV R2,#06H
MOV R0,#TWOPRD1
MOV R1,#NEWPRD1
TWOC_P:
CLR C
MOV A,@R0
SUBB A,@R1
JNZ TWO_RETURN
INC R0
INC R1
DJNZ R2,TWOC_P
NOP
SETB PSW_TF ;密码正确,密码对错标志位置1。
AJMP TWO_EXIT7
TWO_RETURN:
CLR PSW_TF ;密码错误,密码对错标志位置0。
TWO_EXIT7:
NOP
POP ACC
POP PSW
RET
;*************初始化修改密码的第ER次密密码**************
INITTWO:
PUSH ACC
PUSH PSW
MOV R7,#06H
MOV R1,#NEWPRD1
MOV A,#00H
INIT_TWO:
MOV @R1,A
INC R1
DJNZ R7,INIT_TWO
POP PSW
POP ACC
NOP
RET
;*************初始化修改密码的第一次密密码**************
INITNEW:
PUSH ACC
PUSH PSW
MOV R7,#06H
MOV R1,#TWOPRD1
MOV A,#00H
INIT_NEW:
MOV @R1,A
INC R1
DJNZ R7,INIT_NEW
POP PSW
POP ACC
NOP
RET
;*************初始化显示缓冲区以及其他缓冲区**************
INITPS:
PUSH ACC
PUSH PSW
MOV R7,#06H
MOV R1,#PS1
MOV A,#00H
INIT_PS:
MOV @R1,A
INC R1
DJNZ R7,INIT_PS
POP PSW
POP ACC
NOP
RET
;*************清LCD屏,密码输入区域**************
INITLCD1:
PUSH ACC
PUSH PSW
MOV R7,#06H
JB F_5,INITLCD_A1
MOV A,#9AH ;第4行密码输入区清空
LCALL SEND_I
INITLCD1_L:
MOV A,#0A1H
LCALL SEND_D
MOV A,#0A0H
LCALL SEND_D
DJNZ R7,INITLCD1_L
MOV A,#9AH ; ;光标停留在第4行第3个汉字处闪烁
LCALL SEND_I
AJMP INITLCD_OUT
INITLCD_A1:
MOV A,#08AH ;第3行密码输入区清空
LCALL SEND_I
INITLCD_A2:
MOV A,#0A1H
LCALL SEND_D
MOV A,#0A0H
LCALL SEND_D
DJNZ R7,INITLCD_A2
MOV A,#08AH ;光标停留在第3行第3个汉字处闪烁。
LCALL SEND_I
INITLCD_OUT:
POP PSW
POP ACC
NOP
RET
;***********************************
; 判断是否有键按下
;***********************************
KS:
MOV P1,#0FH
NOP
MOV A,P1
CPL A
ANL A,#0FH
NOP
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -