📄 带02的密码验证修改.asm
字号:
MOV 31H,A ;分解"年"的低位, 31H
MOV A,44H
ANL A,#0F0H
SWAP A
ORL A,#30H
MOV 32H,A ;分解"月"的高位, 32H
MOV A,44H
ANL A,#0FH
ORL A,#30H
MOV 33H,A ;分解"月"的低位, 33H
MOV A,43H
ANL A,#0F0H
SWAP A
ORL A,#30H
MOV 34H,A ;分解"日"的高位, 34H
MOV A,43H
ANL A,#0FH
ORL A,#30H
MOV 35H,A ;分解"日"的低位, 35H
MOV A,45H ;对于星期字节可以不做处理,基本不用
ANL A,#0FH
ORL A,#30H
MOV 36H,A ;分解"星期"的高位, 36H
MOV A,45H
SWAP A
ANL A,#0FH
ORL A,#30H
MOV 37H,A ;分解"星期"的低位, 37H
MOV A,42H
ANL A,#0F0H
SWAP A
ORL A,#30H
MOV 38H,A ;分解"小时"的高位, 38H
MOV A,42H
ANL A,#0FH
ORL A,#30H
MOV 39H,A ;分解"小时"的低位, 39H
MOV A,41H
ANL A,#0F0H
SWAP A
ORL A,#30H
MOV 3AH,A ;分解"分"的高位, 3AH
MOV A,41H
ANL A,#0FH
ORL A,#30H
MOV 3BH,A ;分解"分"的低位, 3BH
MOV A,40H
ANL A,#0F0H
SWAP A
ORL A,#30H
MOV 3CH,A ;分解"秒"的高位, 3CH
MOV A,40H
ANL A,#0FH
ORL A,#30H
MOV 3DH,A ;分解"秒"的低位, 3DH
RET
; 显示时分秒.年月日等
DIP7BY:
;液晶屏幕第2行
MOV COM,#92H ;由92H地址开始显示
LCALL WRI
MOV DATT,38H ;显示"小时'高位
LCALL WRD
MOV DATT,39H ;显示低位
LCALL WRD
MOV COM,#93H ;由93H地址开始显示
LCALL WRI
MOV DATT,#3AH ;显示 ":'
LCALL WRD
MOV DATT,3AH ;显示"分" 高位
LCALL WRD
MOV COM,#94H ;由94H地址开始显示
LCALL WRI
MOV DATT,3BH ;显示"分" 低位
LCALL WRD
MOV DATT,#3AH ;显示":"
LCALL WRD
MOV COM,#95H ;由95H地址开始显示
LCALL WRI
MOV DATT,3CH ;显示"秒'高位
LCALL WRD
MOV DATT,3DH ;显示低位
LCALL WRD
;液晶屏幕第3行 /4行
MOV COM,#89H ;由89H地址开始显示,99H
LCALL WRI
MOV DATT,30H ;显示"年'高位
LCALL WRD
MOV DATT,31H ;显示低位
LCALL WRD
MOV COM,#8AH ;由8AH地址开始显示,9AH
LCALL WRI
MOV DATT,#0C4H ;显示 "年'
LCALL WRD
MOV DATT,#0EAH
LCALL WRD
MOV COM,#8BH ;由8BH地址开始显示,9BH
LCALL WRI
MOV DATT,32H ;显示"月" 高位
LCALL WRD
MOV DATT,33H ;显示低位
LCALL WRD
MOV COM,#8CH ;由8CH地址开始显示,9CH
LCALL WRI
MOV DATT,#0D4H ;显示"月"
LCALL WRD
MOV DATT,#0C2H
LCALL WRD
MOV COM,#8DH ;由8DH地址开始显示,9DH
LCALL WRI
MOV DATT,34H ;显示"日" 高位
LCALL WRD
MOV DATT,35H
LCALL WRD
MOV COM,#8EH ;由8EH地址开始显示,9EH
LCALL WRI
MOV DATT,#0C8H ;显示"日"
LCALL WRD
MOV DATT,#0D5H
LCALL WRD
MOV COM,#9DH ;至于"星期"可根据情况,决定是否显示,可以正常读出 0-6 的数据
LCALL WRI
MOV DATT,#020H ;显示"<"
LCALL WRD
MOV DATT,#5BH
LCALL WRD
LCALL WEEK ;周处理在45H
MOV COM,#9FH
LCALL WRI
MOV DATT,#5DH ;显示">"
LCALL WRD
MOV DATT,#20H
LCALL WRD
RET
;周显示子程序
WEEK: MOV COM,#9EH
LCALL WRI
MOV A,45H
ANL A,#00000111B ;00000111H
WEEK1: CJNE A,#01H,WEEK2
MOV DATT,#0D2H ;显示"一"
LCALL WRD
MOV DATT,#0BBH
LCALL WRD
LJMP WEEK0
WEEK2: CJNE A,#02H,WEEK3
MOV DATT,#0B6H ;显示"二"
LCALL WRD
MOV DATT,#0FEH
LCALL WRD
LJMP WEEK0
WEEK3: CJNE A,#03H,WEEK4
MOV DATT,#0C8H ;显示"三"
LCALL WRD
MOV DATT,#0FDH
LCALL WRD
LJMP WEEK0
WEEK4: CJNE A,#04H,WEEK5
MOV DATT,#0CBH ;显示"四"
LCALL WRD
MOV DATT,#0C4H
LCALL WRD
LJMP WEEK0
WEEK5: CJNE A,#05H,WEEK6
MOV DATT,#0CEH ;显示"五"
LCALL WRD
MOV DATT,#0E5H
LCALL WRD
LJMP WEEK0
WEEK6: CJNE A,#06H,WEEK7
MOV DATT,#0C1H ;显示"六"
LCALL WRD
MOV DATT,#0F9H
LCALL WRD
LJMP WEEK0
WEEK7: CJNE A,#07H,WEEK0
MOV DATT,#0C8H ;显示"日"
LCALL WRD
MOV DATT,#0D5H
LCALL WRD
WEEK0: RET
;**********************************************************
;子程序名:Set1302
;功 能:设置DS1302 初始时间,并启动计时。
;调 用:RTInputByte
;入口参数:初始时间:Second,Minute,Hour,Day,Month,Week.YearL(地址连续)
;出口参数:无
;影响资源:A B R0 R1 R4 R7
;**********************************************************
Set1302: CLR T_RST ;复位低电平
CLR T_CLK ;时钟低电平
SETB T_RST ;复位高电平
MOV B, #8EH ;DS1302写控制寄存器 1000-1110B
LCALL RTInputByte
MOV B, #00H ;写操作前WP=0
LCALL RTInputByte
SETB T_CLK
CLR T_RST
MOV R0, #Second; 40h
MOV R7, #7 ;秒 分 时 日 月 星期 年
MOV R1, #80H ;秒写地址
S13021: CLR T_RST
CLR T_CLK
SETB T_RST
MOV B, R1 ;写秒 分 时 日 月 星期 年 地址
LCALL RTInputByte
MOV A, @R0 ;写秒 分 时 日 月 星期 年 数据
MOV B, A
LCALL RTInputByte
INC R0
INC R1
INC R1
SETB T_CLK
CLR T_RST
DJNZ R7, S13021
CLR T_RST
CLR T_CLK
SETB T_RST
MOV B, #8EH ;控制寄存器
LCALL RTInputByte
MOV B, #80H ;控制,WP=1,写保护
LCALL RTInputByte
SETB T_CLK
CLR T_RST
RET
;**********************************************************
;子程序名:Get1302
;功 能:从DS1302 读时间
;调 用:RTInputByte,RTOutputByte
;入口参数:时间保存在:Second,Minute,Hour,Day,Month,Week.YearL
;出口参数:无
;影响资源:A B R0 R1 R4 R7
;**********************************************************
Get1302: MOV R0, #Second;
MOV R7, #7
MOV R1, #81H ;秒地址
G13021: CLR T_RST
CLR T_CLK
SETB T_RST
MOV B, R1 ;秒 分 时 日 月 星期 年 地址
LCALL RTInputByte
LCALL RTOutputByte
MOV @R0, A ;秒
INC R0
INC R1
INC R1
SETB T_CLK
CLR T_RST
DJNZ R7, G13021
RET
;**********************************************************
;功 能:写1302一字节 (内部子程序)
;**********************************************************
RTInputByte: MOV 5fh, #8 ;一个字节有八个位,移八次.
Inbit1: MOV A, B ;8EH(10001110B)送A
RRC A ;通过A移入CY.
MOV B, A
MOV T_IO, C ;移入芯片内.
SETB T_CLK
CLR T_CLK
DJNZ 5fh, Inbit1
RET
;**********************************************************
;功 能:读1302一字节 (内部子程序)
;**********************************************************
RTOutputByte:MOV 5fh, #8 ;一个字节有八个位,移八次.
Outbit1: MOV C, T_IO ;从芯片内移到CY
RRC A ;通过CY移入A.
SETB T_CLK
CLR T_CLK
DJNZ 5fh, Outbit1
RET
;************************************
;**********************************************************
;BC7281B子程序,键盘管理芯片,用到键盘及位地址显示驱动LED指示
;**********************************************************
;发送一个字节子程序 , 入口为 RAM 28H
SEND: CLR CLK
SETB CLK
BWAIT1: JB DAT,SEND
CLR CLK
SETB CLK
BWAIT2: JNB DAT,BWAIT2
MOV R6,#08H
SENDLP: MOV C,28H.7
MOV DAT,C
CLR CLK
SETB CLK
MOV A,28H
RL A
MOV 28H,A
NOP
NOP
NOP
NOP
DJNZ R6,SENDLP
SETB DAT
NOP
NOP
RET
; RECEIVE 1 BYTE FROM BC7281 REGISTER,接收一个字节出口为A . R6
RECV: CLR CLK
SETB CLK
BWAIT3: JB DAT,BWAIT3
CLR CLK
SETB CLK
MOV R6,#08H
RECVLP: NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOV C,DAT
RLC A
CLR CLK
SETB CLK
DJNZ R6,RECVLP
RET
;**********************************************
;***********************************************************
;液晶子程序
;**********************************************************
WRI:
MOV R0,#05H
MOV A,#0FFH
LWR1: RLC A
MOV SID,C
CLR SCLK
SETB SCLK
CLR SCLK
DJNZ R0,LWR1
MOV R0,#03H
MOV A,#00H
LWR2: RLC A
MOV SID,C
CLR SCLK
SETB SCLK
CLR SCLK
DJNZ R0,LWR2
MOV R0,#08H
MOV A,COM
ANL A,#0F0H
LWR3: RLC A
MOV SID,C
CLR SCLK
SETB SCLK
CLR SCLK
DJNZ R0,LWR3
MOV R0,#08H
MOV A,COM
SWAP A
ANL A,#0F0H
LWR4: RLC A
MOV SID,C
CLR SCLK
SETB SCLK
CLR SCLK
DJNZ R0,LWR4
RET
WRD: ;写数据子程序
MOV R0,#05H
;CS固定连接高电平
MOV A,#0FFH
DWR1: RLC A
MOV SID,C
CLR SCLK
SETB SCLK
CLR SCLK
DJNZ R0,DWR1
MOV R0,#03H
MOV A,#40H
DWR2: RLC A
MOV SID,C
CLR SCLK
SETB SCLK
CLR SCLK
DJNZ R0,DWR2
MOV R0,#08H
MOV A,DATT
ANL A,#0F0H
DWR3: RLC A
MOV SID,C
CLR SCLK
SETB SCLK
CLR SCLK
DJNZ R0,DWR3
MOV R0,#08H
MOV A,DATT
SWAP A
ANL A,#0F0H
DWR4: RLC A
MOV SID,C
CLR SCLK
SETB SCLK
CLR SCLK
DJNZ R0,DWR4
RET
;?**************************************************
;********************************
;delay 10ms for 12Mhz ;延时供选择使用
DELAY10: MOV R5,#100 ;延时
DELY0: MOV R4,#99
DELY1: DJNZ R4,DELY1
DJNZ R5,DELY0
RET
DELAY1MS: ;延时
MOV R4,#0AH
DEL4: MOV R5,#18H
DEL3: NOP
DJNZ R5,DEL3
DJNZ R4,DEL4
RET
;DEL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -