disp first EQU 30H;顯示第壹地址存儲單元
貝爾EQU p 1.4;門鈴
康布斯EQU 2FH;節省時間的次數
ORG 0000H程序執行開始地址
LJMP啟動;跳到標簽開始保持
ORG 0003H外部中斷0中斷程序
RETI;外部中斷0中斷返回
ORG 000BH定時器T0中斷過程
LJMP INTT0跳轉到INTT0執行。
ORG 0013H;外部中斷1中斷程序
RETI;外部中斷1中斷返回
ORG 001BH;定時器T1中斷過程
LJMP intt 1;跳轉到INTT1執行。
ORG 0023H串行中斷程序入口
RETI;串行中斷程序返回
QQQQ: MOV A,#10H
MOV灣,79H
MUL AB
加壹個,78H
MOV·康布斯
bs loop:LCALL ds 20 ms;短期電話
LCALL DL1S
LCALL DL1S
LCALL DL1S
DJNZ CONBS,BSLOOP
CLR 08H清除小時標誌
AJMP START1
;* * * * * * * * * * * * * *主程序開始* * * * * * * * * * * * * *
啟動:CLR鈴聲;
LCALL ST開機顯示年、月、日和班號。
MOV R0,# 00H清除00H~H存儲單元
MOV R7 # 80H
清除顯示:MOV @R0,#00H
INC R0
DJNZ R7,CLEARDISP
MOV 20H,# 00H清除20小時(用於標記)
MOV 7AH,# 0AH輸入“熄滅”數據
MOV TMOD,# 11H;設t0和t1為16位定時器。
MOV TL0,# 0B0H50毫秒計時初始值(用於T0計時)
MOV TH0,# 3CH50毫秒計時初始值
MOV TL1,# 0B0H50毫秒計時初始值(T1閃爍計時)
MOV TH1,# 3CH50毫秒計時初始值
SETB EA;完全中斷開啟
SETB ET0;允許T0中斷
SETB TR0;打開T0中斷
MOV R4,# 14H;1s計時計數(50毫秒*20)
MOV DISPFIRST,# 70H顯示單位為70H~75H。
;下面是主程序循環
START1: LCALL顯示;呼叫顯示子程序
JNB P1.0,setmm 1;當P1.0端口為0時,轉到時間調整程序。
JNB P1.1,FUNSS秒表功能,按P1.1鍵調整時間,做減1的操作。
JNB P1.2,FUNPT秒表停止,按鈕,時鐘
JNB P1.3,TSFUN定時鬧鐘設置
JB 08H,QQQQ符號為1時,報時。
AJMP start 1;當P1.1為1時,跳回START1。
FUNPT:LJMP FUNPT
;以下是報警時間設置程序。按P1.3輸入設置。
t fun:LCALL ds20 ms
JB P1.3,START1
wait 113:JNB p 1.3,wait 113;等待按鍵釋放。
JB 05H,CLOSESP如果鬧鐘開著,就關掉它。
MOV DISPFIRST,# 50H進入鬧鈴設置程序,顯示鬧鈴計時單位50H~55H。
MOV 50H,# 0CH"-"設置鬧鈴時,顯示方式為00:00:-
MOV 51H,# 0AH“黑色”
等待:SETB EA
LCALL顯示
JNB P1.2,DSFINC單獨添加1
JNB P1.0,DSDEC負1
JNB P1.3,DSSFU入境調整
AJMP DSWAIT
CLOSESP:CLR 05H;關閉警報標誌
CLR貝爾
AJMP START1
DSSFU:LCALL ds 20 ms;防抖
JB P1.3,DSWAIT
LJMP DSSFUNN進入時的調整
SETMM 1:LJMP SETMM;轉到時間調整程序設置mm。
ds finc:LCALL ds 20 ms;防抖
JB P1.2,DSWAIT
DSWAIT12: LCALL顯示;等額債券發行
JNB P1.2,DSWAIT12
CLR EA
MOV R0,#53H
LCALL add 1;報警設置分為1
MOV A,R3;子數據放入
clr C;清除進位標記
CJNE A,#60H,ADDHH22
addhh 22:JC ds wait;當小於60分鐘時,返回。
ACALL CLR0當大於或等於60分鐘時,分鐘計時單位被清除為0。
AJMP DSWAIT
ds dec:LCALL ds 20 ms;防抖
JB P1.0,DSWAIT
dswaite:LCALL顯示;等額債券發行
JNB P1.0,德斯威特
CLR EA
MOV R0,#53H
LCALL sub 1;報警設置減少1。
LJMP DSWAIT
;下面是秒表功能/時鐘轉換程序。
;按P1.1進行函數轉換。
FUNSS: LCALL DS20MS
JB P1.1,START11
等待11:JNB p 1.1
CPL 03H
JNB 03H,蒂姆芬
MOV DISPFIRST,# 60H顯示秒表數據單元
MOV 60H,#00H
MOV 61H,#00H
MOV 62H,#00H
MOV 63H,#00H
MOV 64H,#00H
MOV 65H,#00H
MOV TL1,# 0F0H10ms定時初始值
MOV TH1,# 0D8H10ms定時初始值
SETB TR1
SETB ET1
開始11: LJMP開始1
TIMFUN: MOV DISPFIRST,# 70H顯示時鐘數據單元
CLR ET1
CLR TR1
START12: LJMP START1
;下面是秒表暫停和清除功能程序。
;按P1.2暫停或清除0,按P1.1退出秒表並返回時鐘。
FUNPTT: LCALL DS20MS
JB P1.2,START12
等待22: JNB P1.2,等待21
CLR ET1
CLR TR1
等待33: JNB P1.1,有趣
JB P1.2,WAIT31
LCALL DS20MS
JB P1.2,等待33
等待66: JNB P1.2,等待61
MOV 60H,#00H
MOV 61H,#00H
MOV 62H,#00H
MOV 63H,#00H
MOV 64H,#00H
MOV 65H,#00H
等待44: JNB P1.1,有趣
JB P1.2,WAIT41
LCALL DS20MS
JB P1.2,等待44
等待55: JNB P1.2,等待51
SETB ET1
SETB TR1
AJMP START1
;以下是鍵等待釋放時不會熄滅的顯示
WAIT21: LCALL顯示
AJMP等待22
WAIT31: LCALL顯示
AJMP等待33
WAIT41: LCALL顯示
AJMP等待44
WAIT51: LCALL顯示
AJMP等待55
WAIT61: LCALL顯示
AJMP等待66
;* * * * * * * * * * * * * * 1s計時程序* * * * * * * * * * * * * * * *