📄 万年历.asm
字号:
MOV A,31H ;分钟 -1
CJNE A,#00H,DECMH4
MOV 31H,#59H
SJMP DECM12
DECMH4:LCALL DECA
MOV 31H,A
SJMP DECM12
DECMH3:MOV A,30H ;小时 -1
CJNE A,#00H,DECMH5
MOV 30H,#23H
SJMP DECM12
DECMH5:LCALL DECA
MOV 30H,A
DECM12:SETB P2.6
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;十进制减法子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;
DECA:CJNE A,#10H,DECA1 ;运算范围为1~50
MOV A,#09H
RET
DECA1:CJNE A,#20H,DECA2
MOV A,#19H
RET
DECA2:CJNE A,#30H,DECA3
MOV A,#29H
RET
DECA3:CJNE A,#40H,DECA4
MOV A,#39H
RET
DECA4:CJNE A,#50H,DECA5
MOV A,#49H
RET
DECA5:DEC A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;闹钟按键子程序;;;;;;;;;;;;;;;;;;;;;;;;
T1M1:MOV P0,#0FFH ;闹钟1加一分钟
MOV P2,#10111111B
JNB P2.2,T1M11
CLR 03H ;按键2是否有效
T1M11:JB 03H,T1M12
JB P2.2,T1M12
LCALL MXIAN ;这四个为去抖动
MOV P0,#0FFH
MOV P2,#10111111B
JB P2.2,T1M12
SETB 03H ;按键2是否有效
SETB 0AH ;时钟加减标致位
MOV A,36H ;分钟 +1
CJNE A,#59H,T1M13
MOV 36H,#00H
SJMP T1M12
T1M13:ADD A,#01
DA A
MOV 36H,A
T1M12:SETB P2.6
RET
;---------------------------------------------------------
T1H1:MOV P0,#0FFH ;闹钟1加一小时
MOV P2,#10111111B
JNB P2.3,T1H11
CLR 04H ;按键3是否有效
T1H11:JB 04H,T1H12
JB P2.3,T1H12
LCALL MXIAN ;这四个为去抖动
MOV P0,#0FFH
MOV P2,#10111111B
JB P2.3,T1H12
SETB 04H ;按键3是否有效
CLR 0AH ;时钟加减标致位
MOV A,35H ;小时 +1
CJNE A,#23H,T1H13
MOV 35H,#00H
SJMP T1H12
T1H13:ADD A,#01
DA A
MOV 35H,A
T1H12:SETB P2.6
RET
;---------------------------------------------------------
T2M1:MOV P0,#0FFH ;闹钟2加一分钟
MOV P2,#10111111B
JNB P2.2,T2M11
CLR 03H ;按键2是否有效
T2M11:JB 03H,T2M12
JB P2.2,T2M12
LCALL MXIAN ;这四个为去抖动
MOV P0,#0FFH
MOV P2,#10111111B
JB P2.2,T2M12
SETB 03H ;按键2是否有效
SETB 0BH ;时钟加减标致位
MOV A,38H ;分钟 +1
CJNE A,#59H,T2M13
MOV 38H,#00H
SJMP T2M12
T2M13:ADD A,#01
DA A
MOV 38H,A
T2M12:SETB P2.6
RET
;---------------------------------------------------------
T2H1:MOV P0,#0FFH ;闹钟2加一小时
MOV P2,#10111111B
JNB P2.3,T2H11
CLR 04H ;按键3是否有效
T2H11:JB 04H,T2H12
JB P2.3,T2H12
LCALL MXIAN ;这四个为去抖动
MOV P0,#0FFH
MOV P2,#10111111B
JB P2.3,T2H12
SETB 04H ;按键3是否有效
CLR 0BH ;时钟加减标致位
MOV A,37H ;小时 +1
CJNE A,#23H,T2H13
MOV 37H,#00H
SJMP T2H12
T2H13:ADD A,#01
DA A
MOV 37H,A
T2H12:SETB P2.6
RET
;------------------------------闹钟1------------------------------
DECT1:MOV P0,#0FFH ;减一分钟/一小时
MOV P2,#10111111B
JNB P2.1,DECT11
CLR 05H ;按键1是否有效
DECT11:JB 05H,DECT12
JB P2.1,DECT12
LCALL MXIAN ;这四个为去抖动
MOV P0,#0FFH
MOV P2,#10111111B
JB P2.1,DECT12
SETB 05H ;按键1是否有效
JNB 0AH,DECT13
MOV A,36H ;分钟 -1
CJNE A,#00H,DECT14
MOV 36H,#59H
SJMP DECT12
DECT14:LCALL DECA
MOV 36H,A
SJMP DECT12
DECT13:MOV A,35H ;小时 -1
CJNE A,#00H,DECT15
MOV 35H,#23H
SJMP DECT12
DECT15:LCALL DECA
MOV 35H,A
DECT12:SETB P2.6
RET
;------------------------------闹钟2---------------------------------
DECT2:MOV P0,#0FFH ;减一分钟/一小时
MOV P2,#10111111B
JNB P2.1,DECT21
CLR 05H ;按键1是否有效
DECT21:JB 05H,DECT22
JB P2.1,DECT22
LCALL MXIAN ;这四个为去抖动
MOV P0,#0FFH
MOV P2,#10111111B
JB P2.1,DECT22
SETB 05H ;按键1是否有效
JNB 0BH,DECT23
MOV A,38H ;分钟 -1
CJNE A,#00H,DECT24
MOV 38H,#59H
SJMP DECT22
DECT24:LCALL DECA
MOV 38H,A
SJMP DECT22
DECT23:MOV A,37H ;小时 -1
CJNE A,#00H,DECT25
MOV 37H,#23H
SJMP DECT22
DECT25:LCALL DECA
MOV 37H,A
DECT22:SETB P2.6
RET
;------------------------闹钟开关-------------------------
T1T2:MOV P0,#0FFH ;闹钟开关
MOV P2,#10111111B
JNB P2.2,T1T21
CLR 05H ;按键2是否有效
T1T21:JB 05H,T1T22
JB P2.2,T1T22
SETB 05H ;按键2是否有效
CPL 06H ;闹钟开关
JB 06H,T1T23
MOV R1,#2
MOV 3CH,#0CH ;将暂存的数转成字形 显示"0N"
MOV 3DH,#0AAH ;将暂存的数转成字形 显示" "
MOV 3EH,#0AAH ;将暂存的数转成字形 显示" "
SETB 07H ;不显示小数点1
SETB 08H ;不显示小数点2
T1DAT3:MOV R7,#100
T1DAT2:LCALL MXIAN
DJNZ R7,T1DAT2
DJNZ R1,T1DAT3
SJMP T1T22
T1T23:MOV R1,#2
MOV 3CH,#0FH ;将暂存的数转成字形 显示"OF"
MOV 3DH,#0FAH ;将暂存的数转成字形 显示"F "
MOV 3EH,#0AAH ;将暂存的数转成字形 显示" "
SETB 07H ;不显示小数点1
SETB 08H ;不显示小数点2
T2DAT3:MOV R7,#100
T2DAT2:LCALL MXIAN
DJNZ R7,T2DAT2
DJNZ R1,T2DAT3
T1T22:SETB P2.6
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示年月日按键子程序;;;;;;;;;;;;;;;;;;;
DAT:MOV P0,#0FFH
MOV P2,#10111111B
JB P2.3,DAT1
MOV R1,#5
MOV 3CH,39H ;将暂存的数转成字形 显示39H
MOV 3DH,3AH ;将暂存的数转成字形 显示3AH
MOV 3EH,3BH ;将暂存的数转成字形 显示3BH
CLR 07H ;显示小数点1
CLR 08H ;显示小数点2
DAT3:MOV R7,#100
DAT2:LCALL MXIAN
DJNZ R7,DAT2
DJNZ R1,DAT3
DAT1:SETB P2.6
RET
;---------------------------------------------------------
DATEN:MOV P0,#0FFH ;年份加1
MOV P2,#10111111B
JNB P2.3,DATEN1
CLR 04H ;按键3是否有效
DATEN1:JB 04H,DATEN2
JB P2.3,DATEN2
LCALL MXIAN ;这四个为去抖动
MOV P0,#0FFH
MOV P2,#10111111B
JB P2.3,DATEN2
SETB 04H ;按键3是否有效
ADDN:MOV A,39H ;年份 +1
CJNE A,#50H,DATEN3
MOV 39H,#01H
SJMP DATEN2
DATEN3:ADD A,#01
DA A
MOV 39H,A
DATEN2:SETB P2.6
RET
;---------------------------------------------------------
DATEM:MOV P0,#0FFH ;月份加1
MOV P2,#10111111B
JNB P2.2,DATEM1
CLR 03H ;按键2是否有效
DATEM1:JB 03H,DATEM2
JB P2.2,DATEM2
LCALL MXIAN ;这四个为去抖动
MOV P0,#0FFH
MOV P2,#10111111B
JB P2.2,DATEM2
SETB 03H ;按键3是否有效
ADDM:MOV A,3AH ;月份 +1
CJNE A,#12H,DATEM3
MOV 3AH,#01H
LCALL ADDN ;年份+1
SJMP DATEM2
DATEM3:ADD A,#01
DA A
MOV 3AH,A
DATEM2:SETB P2.6
RET
;---------------------------------------------------------
DATED:MOV P0,#0FFH ;加1日
MOV P2,#10111111B
JNB P2.1,DATED1
CLR 05H ;按键1是否有效
DATED1:JB 05H,DATED2
JB P2.1,DATED2
LCALL MXIAN ;这四个为去抖动
MOV P0,#0FFH
MOV P2,#10111111B
JB P2.1,DATED2
SETB 05H ;按键3是否有效
ADDD:MOV A,39H ;判断是否是闰年
MOV B,#04H
DIV AB
MOV A,B
JZ DATED4
MOV DPTR,#TAB2 ;平年
SJMP DATED5
DATED4:MOV DPTR,#TAB3 ;闰年
DATED5:MOV A,3AH ;用月份查表
MOVC A,@A+DPTR
MOV B,A
MOV A,3BH ;+1日
CJNE A,B,DATED3
MOV 3BH,#01H
LCALL ADDM ;月份+1
SJMP DATED2
DATED3:CJNE A,#32H,DATED6
MOV 3BH,#01H
SJMP DATED2
DATED6:ADD A,#01
DA A
MOV 3BH,A
DATED2:SETB P2.6
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;闹钟子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DSQ:MOV A,35H ;判断30H单元和35H单元是否相等
CJNE A,30H,DSQ1 ;是:判断31H单元和36H单元是否相等
MOV A,36H ;否:判断另一个闹钟时间
CJNE A,31H,DSQ1
CLR 01H ;另一个相等,闹钟清标致位
SJMP DSQ2
DSQ1:SETB 01H ;不等,标致位置位
DSQ2:MOV A,37H ;同上
CJNE A,30H,DSQ3
MOV A,38H
CJNE A,31H,DSQ3
CLR 02H
SJMP DSQ4
DSQ3:SETB 02H
DSQ4:MOV C,01H ;将两个闹钟合并在同一个端口输出
ANL C,02H
ORL C,06H ;闹钟输出总开关
MOV P1.0,C ;闹钟输出在P1.0口
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END ;程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -