📄 12864lcdlocker.asm
字号:
CLR C
MOV A,BUFF
SUBB A,#14H
JNZ F1_K
LJMP ENTER ;跳转到确认处理程序
F1_K:
CLR C
MOV A,BUFF
SUBB A,#10H
JNZ F2_K
JB ADJ_RL,KK2 ;调整日历的时候,作为加1功能键
AJMP F4_K ;功能键1,进入遥控器解码菜单
KK2:
SETB KADD
AJMP F4_K1
F2_K:
CLR C
MOV A,BUFF
SUBB A,#13H
JNZ F3_K
JB ADJ_RL,KK3 ;调整日历的时候,作为减1功能键 DEC
AJMP FU2 ;后门程序,用来查看当前密码,后门密码778166
KK3:
SETB KDEC
AJMP F4_K1
F3_K:
CLR C
MOV A,BUFF
SUBB A,#12H
JNZ F4_K ;进入修改时间功能键,同时作为顺序调整功能键
JNB ADJ_RL,FU3
SETB KF
F4_K1:
AJMP FU3
F4_K: ;
AJMP CH_KEY
;***********************************
; 各功能键处理子程序
;***********************************
;--------------------后门键处理子程序------------------
FU2:
NOP
NOP
LCALL DELAY2S
LCALL KS
JZ FU2_EXIT
CLR F_5
CLR F_7
CLR IRIN_1
MOV TIMERS,#0
LCALL INITPS
LCALL INITLCD1
MOV A,#1
LCALL SEND_I
LCALL MENU_E1 ;启动后门查看密码程序
LCALL MENU_E2
SETB F_1
FU2_EXIT:
LCALL KS
JNZ FU2_EXIT
FU2_OUT:
AJMP CH_KEY
;--------------------进入调整日历子程序------------------
FU3:
JB F_1,FU3_EXIT
JB F_5,FU3_EXIT
JB IRIN_1,FU3_EXIT
SETB F_7
SETB ADJ_RL
MOV TIMERS,#0
LCALL INITPS
LCALL INITLCD1
CLR PASSBIT1
CLR PASSBIT2
CLR PASSBIT3
CLR PASSBIT4
CLR PASSBIT5
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H ;允许写1302
LCALL WRITE
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#80H ;1302停止振荡
LCALL WRITE
ADJ_YEAR:
JB KBL1,AA1
JB KF,ADJMONTH_1 ;调整月
JB KO,ADJ_CALEN_EXIT
JB KADD,ADDYEAR ;进入年加1程序
JB KDEC,DECYEAR ;进入年减1程序
SETB YEARBIT
LCALL TIMEDIS
AJMP CH_KEY
ADJ_CALEN_EXIT:
CLR KO
CLR F_7
CLR ADJ_RL
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H ;1302振荡
LCALL WRITE
MOV A,#0CH
LCALL SEND_I
AJMP MAIN1
AA1:
AJMP ADJMONTH
FU3_EXIT:
AJMP CH_KEY
ADJMONTH_1:
CLR KF
CLR YEARBIT
SETB MONTHBIT
AJMP ADJMONTH
ADDYEAR: ;年加1
CLR KADD
MOV A,TIME_YEAR
LCALL ADD1
MOV TIME_YEAR,A
MOV DS1302_ADDR,#8CH ;年值送1302
MOV DS1302_DATA,TIME_YEAR
LCALL WRITE
LCALL TIMEDIS ;年加1之后,送液晶显示
AJMP CH_KEY
DECYEAR: ;年减1
CLR KDEC
MOV A,TIME_YEAR
LCALL DEC1
MOV TIME_YEAR,A
MOV DS1302_ADDR,#8CH ;年值送1302
MOV DS1302_DATA,TIME_YEAR
LCALL WRITE
LCALL TIMEDIS ;年加1之后,送液晶显示
AJMP CH_KEY
ADJMONTH:
SETB KBL1
ADJ_MONTH: ;调整月
JB KBL2,AA2
JB KO,BACKADJYEAR
JB KADD,ADDMONTH
JB KDEC,DECMONTH
JB KF,ADJDAY1
MOV A,#83H
LCALL SEND_I ;光标置月调整位置
AJMP CH_KEY
AA2:
AJMP ADJDAY
ADJDAY1:
CLR KF
CLR MONTHBIT
SETB DATEBIT
AJMP ADJDAY
BACKADJYEAR: ;返回调整年
CLR KBL1
CLR KO
AJMP ADJ_YEAR
ADDMONTH: ;月加1
CLR KADD
MOV A,TIME_MONTH
LCALL ADD1
MOV TIME_MONTH,A
CJNE A,#13H,ADDMONTH1
MOV TIME_MONTH,#1H
ADDMONTH1:
MOV DS1302_ADDR,#88H ;月值送1302
MOV DS1302_DATA,TIME_MONTH
LCALL WRITE
LCALL TIMEDIS ;月加1之后,送液晶显示
LJMP CH_KEY
DECMONTH:
LCALL DELAY5MS ;月减1
CLR KDEC
MOV A,TIME_MONTH
LCALL DEC1
MOV TIME_MONTH,A
CJNE A,#00H,DECMONTH1
MOV TIME_MONTH,#12H
DECMONTH1:
MOV DS1302_ADDR,#88H ;月值送1302
MOV DS1302_DATA,TIME_MONTH
LCALL WRITE
LCALL TIMEDIS ;月减1之后,送液晶显示
LJMP CH_KEY
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ADJDAY:
SETB KBL2
ADJ_DAY: ;日调整
JB KBL3,AA3
JB KO,BACKADJMONTH
JB KADD,ADDDAY ;按下K3键,日加1
JB KDEC,DECDAY_ADJ ;按下K4键,日减1
JB KF,JUMP_ALARM ;按下K1键,调整闹铃的开启或者关闭
MOV A,#85H
LCALL SEND_I ;光标置日调整位置
LJMP CH_KEY
DECDAY_ADJ:
CLR KDEC
LJMP DECDAY
AA3:
LJMP ADJALARM
JUMP_ALARM:
CLR KF
CLR DATEBIT
SETB HOURBIT
LJMP ADJALARM
BACKADJMONTH: ;返回调整年
CLR KBL2
CLR KO
LJMP ADJ_MONTH
ADDDAY: ;日加1
CLR KADD
MOV A,TIME_MONTH
CJNE A,#02H,ADDAUGUST
MOV R3,TIME_YEAR
LCALL ZH
MOV A,R3
JZ RADDDAY ;A=0,为闰年,二月有29天;A=1,为平年,二月有28天。
MOV A,TIME_DAY
LCALL ADD1
MOV TIME_DAY,A
CJNE A,#29H,PADDDAY ;平年,二月有28天。
MOV TIME_DAY,#01
LJMP PADDDAY
RADDDAY:
MOV A,TIME_DAY
LCALL ADD1
MOV TIME_DAY,A
CJNE A,#30H,PADDDAY ;闰年,二月有29天。
MOV TIME_DAY,#01
PADDDAY:
MOV DS1302_ADDR,#86H ;日值送1302
MOV DS1302_DATA,TIME_DAY
LCALL WRITE
LCALL TIMEDIS ;日加1之后,送液晶显示
LJMP CH_KEY
ADDAUGUST:
CJNE A,#08H,ADJEACHDAY_ADD
MOV A,TIME_DAY
LCALL ADD1
MOV TIME_DAY,A
CJNE A,#32H,ADDAUGUST1
MOV TIME_DAY,#01H
ADDAUGUST1:
MOV DS1302_ADDR,#86H ;日值送1302
MOV DS1302_DATA,TIME_DAY
LCALL WRITE
MOV DS1302_ADDR,#8AH ;星期值送1302
MOV DS1302_DATA,WEEK
LCALL WRITE
LCALL TIMEDIS ;日加1之后,送液晶显示
LJMP CH_KEY
ADJEACHDAY_ADD: ;调整大小月天数
PUSH A
CLR CY ;判断是否大于或是小于8月
SUBB A,#08
JNC ADD_MOR_AUGUST ;CY=1,表明当前月小于8月,CY=0,表明当前月大月8月
CLR CY
POP A
MOV R3,A
LCALL ZH1
MOV A,R3
JZ ADJ_S_DAY_ADD ;A=0调整小月天数;A=1,调整大月天数
ADD_COMM_MONTH1:
MOV A,TIME_DAY
LCALL ADD1
MOV TIME_DAY,A ;大月31天,调整程序。
CJNE A,#32H,ADJ_M_DAY_ADD
MOV TIME_DAY,#1
ADJ_M_DAY_ADD:
MOV DS1302_ADDR,#86H ;日值送1302
MOV DS1302_DATA,TIME_DAY
LCALL WRITE
LCALL TIMEDIS ;日加1之后,送液晶显示
LJMP CH_KEY
ADD_MOR_AUGUST: ;大于8月调整程序
POP A
MOV R3,A
LCALL ZH1
MOV A,R3
JZ ADD_COMM_MONTH1
ADJ_S_DAY_ADD: ;小月30天调整
MOV A,TIME_DAY
LCALL ADD1
MOV TIME_DAY,A ;
CJNE A,#31H,ADJ_S_DAY1
MOV TIME_DAY,#1
ADJ_S_DAY1:
MOV DS1302_ADDR,#86H ;日值送1302
MOV DS1302_DATA,TIME_DAY
LCALL WRITE
LCALL TIMEDIS ;日加1之后,送液晶显示
LJMP CH_KEY
DECDAY: ;日减1
MOV A,TIME_MONTH
CJNE A,#02H,DECAUGUST
MOV R3,TIME_YEAR
LCALL ZH
MOV A,R3
JZ RDECDAY ;A=0,为闰年,二月有29天;A=1,为平年,二月有28天。
MOV A,TIME_DAY
LCALL DEC1
MOV TIME_DAY,A
CJNE A,#00H,PDECDAY ;平年,二月有28天。
MOV TIME_DAY,#28H
AJMP PDECDAY
RDECDAY:
MOV A,TIME_DAY
LCALL DEC1
MOV TIME_DAY,A
CJNE A,#00H,PDECDAY ;闰年,二月有29天。
MOV TIME_DAY,#29H
PDECDAY:
MOV DS1302_ADDR,#86H ;日值送1302
MOV DS1302_DATA,TIME_DAY
LCALL WRITE
LCALL TIMEDIS ;日加1之后,送液晶显示
LJMP CH_KEY
DECAUGUST:
CJNE A,#08H,ADJEACHDAY_DEC
MOV A,TIME_DAY
LCALL DEC1
MOV TIME_DAY,A
CJNE A,#00H,DECAUGUST1
MOV TIME_DAY,#31H
DECAUGUST1:
MOV DS1302_ADDR,#86H ;日值送1302
MOV DS1302_DATA,TIME_DAY
LCALL WRITE
LCALL TIMEDIS ;日加1之后,送液晶显示
LJMP CH_KEY
ADJEACHDAY_DEC: ;调整大小月天数
PUSH A
CLR CY ;判断是否大于或是小于8月
SUBB A,#08
JNC DEC_MOR_AUGUST ;CY=1,表明当前月小于8月,CY=0,表明当前月大月8月
CLR CY
POP A
MOV R3,A
LCALL ZH1
MOV A,R3
JZ ADJ_S_DAY_DEC ;A=0调整小月天数;A=1,调整大月天数
DEC_COMM_MONTH1:
MOV A,TIME_DAY
LCALL DEC1
MOV TIME_DAY,A ;大月31天,调整程序。
CJNE A,#00H,ADJ_M_DAY_DEC
MOV TIME_DAY,#31H
ADJ_M_DAY_DEC:
MOV DS1302_ADDR,#86H ;日值送1302
MOV DS1302_DATA,TIME_DAY
LCALL WRITE
LCALL TIMEDIS ;日减1之后,送液晶显示
LJMP CH_KEY
DEC_MOR_AUGUST: ;大于8月调整程序
POP A
MOV R3,A
LCALL ZH1
MOV A,R3
JZ DEC_COMM_MONTH1
ADJ_S_DAY_DEC: ;小月30天调整
MOV A,TIME_DAY
LCALL DEC1
MOV TIME_DAY,A ;
CJNE A,#00H,ADJ_S_DAY1_DEC
MOV TIME_DAY,#30H
ADJ_S_DAY1_DEC:
MOV DS1302_ADDR,#86H ;日值送1302
MOV DS1302_DATA,TIME_DAY
LCALL WRITE
LCALL TIMEDIS ;日加1之后,送液晶显示
LJMP CH_KEY
ADJALARM:
SETB KBL3
ADJ_HOUR:
JB KBL4,ADJMINTUE
JB KF,ADJMINTUE_1
JB KO,BACKADJDAY
JB KADD,ADDHOUR
JB KDEC,DECHOUR
MOV A,#94H
LCALL SEND_I ;光标置小时调整位置
LJMP CH_KEY
ADJMINTUE_1:
CLR KF
CLR HOURBIT
SETB MINBIT
AJMP ADJMINTUE
BACKADJDAY:
CLR KBL3
CLR KO
LJMP ADJ_DAY
ADDHOUR: ;小时加1
CLR KADD
MOV A,HOUR
LCALL ADD1
MOV HOUR,A
CJNE A,#24H,ADDHOUR1
MOV HOUR,#0
ADDHOUR1:
MOV DS1302_ADDR,#84H ;小时值送1302
MOV DS1302_DATA,HOUR
LCALL WRITE
LCALL TIMEDIS ;小时加1之后,送液晶显示
LJMP CH_KEY ;北京时间22:12:12
DECHOUR: ;小时减1
CLR KDEC
MOV A,HOUR
LCALL DEC1
MOV HOUR,A
CJNE A,#99H,DECHOUR1
MOV HOUR,#23H
DECHOUR1:
MOV DS1302_ADDR,#84H ;小时值送1302
MOV DS1302_DATA,HOUR
LCALL WRITE
LCALL TIMEDIS ;小时减1之后,送液晶显示
LJMP CH_KEY
ADJMINTUE:
SETB KBL4
ADJ_MINTUE:
JB KF,ADJ_OUT
JB KO,BACKADJHOUR
JB KADD,ADDMINTUE
JB KDEC,DECMINTUE
MOV A,#96H
LCALL SEND_I ;光标置分钟调整位置
LJMP CH_KEY
BACKADJHOUR:
CLR KBL4
CLR KO
LJMP ADJ_HOUR
ADDMINTUE:
CLR KADD
MOV A,MINTUE
LCALL ADD1
MOV MINTUE,A
CJNE A,#60H,ADDMINTUE1
MOV MINTUE,#0
ADDMINTUE1:
MOV DS1302_ADDR,#82H ;分钟值送1302
MOV DS1302_DATA,MINTUE
LCALL WRITE
LCALL TIMEDIS ;分钟加1之后,送液晶显示
LJMP CH_KEY
DECMINTUE: ;分钟减1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -