;*********************************************************************************************;
;以下程序能用于24小時(shí)計(jì)時(shí),能作為秒表使用,能定時(shí)鬧鈴1分鐘(也可關(guān)).
;使用方法:開機(jī)后在00:00:00起開始計(jì)時(shí),(1)長按P1.0進(jìn)入調(diào)分狀態(tài):分單元閃爍
;按P1.0加1,按P1.1減1.再長按P1.0進(jìn)入時(shí)調(diào)整狀態(tài),時(shí)單元閃爍,加減調(diào)整同調(diào)分.
;按長按退出調(diào)整狀態(tài). (2)按下P1.1進(jìn)入秒表狀態(tài):按P1.2暫停,再按P1.2秒表清零,再按
;P1.2秒表又啟動(dòng),按P1.1退出秒表回到時(shí)鐘狀態(tài). (3)按P1.3進(jìn)入設(shè)定鬧時(shí)狀態(tài): 00:00: -,可進(jìn)
;行分設(shè)定,按P1.2分加1,再按P1.3為時(shí)調(diào)整,00:00:- ,按P1.2時(shí)加1,按P1.1鬧鈴有效,顯示為00:00:-0,再按
;P1.1鬧鈴無效(顯示00:00:- ,),按P1.3調(diào)鬧鐘結(jié)束.在鬧鈴時(shí)可按P1.3停鬧,不按鬧鈴1分鐘.
;定時(shí)器T0、T1溢出周期為50MS,T0為秒計(jì)數(shù)用, T1為調(diào)整時(shí)閃爍及秒表定時(shí)用,
;P1.0、P1.1、P1.2、P1.3為調(diào)整按鈕,P0口為字符輸出口,P2為掃描口,P1.7為蜂嗚器口,采用共陽顯示管。
;50H-55H為鬧鐘定時(shí)單元,60H-65H為秒表計(jì)時(shí)單元,70H-75H為顯示時(shí)間單元,76H-79H為分時(shí)計(jì)時(shí)單元。
;03H標(biāo)志=0時(shí)鐘閃爍,=1秒表, 05H=0,不鬧鈴,=1要鬧鈴. 07H每秒改變一次,用作間隔嗚叫.
;***********************************************************************************************;
DISPFIRST EQU 30H ;顯示首址存放單元
BELL EQU P1.7 ;小喇叭
CONBS EQU 2FH ;存放報(bào)時(shí)次數(shù)
;
;****************************************
;; 中斷入口程序 ;;
;****************************************
;
ORG 0000H ;程序執(zhí)行開始地址
LJMP START ;跳到標(biāo)號START執(zhí)行
ORG 0003H ;外中斷0中斷程序入口
RETI ;外中斷0中斷返回
ORG 000BH ;定時(shí)器T0中斷程序入口
LJMP INTT0 ;跳至INTTO執(zhí)行
ORG 0013H ;外中斷1中斷程序入口
RETI ;外中斷1中斷返回
ORG 001BH ;定時(shí)器T1中斷程序入口
LJMP INTT1 ;跳至INTT1執(zhí)行
ORG 0023H ;串行中斷程序入口地址
RETI ;串行中斷程序返回
;
;****************************************
;; 以下程序開始 ;;
;****************************************
;整點(diǎn)報(bào)時(shí)用
QQQQ : MOV A,#10H
MOV B,79H
MUL AB
ADD A,78H
MOV CONBS,A
BSLOOP: LCALL DS20MS
LCALL DL1S
LCALL DL1S
LCALL DL1S
DJNZ CONBS,BSLOOP
CLR 08H ;清整點(diǎn)報(bào)時(shí)標(biāo)志
AJMP START1
;
;****************************************
;; 主程序開始 ;;
;****************************************
;
START: LCALL ST ;上電顯示年月日及班級學(xué)號
MOV R0,#00H ;清00H-7FH內(nèi)存單元
MOV R7,#80H ;
CLEARDISP: MOV @R0,#00H ;
INC R0 ;
DJNZ R7,CLEARDISP ;
MOV 20H,#00H ;清20H(標(biāo)志用)
MOV 7AH,#0AH ;放入"熄滅符"數(shù)據(jù)
MOV TMOD,#11H ;設(shè)T0、T1為16位定時(shí)器
MOV TL0,#0B0H ;50MS定時(shí)初值(T0計(jì)時(shí)用)
MOV TH0,#3CH ;50MS定時(shí)初值
MOV TL1,#0B0H ;50MS定時(shí)初值(T1閃爍定時(shí)用)
MOV TH1,#3CH ;50MS定時(shí)初值
SETB EA ;總中斷開放
SETB ET0 ;允許T0中斷
SETB TR0 ;開啟T0定時(shí)器
MOV R4,#14H ;1秒定時(shí)用計(jì)數(shù)值(50MS×20)
MOV DISPFIRST,#70H ;顯示單元為70-75H
;以下主程序循環(huán)
START1: LCALL DISPLAY ;調(diào)用顯示子程序
JNB P1.0,SETMM1 ;P1.0口為0時(shí)轉(zhuǎn)時(shí)間調(diào)整程序
JNB P1.1,FUNSS ;秒表功能,P1.1按鍵調(diào)時(shí)時(shí)作減1加能
JNB P1.2,FUNPT ;秒表STOP,PUSE,CLR
JNB P1.3,TSFUN ;定時(shí)鬧鈴設(shè)定
JB 08H, QQQQ
AJMP START1 ;P1.0口為1時(shí)跳回START1
;
FUNPT: LJMP FUNPTT
;以下鬧鈴時(shí)間設(shè)定程序,按P1.3進(jìn)入設(shè)定
TSFUN: LCALL DS20MS
JB P1.3,START1 ;
WAIT113: JNB P1.3,WAIT113 ;等待鍵釋放
JB 05H,CLOSESP ;鬧鈴已開的話,關(guān)鬧鈴
MOV DISPFIRST,#50H ;進(jìn)入鬧鈴設(shè)定程序,顯示50-55H鬧鐘定時(shí)單元
MOV 50H,#0CH ;"-" 鬧鈴設(shè)定時(shí)顯示格式00:00: -
MOV 51H,#0AH ;"黑"
;
DSWAIT: SETB EA
LCALL DISPLAY
JNB P1.2,DSFINC ;分加1
JNB P1.0,DSDEC ;分減1
JNB P1.3,DSSFU ;進(jìn)入時(shí)調(diào)整
AJMP DSWAIT
;
CLOSESP: CLR 05H ;關(guān)鬧鈴標(biāo)志
CLR BELL
AJMP START1
DSSFU: LCALL DS20MS ;消抖
JB P1.3, DSWAIT
LJMP DSSFUNN ;進(jìn)入時(shí)調(diào)整
;
SETMM1: LJMP SETMM ;轉(zhuǎn)到時(shí)間調(diào)整程序SETMM
;
DSFINC : LCALL DS20MS ;消抖
JB P1.2, DSWAIT
DSWAIT12: LCALL DISPLAY ;等鍵 釋放
JNB P1.2, DSWAIT12
CLR EA
MOV R0,#53H ;
LCALL ADD1 ;鬧鈴設(shè)定分加1
MOV A,R3 ;分?jǐn)?shù)據(jù)放入A
CLR C ;清進(jìn)位標(biāo)志
CJNE A,#60H,ADDHH22 ;
ADDHH22: JC DSWAIT ;小于60分時(shí)返回
ACALL CLR0 ;大于或等于60分時(shí)分計(jì)時(shí)單元清0
AJMP DSWAIT
DSDEC : LCALL DS20MS ;消抖
JB P1.0, DSWAIT
DSWAITEE: LCALL DISPLAY ;等鍵 釋放
JNB P1.0, DSWAITEE
CLR EA
MOV R0,#53H ;
LCALL sub1 ;鬧鈴設(shè)定分減1
LJMP DSWAIT
;以下秒表功能/時(shí)鐘轉(zhuǎn)換程序
;按下P1.1 可進(jìn)行功能轉(zhuǎn)換
FUNSS: LCALL DS20MS
JB P1.1,START11
WAIT11: JNB P1.1,WAIT11
CPL 03H
JNB 03H,TIMFUN
MOV DISPFIRST,#60H ;顯示秒表數(shù)據(jù)單元
MOV 60H,#00H
MOV 61H,#00H
MOV 62H,#00H
MOV 63H,#00H
MOV 64H,#00H
MOV 65H,#00H
MOV TL1,#0F0H ;10MS定時(shí)初值()
MOV TH1,#0D8H ;10MS定時(shí)初值
SETB TR1
SETB ET1
START11: LJMP START1
TIMFUN:MOV DISPFIRST,#70H ;顯示時(shí)鐘數(shù)據(jù)單元
CLR ET1
CLR TR1
START12: LJMP START1
;以下秒表暫停\清零功能程序
;按下P1.2暫停或清0,按下P1.1退出秒表回到時(shí)鐘計(jì)時(shí)
FUNPTT: LCALL DS20MS
JB P1.2,START12
WAIT22: JNB P1.2,WAIT21
CLR ET1
CLR TR1
WAIT33: JNB P1.1,FUNSS
JB P1.2,WAIT31
LCALL DS20MS
JB P1.2,WAIT33
WAIT66: JNB P1.2,WAIT61
MOV 60H,#00H
MOV 61H,#00H
MOV 62H,#00H
MOV 63H,#00H
MOV 64H,#00H
MOV 65H,#00H
WAIT44: JNB P1.1,FUNSS
JB P1.2,WAIT41
LCALL DS20MS
JB P1.2,WAIT44
WAIT55: JNB P1.2,WAIT51
SETB ET1
SETB TR1
AJMP START1
;以下鍵等待釋放時(shí)顯示不會熄滅用
WAIT21: LCALL DISPLAY
AJMP WAIT22
WAIT31: LCALL DISPLAY
AJMP WAIT33
WAIT41: LCALL DISPLAY
AJMP WAIT44
WAIT51: LCALL DISPLAY
AJMP WAIT55
WAIT61: LCALL DISPLAY
AJMP WAIT66
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 1秒計(jì)時(shí)程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T0中斷服務(wù)程序
INTT0: PUSH ACC ;累加器入棧保護(hù)
PUSH PSW ;狀態(tài)字入棧保護(hù)
CLR ET0 ;關(guān)T0中斷允許
CLR TR0 ;關(guān)閉定時(shí)器T0
MOV A,#0B7H ;中斷響應(yīng)時(shí)間同步修正
ADD A,TL0 ;低8位初值修正
MOV TL0,A ;重裝初值(低8位修正值)
MOV A,#3CH ;高8位初值修正
ADDC A,TH0 ;
MOV TH0,A ;重裝初值(高8位修正值)
SETB TR0 ;開啟定時(shí)器T0
DJNZ R4, OUTT0 ;20次中斷未到中斷退出
ADDSS: MOV R4,#14H ;20次中斷到(1秒)重賦初值
CPL 07H ;鬧鈴時(shí)間隔嗚叫用
MOV R0,#71H ;指向秒計(jì)時(shí)單元(71H-72H)
ACALL ADD1 ;調(diào)用加1程序(加1秒操作)
MOV A,R3 ;秒數(shù)據(jù)放入A(R3為2位十進(jìn)制數(shù)組合)
CLR C ;清進(jìn)位標(biāo)志
CJNE A,#60H,ADDMM ;
ADDMM: JC OUTT0 ;小于60秒時(shí)中斷退出
ACALL CLR0 ;大于或等于60秒時(shí)對秒計(jì)時(shí)單元清0
MOV R0,#77H ;指向分計(jì)時(shí)單元(76H-77H)
ACALL ADD1 ;分計(jì)時(shí)單元加1分鐘
MOV A,R3 ;分?jǐn)?shù)據(jù)放入A
CLR C ;清進(jìn)位標(biāo)志
CJNE A,#60H,ADDHH ;
ADDHH: JC OUTT0 ;小于60分時(shí)中斷退出
ACALL CLR0 ;大于或等于60分時(shí)分計(jì)時(shí)單元清0
LCALL DS20MS ;正點(diǎn)報(bào)時(shí)
SETB 08H
MOV R0,#79H ;指向小時(shí)計(jì)時(shí)單元(78H-79H)
ACALL ADD1 ;小時(shí)計(jì)時(shí)單元加1小時(shí)
MOV A,R3 ;時(shí)數(shù)據(jù)放入A
CLR C ;清進(jìn)位標(biāo)志
CJNE A,#24H,HOUR ;
HOUR: JC OUTT0 ;小于24小時(shí)中斷退出
ACALL CLR0 ;大于或等于24小時(shí)小時(shí)計(jì)時(shí)單元清0
OUTT0: MOV 72H,76H ;中斷退出時(shí)將分、時(shí)計(jì)時(shí)單元數(shù)據(jù)移
MOV 73H,77H ;入對應(yīng)顯示單元
MOV 74H,78H ;
MOV 75H,79H ;
LCALL BAOJ
POP PSW ;恢復(fù)狀態(tài)字(出棧)
POP ACC ;恢復(fù)累加器
SETB ET0 ;開放T0中斷
RETI ;中斷返回
;
;****************************************
;; 閃動(dòng)調(diào)時(shí)程序\秒表功能程序 ;;
;****************************************
;T1中斷服務(wù)程序,用作時(shí)間調(diào)整時(shí)調(diào)整單元閃爍指示或秒表計(jì)時(shí)
INTT1: PUSH ACC ;中斷現(xiàn)場保護(hù)
PUSH PSW ;
JB 03H, MMFUN ;=1時(shí)秒表
MOV TL1, #0B0H ;裝定時(shí)器T1定時(shí)初值
MOV TH1, #3CH ;
DJNZ R2,INTT1OUT ;0.3秒未到退出中斷(50MS中斷6次)
MOV R2,#06H ;重裝0.3秒定時(shí)用初值
CPL 02H ;0.3秒定時(shí)到對閃爍標(biāo)志取反
JB 02H,FLASH1 ;02H位為1時(shí)顯示單元"熄滅"
MOV 72H,76H ;02H位為0時(shí)正常顯示
MOV 73H,77H ;
MOV 74H,78H ;
MOV 75H,79H ;
INTT1OUT: POP PSW ;恢復(fù)現(xiàn)場
POP ACC ;
RETI ;中斷退出
FLASH1: JB 01H,FLASH2 ;01H位為1時(shí),轉(zhuǎn)小時(shí)熄滅控制
MOV 72H,7AH ;01H位為0時(shí),"熄滅符"數(shù)據(jù)放入分
MOV 73H,7AH ;顯示單元(72H-73H),將不顯示分?jǐn)?shù)據(jù)
MOV 74H,78H ;
MOV 75H,79H ;
AJMP INTT1OUT ;轉(zhuǎn)中斷退出
FLASH2: MOV 72H,76H ;01H位為1時(shí),"熄滅符"數(shù)據(jù)放入小時(shí)
MOV 73H,77H ;顯示單元(74H-75H),小時(shí)數(shù)據(jù)將不顯示
MOV 74H,7AH ;
MOV 75H,7AH ;
AJMP INTT1OUT ;轉(zhuǎn)中斷退出
;
MMFUN : CLR TR1
MOV A,#0F7H ;中斷響應(yīng)時(shí)間同步修正,重裝初值(10ms)
ADD A,TL1 ;低8位初值修正
MOV TL1,A ;重裝初值(低8位修正值)
MOV A,#0D8H ;高8位初值修正
ADDC A,TH1 ;
MOV TH1,A ;重裝初值(高8位修正值)
SETB TR1 ;開啟定時(shí)器T0
MOV R0,#61H ;指向秒計(jì)時(shí)單元(71H-72H)
ACALL ADD1 ;調(diào)用加1程序(加1秒操作)
CLR C ;
MOV A,R3 ;
JZ FSS1 ;加1后為00,C=0
AJMP OUTT01 ;加1后不為00,C=1
FSS1: ACALL CLR0 ;大于或等于60秒時(shí)對秒計(jì)時(shí)單元清0
MOV R0,#63H ;指向分計(jì)時(shí)單元(76H-77H)
ACALL ADD1 ;分計(jì)時(shí)單元加1分鐘
MOV A,R3 ;分?jǐn)?shù)據(jù)放入A
CLR C ;清進(jìn)位標(biāo)志
CJNE A,#60H,ADDHH1 ;
ADDHH1: JC OUTT01 ;小于60分時(shí)中斷退出
LCALL CLR0 ;大于或等于60分時(shí)分計(jì)時(shí)單元清0
MOV R0,#65H ;指向小時(shí)計(jì)時(shí)單元(78H-79H)
ACALL ADD1 ;小時(shí)計(jì)時(shí)單元加1小時(shí)
OUTT01:
POP PSW ;恢復(fù)狀態(tài)字(出棧)
POP ACC ;恢復(fù)累加器
RETI ;中斷返回 ;
;****************************************
;; 加1子 程 序 ;;
;****************************************
;
;
ADD1: MOV A,@R0 ;取當(dāng)前計(jì)時(shí)單元數(shù)據(jù)到A
DEC R0 ;指向前一地址
SWAP A ;A中數(shù)據(jù)高四位與低四位交換
ORL A,@R0 ;前一地址中數(shù)據(jù)放入A中低四位
ADD A,#01H ;A加1操作
DA A ;十進(jìn)制調(diào)整
MOV R3,A ;移入R3寄存器
ANL A,#0FH ;高四位變0
MOV @R0,A ;放回前一地址單元
MOV A,R3 ;取回R3中暫存數(shù)據(jù)
INC R0 ;指向當(dāng)前地址單元
SWAP A ;A中數(shù)據(jù)高四位與低四位交換
ANL A,#0FH ;高四位變0
MOV @R0,A ;數(shù)據(jù)放入當(dāng)削地址單元中
RET ;子程序返回
;
;****************************************
;; 分減1子 程 序 ;;
;****************************************
;
SUB1: MOV A,@R0 ;取當(dāng)前計(jì)時(shí)單元數(shù)據(jù)到A
DEC R0 ;指向前一地址
SWAP A ;A中數(shù)據(jù)高四位與低四位交換
ORL A,@R0 ;前一地址中數(shù)據(jù)放入A中低四位
JZ SUB11
DEC A ;A減1操作
SUB111: MOV R3,A ;移入R3寄存器
ANL A,#0FH ;高四位變0
CLR C ;清進(jìn)位標(biāo)志
SUBB A,#0AH
SUB1111: JC SUB1110
MOV @R0,#09H ;大于等于0AH,為9
SUB110: MOV A,R3 ;取回R3中暫存數(shù)據(jù)
INC R0 ;指向當(dāng)前地址單元
SWAP A ;A中數(shù)據(jù)高四位與低四位交換
ANL A,#0FH ;高四位變0
MOV @R0,A ;數(shù)據(jù)放入當(dāng)削地址單元中
RET ;子程序返回
;
SUB11: MOV A,#59H
AJMP SUB111
SUB1110:MOV A,R3 ;移入R3寄存器
ANL A,#0FH ;高四位變0
MOV @R0,A
AJMP SUB110
;****************************************
;; 時(shí)減1子 程 序 ;;
;****************************************
;
SUBB1:MOV A,@R0 ;取當(dāng)前計(jì)時(shí)單元數(shù)據(jù)到A
DEC R0 ;指向前一地址
SWAP A ;A中數(shù)據(jù)高四位與低四位交換
ORL A,@R0 ;前一地址中數(shù)據(jù)放入A中低四位
JZ SUBB11 ;00減1為23(小時(shí))
DEC A ;A減1操作
SUBB111:MOV R3,A ;移入R3寄存器
ANL A,#0FH ;高四位變0
CLR C ;清進(jìn)位標(biāo)志
SUBB A,#0AH ;時(shí)個(gè)位大于9為9
SUBB1111: JC SUBB1110 ;
MOV @R0,#09H ;大于等于0AH,為9
SUBB110: MOV A,R3 ;取回R3中暫存數(shù)據(jù)
INC R0 ;指向當(dāng)前地址單元
SWAP A ;A中數(shù)據(jù)高四位與低四位交換
ANL A,#0FH ;高四位變0
MOV @R0,A ;時(shí)十位數(shù)數(shù)據(jù)放入
RET ;子程序返回
;
SUBB11: MOV A,#23H
AJMP SUBB111
SUBB1110:MOV A,R3 ;時(shí)個(gè)位小于0A不處理
ANL A,#0FH ;高四位變0
MOV @R0,A ;個(gè)位移入
AJMP SUBB110
;****************************************
;; 清零程序 ;;
;****************************************
;對計(jì)時(shí)單元復(fù)零用
CLR0: CLR A ;清累加器
MOV @R0,A ;清當(dāng)前地址單元
DEC R0 ;指向前一地址
MOV @R0,A ;前一地址單元清0
RET ;子程序返回
;
;****************************************
;; 時(shí)鐘時(shí)間調(diào)整程序 ;;
;****************************************
;當(dāng)調(diào)時(shí)按鍵按下時(shí)進(jìn)入此程序
SETMM: cLR ET0 ;關(guān)定時(shí)器T0中斷
CLR TR0 ;關(guān)閉定時(shí)器T0
LCALL DL1S ;調(diào)用1秒延時(shí)程序
LCALL DS20MS ;消抖
JB P1.0,CLOSEDIS ;鍵按下時(shí)間小于1秒,關(guān)閉顯示(省電)
MOV R2,#06H ;進(jìn)入調(diào)時(shí)狀態(tài),賦閃爍定時(shí)初值
MOV 70H,#00H ;調(diào)時(shí)時(shí)秒單元為00 秒
MOV 71H,#00H
SETB ET1 ;允許T1中斷
SETB TR1 ;開啟定時(shí)器T1
SET2: JNB P1.0,SET1 ;P1.0口為0(鍵未釋放),等待
SETB 00H ;鍵釋放,分調(diào)整閃爍標(biāo)志置1
SET4: JB P1.0,SET3 ;等待鍵按下
LCALL DL05S ;有鍵按下,延時(shí)0.5秒
LCALL DS20MS ;消抖
JNB P1.0,SETHH ;按下時(shí)間大于0.5秒轉(zhuǎn)調(diào)小時(shí)狀態(tài)
MOV R0,#77H ;按下時(shí)間小于0.5秒加1分鐘操作
LCALL ADD1 ;調(diào)用加1子程序
MOV A,R3 ;取調(diào)整單元數(shù)據(jù)
CLR C ;清進(jìn)位標(biāo)志
CJNE A,#60H,HHH ;調(diào)整單元數(shù)據(jù)與60比較
HHH: JC SET4 ;調(diào)整單元數(shù)據(jù)小于60轉(zhuǎn)SET4循環(huán)
LCALL CLR0 ;調(diào)整單元數(shù)據(jù)大于或等于60時(shí)清0
CLR C ;清進(jìn)位標(biāo)志
AJMP SET4 ;跳轉(zhuǎn)到SET4循環(huán)
CLOSEDIS: SETB ET0 ;省電(LED不顯示)狀態(tài)。開T0中斷
SETB TR0 ;開啟T0定時(shí)器(開時(shí)鐘)
CLOSE: JB P1.0,CLOSE ;無按鍵按下,等待。
LCALL DS20MS ;消抖
JB P1.0,CLOSE ;是干擾返回CLOSE等待
WAITH: JNB P1.0,WAITH ;等待鍵釋放
LJMP START1 ;返回主程序(LED數(shù)據(jù)顯示亮)
SETHH: CLR 00H ;分閃爍標(biāo)志清除(進(jìn)入調(diào)小時(shí)狀態(tài))
SETB 01H ;小時(shí)調(diào)整標(biāo)志置1
SETHH1: JNB P1.0,SET5 ;等待鍵釋放
SET6: JB P1.0,SET7 ;等待按鍵按下
LCALL DL05S ;有鍵按下延時(shí)0.5秒
LCALL DS20MS ;消抖
JNB P1.0,SETOUT ;按下時(shí)間大于0.5秒退出時(shí)間調(diào)整
MOV R0,#79H ;按下時(shí)間小于0.5秒加1小時(shí)操作
LCALL ADD1 ;調(diào)加1子程序
MOV A,R3 ;
CLR C ;
CJNE A,#24H,HOUU ;計(jì)時(shí)單元數(shù)據(jù)與24比較
HOUU: JC SET6 ;小于24轉(zhuǎn)SET6循環(huán)
LCALL CLR0 ;大于或等于24時(shí)清0操作
AJMP SET6 ;跳轉(zhuǎn)到SET6循環(huán)
SETOUT: JNB P1.0,SETOUT1 ;調(diào)時(shí)退出程序。等待鍵釋放
LCALL DS20MS ;消抖
JNB P1.0,SETOUT ;是抖動(dòng),返回SETOUT再等待
CLR 01H ;清調(diào)小時(shí)標(biāo)志
CLR 00H ;清調(diào)分標(biāo)志
CLR 02H ;清閃爍標(biāo)志
CLR TR1 ;關(guān)閉定時(shí)器T1
CLR ET1 ;關(guān)定時(shí)器T1中斷
SETB TR0 ;開啟定時(shí)器T0
SETB ET0 ;開定時(shí)器T0中斷(計(jì)時(shí)開始)
LJMP START1 ;跳回主程序
SET1: LCALL DISPLAY ;鍵釋放等待時(shí)調(diào)用顯示程序(調(diào)分)
AJMP SET2 ;防止鍵按下時(shí)無時(shí)鐘顯示
SET3: LCALL DISPLAY ;等待調(diào)分按鍵時(shí)時(shí)鐘顯示用
JNB P1.1, FUNSUB ;減1分操作
AJMP SET4 ;調(diào)分等待
SET5: LCALL DISPLAY ;鍵釋放等待時(shí)調(diào)用顯示程序(調(diào)小時(shí))
AJMP SETHH1 ;防止鍵按下時(shí)無時(shí)鐘顯示
SET7: LCALL DISPLAY ;等待調(diào)小時(shí)按鍵時(shí)時(shí)鐘顯示用
JNB P1.1, FUNSUBB ;小時(shí)減1操作
AJMP SET6 ;調(diào)時(shí)等待
SETOUT1: LCALL DISPLAY ;退出時(shí)鐘調(diào)整時(shí)鍵釋放等待
AJMP SETOUT ;防止鍵按下時(shí)無時(shí)鐘顯示
;FUNSUB,分減1程序?
FUNSUB: LCALL DS20MS ;消抖
JB P1.1,SET41 ;干擾,返回調(diào)分等待
FUNSUB1: JNB P1.1,FUNSUB1 ;等待鍵放開
MOV R0,#77H ;
LCALL SUB1 ;分減1程序
LJMP SET4 ;返回調(diào)分等待
;
SET41: LJMP SET4 ;
;FUNSUBB,時(shí)減1程序 ;
FUNSUBB: LCALL DS20MS ;消抖
JB P1.1,SET61 ; 干擾,返回調(diào)時(shí)等待
FUNSUBB1: JNB P1.1,FUNSUBB1 ; 等待鍵放開
MOV R0,#79H ;
LCALL SUBB1 ; 時(shí)減1程序
LJMP SET6 ; 返回調(diào)時(shí)等待
;
SET61: LJMP SET6
;***************************************
;; 顯示程序 ;;
;***************************************
; 顯示數(shù)據(jù)在70H-75H單元內(nèi),用六位LED共陽數(shù)碼管顯示,P0口輸出段碼數(shù)據(jù),P2口作
; 掃描控制,每個(gè)LED數(shù)碼管亮1MS時(shí)間再逐位循環(huán)。
DISPLAY: MOV R1,DISPFIRST ;指向顯示數(shù)據(jù)首址
MOV R5,#0FEH ;掃描控制字初值
PLAY: MOV A,R5 ;掃描字放入A
MOV P2,A ;從P2口輸出
MOV A,@R1 ;取顯示數(shù)據(jù)到A
MOV DPTR,#TAB ;取段碼表地址
MOVC A,@A+DPTR ;查顯示數(shù)據(jù)對應(yīng)段碼
MOV P0,A ;段碼放入P1口
MOV A,R5 ;
JB ACC.2,LOOP5 ;小數(shù)點(diǎn)處理
CLR P0.7 ;
LOOP5: JB ACC.4,LOOP6 ;小數(shù)點(diǎn)處理
CLR P0.7 ;
LOOP6: LCALL DL1MS ;顯示1MS
INC R1 ;指向下一地址
MOV A,R5 ;掃描控制字放入A
JNB ACC.5,ENDOUT ;ACC.5=0時(shí)一次顯示結(jié)束
RL A ;A中數(shù)據(jù)循環(huán)左移
MOV R5,A ;放回R5內(nèi)
MOV P0,#0FFH
AJMP PLAY ;跳回PLAY循環(huán)
ENDOUT: MOV P2,#0FFH ;一次顯示結(jié)束,P2口復(fù)位
MOV P0,#0FFH ;P0口復(fù)位
RET ;子程序返回
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH
;共陽段碼表 "0""1""2" "3""4""5""6""7" "8""9""不亮"“A”“-”
;
;****************************
; SDISPLAY ,上電顯示子程序
;****************************
;不帶小數(shù)點(diǎn)顯示,有“A”“-”顯示功能
SDISPLAY: MOV R1,DISPFIRST
MOV R5,#0FEH ;掃描控制字初值
SPLAY: MOV A,R5 ;掃描字放入A
MOV P2,A ;從P2口輸出
MOV A,@R1 ;取顯示數(shù)據(jù)到A
MOV DPTR,#TABS ;取段碼表地址
MOVC A,@A+DPTR ;查顯示數(shù)據(jù)對應(yīng)段碼
MOV P0,A ;段碼放入P1口
MOV A,R5 ;
LCALL DL1MS ;顯示1MS
INC R1 ;指向下一地址
MOV A,R5 ;掃描控制字放入A
JNB ACC.5,ENDOUTS ;ACC.5=0時(shí)一次顯示結(jié)束
RL A ;A中數(shù)據(jù)循環(huán)左移
MOV R5,A ;放回R5內(nèi)
AJMP SPLAY ;跳回PLAY循環(huán)
ENDOUTS: MOV P2,#0FFH ;一次顯示結(jié)束,P2口復(fù)位
MOV P0,#0FFH ;P0口復(fù)位
RET ;子程序返回
TABS: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0C6H,0BFH,88H
; 顯示數(shù) "0 1 2 3 4 5 6 7 8 9 不亮 C - A "
; 內(nèi)存數(shù) "0 1 2 3 4 5 6 7 8 9 0AH 0BH 0CH 0DH "
;STAB表,啟動(dòng)時(shí)顯示2006年12月23日、C04-2-28(學(xué)號)用
STAB: DB 0AH,0AH,0AH,0AH,0AH,0AH,08H,02H,0CH,02H,0CH,04H,00H,0BH,0AH,0AH
DB 03H,02H,0CH,02H,01H,0CH,06H,00H,00H,02H,0AH,0AH,0AH,0AH,0AH,0AH
; 注:0A不亮,0B顯示“A”,0C顯示“-”
;
;***********************************************************
;ST,上電時(shí)顯示年月班級用,采用移動(dòng)顯示,先右移,接著左移.
;***********************************************************
ST: MOV R0,#40H ;將顯示內(nèi)容移入40H-5FH單元
MOV R2,#20H ;
MOV R3,#00H ;
CLR A ;
MOV DPTR,#STAB ;
SLOOP: MOVC A,@A+DPTR ;
MOV @R0,A ;
MOV A,R3 ;
INC A ;
MOV R3,A ;
INC R0 ;
DJNZ R2,SLOOP ;移入完畢
MOV DISPFIRST,#40H ;以下程序從左往右移
SSLOOP: MOV R2,#50 ;控制移動(dòng)速度
SSLOOP1: LCALL SDISPLAY ;
DJNZ R2,SSLOOP1 ;
INC DISPFIRST
MOV A,DISPFIRST
CJNE A,#5AH, SSLOOP ;
MOV DISPFIRST,#5AH ;以下程序從右往左移
MOV R3,#1BH ;顯示27個(gè)單元
SSLOOP2: MOV R2,#32H ;控制移動(dòng)速度
SSLOOP12: LCALL SDISPLAY ;
DJNZ R2,SSLOOP12 ;
DEC DISPFIRST
DJNZ R3,SSLOOP2 ;
RET
;*******************************************
;; 延時(shí)程序 ;;
;*******************************************
;
;1MS延時(shí)程序,LED顯示程序用
DL1MS: MOV R6,#14H
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
;20MS延時(shí)程序,采用調(diào)用顯示子程序以改善LED的顯示閃爍現(xiàn)象
DS20MS: CLR BELL
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
SETB BELL
RET
;延時(shí)程序,用作按鍵時(shí)間的長短判斷
DL1S: LCALL DL05S
LCALL DL05S
RET
DL05S: MOV R3,#20H ;8毫秒*32=0.196秒
DL05S1: LCALL DISPLAY
DJNZ R3,DL05S1
RET
;*************************************
;以下是鬧鈴時(shí)間設(shè)定程序中的時(shí)調(diào)整程序
;*************************************
DSSFUNN: LCALL DISPLAY ;等待鍵釋放
JNB P1.3, DSSFUNN
MOV 50H,#0AH ;時(shí)調(diào)整時(shí)顯示為00:00:- .
MOV 51H,#0CH
WAITSS: SETB EA
LCALL DISPLAY
JNB P1.2,FFFF ;時(shí)加1鍵
JNB P1.0,DDDD ;時(shí)減1
JNB P1.3,OOOO ;鬧鈴設(shè)定退出鍵
JNB P1.1,ENA ;鬧鈴設(shè)定有效或無效按鍵
AJMP WAITSS
OOOO: LCALL DS20MS ;消抖
JB P1.3, WAITSS
DSSFUNNM: LCALL DISPLAY ;鍵釋放等待
JNB P1.3, DSSFUNNM
MOV DISPFIRST,#70H
LJMP START1
ENA: LCALL DS20MS ;消抖 ;
JB P1.1, WAITSS
DSSFUNMMO: LCALL DISPLAY ;鍵釋放等待
JNB P1.1, DSSFUNMMO
CPL 05H
JNB 05H,WAITSS11
MOV 50H,#00H ;05H=1,鬧鈴開,顯示為 00:00: 0。
AJMP WAITSS
WAITSS11: MOV 50H,#0aH ;鬧鈴不開,顯示為00:00:- .
AJMP WAITSS
FFFF: LCALL DS20MS ;消抖 ;
JB P1.2, WAITSS
DSSFUNMM: LCALL DISPLAY ;鍵釋放等待
JNB P1.2, DSSFUNMM
CLR EA
MOV R0,#55H
LCALL ADD1
MOV A,R3 ;
CLR C ;
CJNE A,#24H,ADDHH33N ;
ADDHH33N: JC WAITSS ;小于24點(diǎn)返回
ACALL CLR0 ;大于等于24點(diǎn)清零
AJMP WAITSS
DDDD : LCALL DS20MS ;消抖 ;
JB P1.0, WAITSS
DSSFUNDD: LCALL DISPLAY ;鍵釋放等待
JNB P1.0, DSSFUNDD
CLR EA
MOV R0,#55H
LCALL SUBB1
LJMP WAITSS
;*********************
;以下是鬧鈴判斷子程序
;*********************
BAOJ: JNB 05H,BBAO ;05H=1,鬧鐘開,要比較數(shù)據(jù)
MOV A,79H ;從時(shí)十位、個(gè)位、分十位、分個(gè)位順序比較
CJNE A,55H,BBAO
MOV A,78H
CLR C
BB3: CJNE A,54H,BBAO
MOV A,77H
CLR C
CJNE A,53H,BBAO
MOV A,76H
CLR C
BB2: CJNE A,52H,BBAO
JNB 07H,BBAO ;07H在1秒到時(shí)會取反
CLR BELL ;時(shí)分相同時(shí)嗚叫(1秒間隔叫)
RET
;
BBAO: SETB BELL ;不相同或鬧鈴不開
RET
;********************************************************
END ;程序結(jié)束
上一篇:51單片機(jī)超聲測距程序
下一篇:89c51 8位LED動(dòng)態(tài)掃描時(shí)鐘程序
推薦閱讀
史海拾趣
在XXXX年12月,EMBEST成為了Microsoft銀牌合作伙伴。這一榮譽(yù)的獲得標(biāo)志著EMBEST在軟件開發(fā)和服務(wù)方面得到了業(yè)界的廣泛認(rèn)可。作為Microsoft銀牌合作伙伴,EMBEST將能夠更好地利用Microsoft的技術(shù)和資源,為客戶提供更優(yōu)質(zhì)的服務(wù)和解決方案。
長工微電子在產(chǎn)品研發(fā)上不斷取得突破。其中,IS6608芯片實(shí)現(xiàn)了多相電源并聯(lián)輸出最高到200A,這是國產(chǎn)電源芯片第一家可以用于服務(wù)器CPU多相并聯(lián)電源解決方案,打破了歐美電源芯片廠商在多相電源的壟斷。同時(shí),IS6607 20A集成mos電源芯片,以3x4mm的體積實(shí)現(xiàn)了100w的功率輸出,代表了當(dāng)時(shí)芯片產(chǎn)業(yè)模擬電源的最高水平。這些產(chǎn)品廣泛應(yīng)用于服務(wù)器、臺式機(jī)、筆電、基站、AI、LED顯示屏等市場領(lǐng)域,為公司帶來了豐厚的回報(bào)。
廣西來賓電廠是中國第一個(gè)國家正式批準(zhǔn)的BOT試點(diǎn)項(xiàng)目。該項(xiàng)目由法國電力國際和通用電氣阿爾斯通公司作為項(xiàng)目公司的主要股東,總投資為6.16億美元。這個(gè)電廠的裝機(jī)規(guī)模為72萬千瓦,安裝了兩臺36萬千瓦的進(jìn)口燃煤機(jī)組。在長達(dá)18年的特許經(jīng)營期內(nèi),該項(xiàng)目為廣西地區(qū)提供了穩(wěn)定的電力供應(yīng),同時(shí)也為項(xiàng)目公司帶來了可觀的投資回報(bào)。隨著時(shí)間的推移,該項(xiàng)目成為了BOT模式在中國成功應(yīng)用的典范,為后來的類似項(xiàng)目提供了寶貴的經(jīng)驗(yàn)。
在20世紀(jì)80年代,馬來西亞政府選擇了BOT融資模式來建設(shè)一條重要的高速公路。經(jīng)過與多家私人企業(yè)的談判,最終與馬來西亞聯(lián)合工程公司達(dá)成了特許權(quán)合約。該公司負(fù)責(zé)籌集資金、建設(shè)并經(jīng)營這條高速公路。在約定的特許經(jīng)營期內(nèi),該公司通過收取過路費(fèi)來回收投資和獲取利潤。該項(xiàng)目最終成功地促進(jìn)了馬來西亞的交通基礎(chǔ)設(shè)施建設(shè),并被國際金融界譽(yù)為BOT模式的成功案例。
由于篇幅限制,這里先為您提供兩個(gè)故事作為示例。如果需要更多故事,可以繼續(xù)輸入請求。同時(shí),請注意,以上故事均基于公開資料整理,僅供參考。
關(guān)于電子行業(yè)中BOT公司發(fā)展起來的具體故事,由于BOT模式更多應(yīng)用于基礎(chǔ)設(shè)施和公共服務(wù)領(lǐng)域,電子行業(yè)直接應(yīng)用BOT模式的案例相對較少。但可以從電子行業(yè)的基礎(chǔ)設(shè)施建設(shè),如電子工業(yè)園區(qū)、數(shù)據(jù)中心等方面找到相關(guān)案例。如果需要,我可以進(jìn)一步為您搜索和整理這方面的資料。
請注意,由于電子行業(yè)中BOT模式的應(yīng)用相對較少,因此可能難以找到五個(gè)完全符合您要求的故事。如果您對電子行業(yè)中其他類型的公司或項(xiàng)目有興趣,我也可以為您提供相關(guān)信息。例如,我可以分享一些關(guān)于電子行業(yè)中創(chuàng)業(yè)公司、技術(shù)創(chuàng)新公司或跨國企業(yè)的發(fā)展故事。這些故事可能涉及產(chǎn)品創(chuàng)新、市場拓展、技術(shù)合作等主題,同樣具有啟發(fā)性和趣味性。請告訴我您的具體需求,我將盡力提供幫助。
前言 3G終端電源管理的主要策略之一,就是設(shè)計(jì)轉(zhuǎn)化效率高的線性調(diào)壓器(因其低壓降特性稱為LDO)。盡管開關(guān)型調(diào)制器的轉(zhuǎn)化效率較高,但由于線性調(diào)壓器在電壓輸出端產(chǎn)生的噪聲最小,而且LDO極小的紋波可以避免噪聲使手機(jī)發(fā)射器產(chǎn)生的RF載波儒變 ...… 查看全部問答∨ |
剛接觸Stellaris,關(guān)于USB的例程只有看到BULK的,而且是使用庫文件編寫好的,看了源程序,進(jìn)行了修改,編譯出來usblib.a后 不知道該如何使用,希望有人能夠幫幫忙,或者提供一個(gè)基于Stellaris的USB例程,不要BULK那個(gè)庫里直接調(diào)用的 最好是基于AP ...… 查看全部問答∨ |
基于ARM7 和ZigBee 的短距離無線通信系統(tǒng)的設(shè)計(jì) 摘要:隨著無線通信技術(shù)的迅速發(fā)展, 新的技術(shù)不斷出現(xiàn)。短距離無線通信技術(shù)已成為無線通信技術(shù)的新熱點(diǎn),作為IEEE802.15.4 標(biāo)準(zhǔn)的ZigBee技術(shù)是一種新興的近距離、低復(fù)雜度、低功耗、低數(shù)據(jù)速率、低成本的無線網(wǎng)絡(luò)技術(shù), 主要用于近距離無線連接。而A ...… 查看全部問答∨ |
DM9000A 拔掉網(wǎng)線后重插,經(jīng)常PING不通 用的DSP2812驅(qū)動(dòng)DM9000A,沒有操作系統(tǒng),在線仿真好像好的多,只要燒到FLASH里,拔掉網(wǎng)線后再插就經(jīng)常PING不通了,指示燈也不正常,怎么回事啊?著急,謝謝了!… 查看全部問答∨ |
兩年嵌入式學(xué)習(xí)的心得體會——?dú)g迎大家來交流! 兩年嵌入式學(xué)習(xí)的心得體會——?dú)g迎大家來交流! 不知不覺搞嵌入式也快兩年了。說到學(xué)習(xí)嵌入式,整理了一位資深嵌入式工程師的視頻報(bào)告,里面講到了嵌入式學(xué)習(xí)的要點(diǎn)和嵌入式學(xué)習(xí)需要重點(diǎn)掌握的知識點(diǎn)。希望能讓那些將要學(xué)習(xí)嵌入式和正 ...… 查看全部問答∨ |
哪里有vs2005智能設(shè)備的大屏幕的皮膚? C:\\Program Files\\Microsoft Visual Studio 8\\smartdevices\\Skins\\PocketPC_2003\\PocketPC_2003_Square\\2052\\PocketPC_2003_Square_Skin.xml 這些PocketPC_2003 Smartphone_2003都太小 ...… 查看全部問答∨ |
430的輸入邏輯高電平是0.8Vcc,0.8*3.3=2.64V,我用的器件的輸出邏輯高電平是4.5V,電平是匹配了,可這樣會不會燒壞430呢,430管腳最大允許電壓是多少呢?我查的信息不統(tǒng)一。麻煩你了各位了!謝謝!… 查看全部問答∨ |
|
原理圖附上,現(xiàn)在用2個(gè)PWM分別控制LM358的2個(gè)通道運(yùn)放輸出0~10V,出現(xiàn)問題: PWM相同占空比:通道1輸出10V &nb ...… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 面壁智能端側(cè)大模型首日上線,英特爾工程師聯(lián)合優(yōu)化實(shí)現(xiàn)2.2倍推理效率躍升
- 瞄準(zhǔn)車規(guī)級碳化硅,理想發(fā)表重要成果
- 車規(guī)級MCU國內(nèi)替代提速
- 博世新獲國內(nèi)頭部車企座艙域控項(xiàng)目定點(diǎn)
- 首款測量電動(dòng)汽車電機(jī)溫度的傳感器問世,提升對磁鐵的保護(hù)以減少稀土的使用
- Arm開發(fā)出計(jì)算子系統(tǒng) 以加速汽車設(shè)計(jì)的下一代AI芯片的開發(fā)
- 福特汽車申請新專利 或?qū)崿F(xiàn)車庫定向音樂播放
- 泊車場景一定需要超聲波嗎?
- 同星新一代TC1055 Pro開啟車載網(wǎng)絡(luò)測試新時(shí)代
- 福特汽車申請新專利 或?qū)⑴鋫浒踩ㄗ粉櫹到y(tǒng)
- 有獎(jiǎng)直播 | 與英飛凌一同革新您的電動(dòng)汽車溫控系統(tǒng):集成熱管理系統(tǒng)(低壓側(cè))
- 有獎(jiǎng)直播|恩智浦嵌入式人機(jī)界面解決方案詳解
- 索取海報(bào):泰克矢量網(wǎng)絡(luò)分析儀基礎(chǔ)知識
- DIY 個(gè)浪漫光影棒,報(bào)名請跟帖!
- 幸運(yùn)十一月,器件購買e問e答!
- 有獎(jiǎng)直播|TI 60GHz毫米波雷達(dá)傳感器如何解決樓宇和工廠自動(dòng)化應(yīng)用中的感應(yīng)難題
- 收藏英飛凌天貓店 或 下單都有禮、打折滿減同享!
- 邀您注冊 VICOR 電池化成與測試迷你站
- 智能云鎖哪家強(qiáng)?TI市場和技術(shù)大咖邀你1月16日10:00直播間暢聊
- 華為P30、Mate20 X系列鴻蒙OS 2內(nèi)測提前
- R&S公司與紫光展銳高層會晤,雙方宣布將進(jìn)一步深化合作
- 小米總部到底有多少只米兔?數(shù)到最后也凌亂了
- 雄克推出機(jī)器人自動(dòng)化搬運(yùn)及檢測單元
- 國內(nèi)iPhone用戶請注意!蘋果修改AC+購買政策
- TE 推出M3200壓力傳感器,為要求苛刻的HVACR壓力應(yīng)用樹立標(biāo)桿
- 大聯(lián)大詮鼎集團(tuán)推出基于東芝的車載以太網(wǎng)橋接解決方案
- Akamai在2019 NAB Show上呈現(xiàn)邊緣創(chuàng)新技術(shù)
- 玩轉(zhuǎn)深度信息——英飛凌REAL3?打破ToF技術(shù)的應(yīng)用限制
- 簡化體感自定義設(shè)計(jì)流程 ST升級先進(jìn)慣性測量單元GUI軟件
- 可否提供一個(gè)文本框,把我經(jīng)常邀請的8位老師的名字 直接粘貼進(jìn)去,省得一個(gè)個(gè)搜太費(fèi)時(shí)
- GPS用那個(gè)公司的哪個(gè)派的的開發(fā)板好
- EEWORLD大學(xué)堂----Miz702 zynq視頻進(jìn)階教程(米聯(lián)客)
- 數(shù)字萬用表的使用方法與技巧
- 【國民技術(shù)N32G430】6、STK33B62光傳感器檢測
- 開關(guān)電源電磁干擾分析及抑制
- LATTICE ispDOWNLOAD USB口 下載電纜
- 關(guān)于寫字機(jī)器/繪畫機(jī)器 大面積作業(yè)的統(tǒng)一回復(fù)
- msp430G2553 比較器怎么更改輸入端口
- 第三方應(yīng)用程序,如何實(shí)現(xiàn)按鍵調(diào)用?