📄 at89c2051日期闹钟.asm
字号:
;带日期的闹钟;
ORG 0000H ;程序开始入口
LJMP START
ORG 0003H ;外中断0中断程序入口
RETI
ORG 000BH ;定时器T0中断程序入口
LJMP INTT0 ;跳至INTTO执行
ORG 0013H ;外中断1中断程序入口
RETI
ORG 001BH ;定时器T1中断程序入口
LJMP INTT1
ORG 0023H ;串行中断程序入口地址
RETI
;;;;;;;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START:MOV R0,#70H ;70给R0,清70-7FH显示内存
MOV R7,#0FH
CLEARDISP:MOV @R0,#00H ;0给R0中的数为地址的内存中存放(70H)
INC R0
DJNZ R7,CLEARDISP
MOV 78H,#2 ;默认时间为12:00,闹钟6:30
MOV 79H,#1
mov 76h,#0
mov 77h,#0
MOV 74H,#2 ;防止上电时数码管显示00小时
MOV 75H,#1
MOV 66H,#1 ;中断退出时66H为1时,分、时计时单元数据移入显存标志
MOV 68H,#1 ;上电默认闹钟开状态
MOV 69H,#0
MOV 7DH,#6 ;1闹钟6:30
MOV 7CH,#3
MOV 50H,#1 ;2闹钟6:31
MOV 51H,#3
MOV 52H,#6
MOV 53H,#0
MOV 54H,#2 ;3闹钟6:32
MOV 55H,#3
MOV 56H,#6
MOV 57H,#0
MOV 41H,#1;R G 日期07-10-01
MOV 42H,#0;R S
MOV 43H,#0;Y G
MOV 44H,#1;Y S
MOV 45H,#7;N G
MOV 46H,#0;N S
mov 30h,#0;
MOV 31H,#01H ;时间和日期显示选择1显示时间0日期
MOV 7AH,#0AH ;放入"熄灭符"数据
MOV TMOD,#11H ;设T0、T1为16位定时器
MOV TL0,#0DCH ;62。5MS定时初值(T0计时用)
MOV TH0,#0BH
SETB EA ;总中断开放
SETB ET0 ;允许T0中断
SETB TR0 ;T0定时器开始计时
MOV R4,#10H ;1秒定时用初值(50MS×20)
START1:LCALL DISPLAY ;显示子程序
LCALL BEEP ;闹钟查询
LCALL BJ ;显示查询
JNB P1.7,SETTIME ;P1.7口为0时转时间调整程序
JMP START1 ;P1.7口为1时跳回START1
;;;;;;;;;;;;;;;;;;;;;;;;;;时间闹钟调整;;;;;;;;;;;;;;;;;;;;;;;;;;;
NFLAG:MOV A,68H ;设置闹钟开关状态
CJNE A,#1,BEE68
MOV 68H,#0
JMP E6
BEE68:MOV 68H,#1
E6:MOV 66H,#8 ;中断退出66H不为1时分、时计时单元数据移入显存标志
MOV 72H,7BH ;1 闹钟显示
MOV 73H,7CH
MOV 74H,7DH
MOV 75H,7EH
LCALL DDL
LCALL DDL
MOV 72H,50H ;2 闹钟显示
MOV 73H,51H
MOV 74H,52H
MOV 75H,53H
LCALL DDL
LCALL DDL
MOV 72H,54H;3 闹钟显示
MOV 73H,55H
MOV 74H,56H
MOV 75H,57H
LCALL DDL
LCALL DDL
MOV 72H,68H ;闹钟开关状态显示
MOV 73H,69H
MOV 74H,7AH
MOV 75H,7AH
LCALL DDL
LCALL DDL
MOV 66H,#1
LJMP START1
SETTIME:LCALL DDL
JB P1.7,NFLAG ;键按下小于1秒,设置闹钟状态并查看闹钟时间,大于1秒调时
;;;;;;;;;;;;;;;;;;;调整程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV TL1,#0B0H ;T1闪烁定时初值
MOV TH1,#3CH
MOV R2,#05H ;进入调时状态,赋闪烁定时初值
MOV 66H,#8 ;调闹钟时保持走时,关闭时钟显示数据
SETB ET1 ;允许T1中断
SETB TR1 ;开启定时器T1
SET1:LCALL DISPLAY ;调用显示,防止键按下无显示
JNB P1.7,SET1 ;P1.7口为0等待键释放
MOV R5,#00H ;清设置类型闪烁标志
SETN1:INC R5 ;1闹钟分调整 R5=1
SET11:LCALL DISPLAY
JB P1.7,SET11
SEETN1:LCALL DDL ;按下大于1秒1闹钟分+1,小于1秒转调1闹钟时
JB P1.7,SET2 ;键释放自动转调闹钟时
MOV R0,#7CH ;1闹钟分+1
LCALL ADD1
MOV A,R3
CJNE A,#60H,SEETN1
LCALL CLR0
JMP SEETN1
SET2:INC R5 ;闹钟时调整r5=2
SEET22:LCALL DISPLAY
JB P1.7,SEET22
SEETNH1:LCALL DDL
JB P1.7,SETF1
MOV R0,#7EH ;1闹钟时+1
LCALL ADD1
MOV A,R3
CJNE A,#24H,SEETNH1
LCALL CLR0
LJMP SEETNH1
SETF1:LCALL DISPLAY
JB P1.7,SETF1
LCALL DDL
JNB P1.7,OUT1 ;短按调2闹钟分时间,长按退出
setn11: inc r5;R5=3
set55: lcall display;
jb p1.7,set55;
seetn11:lcall ddl;
jb p1.7,set66;按下大于1秒2闹钟分+1,小于1秒转调2闹钟时
mov r0,#51h;2闹钟分+1
lcall add1;
mov a,r3;
cjne a,#60h,seetn11;
lcall clr0;
jmp seetn11;
set66: inc r5;R5=4
seet66: lcall display;
jb p1.7,seet66;
seetnh11:lcall ddl;
jb p1.7,setfA;
mov r0,#53h;2闹钟时+1
lcall add1;
mov a,r3;
cjne a,#24h,seetnh11;
lcall clr0;
jmp seetnh11;
SETFA:LCALL DISPLAY
JB P1.7,SETFA
LCALL DDL
JNB P1.7,OUT1 ;短按调3闹钟分时间,长按退出
jmp SETN12;
OUT1: JMP SETOUT
setn12: inc r5;R5=5
set52: lcall display;
jb p1.7,set52;
seetn12:lcall ddl;
jb p1.7,set62;按下大于1秒3闹钟分+1,小于1秒转调3闹钟时
mov r0,#55h;3闹钟分+1
lcall add1;
mov a,r3;
cjne a,#60h,seetn12;
lcall clr0;
jmp seetn12;
set62: inc r5;R5=6
seet62: lcall display;
jb p1.7,seet62;
seetnh12:lcall ddl;
jb p1.7,SETFB;
mov r0,#57h;3闹钟时+1
lcall add1;
mov a,r3;
cjne a,#24h,seetnh12;
lcall clr0;
jmp seetnh12;
SETFB:LCALL DISPLAY
JB P1.7,SETFB
LCALL DDL
JNB P1.7,SETOUT ;短按调日期,长按退出
SET555: INC R5;R5=7
CLR TR0 ;关闭T0
CLR ET0 ;关T0中断
MOV 70H,#1
MOV 71H,#0
SETT5: LCALL DISPLAY;
mov 31h,#1
JB P1.7,SETT5;
SETH55: LCALL DDL;
JB P1.7,SET666;
MOV R0,#42H;日+1
LCALL ADD1;
MOV A,R3;
CJNE A,#32H,SETH55;
LCALL CLR0;
MOV 41H,#01H
AJMP SETH55;
SET666: INC R5;R5=8
SETT6: LCALL DISPLAY;
JB P1.7,SETT6;
SETH6: LCALL DDL;
JB P1.7,SET7;
MOV R0,#44H;月+1
LCALL ADD1;
MOV A,R3;
CJNE A,#13H,SETH6;
LCALL CLR0;
MOV 43H,#01H
AJMP SETH6;
SET7: INC R5;R5=9
SETT7: LCALL DISPLAY;
JB P1.7,SETT7;
SETH7: LCALL DDL;
JB P1.7,SETfC;
MOV R0,#46H;年+1
LCALL ADD1;
MOV A,R3;
CJNE A,#99H,SETH7;
LCALL CLR0;
AJMP SETH7;
SETOUT1:SETB ET0
SETB TR0 ;计时开始
SETOUT: MOV R5,#00H ;清设置类型闪烁标志
CLR TR1 ;关闭T1
CLR ET1 ;关T1中断
MOV 66H,#1
mov 30h,#00H
MOV 31H,#01H
LJMP START1
SETFC: LCALL DISPLAY
JB P1.7,SETFC
LCALL DDL
JNB P1.7,SETOUT1 ;短按分时间调整,长按退出
SETF: INC R5;R5=A
MOV 70H,#00H ;设定后的时间从00秒开始走时
MOV 71H,#00H
CLR TR0 ;关闭T0
CLR ET0 ;关T0中断
SETF3:LCALL DISPLAY
JB P1.7,SETF3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -