導航:首頁 > 操作系統 > 單片機的電子時鍾

單片機的電子時鍾

發布時間:2022-07-14 16:45:40

A. 單片機電子時鍾工作原理

利用計數器,每溢出一次加1,60秒分鍾內存加1,同時數碼管同歩顯示。

B. 單片機實現電子時鍾

ORG 0000H ;程序執行開始地址
LJMP START ;跳到標號START執行
ORG 0003H ;外中斷0中斷程序入口
LJMP OUTINTT0 ;外中斷0中斷返回
ORG 000BH ;定時器T0中斷程序入口
LJMP INTT0 ;跳至INTTO執行
ORG 0013H ;外中斷1中斷程序入口
RETI;外中斷1中斷返回
ORG 001BH ;定時器T1中斷程序入口
LJMP INTT1 ;跳至INTT1執行;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 主 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
START:
MOV R0,#70H ;清70H-7AH共11個內存單元
MOV R7,#0BH ;
CLEARDISP:
MOV @R0,#00H ;
INC R0 ;
DJNZ R7,CLEARDISP ;
MOV 70H,#07H;
MOV 71H,#05H;
MOV 76H,#09H;
MOV 77H,#05H;
MOV 78H,#05H;
MOV 79H,#00H;
MOV 20H,#00H ;清20H(標志用)
MOV 7AH,#0AH ;放入"熄滅符"數據
MOV 7BH,#00H ;清報時寄存器
MOV TMOD,#11H ;設T0、T1為16位定時器
MOV TL0,#0B0H ;50MS定時初值(T0計時用)
MOV TH0,#3CH ;50MS定時初值
MOV TL1,#0B0H ;50MS定時初值(T1閃爍定時用)
MOV TH1,#3CH ;50MS定時初值
SETB PT1;定時器T1為高優先順序
SETB EA ;總中斷開放
SETB ET0 ;允許T0中斷
SETB TR0 ;開啟T0定時器
SETB EX0 ;開啟外部中斷0
MOV R4,#14H ;1秒定時用初值(50MS×20)
MOV R2,#06H ;0.3秒的閃動初值(50MS*6)
START1:
LCALL DISPLAY;調用顯示子程序
LCALL BELL;
LCALL DISCLOSE;

SJMP START1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 計時程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T0中斷服務程序
INTT0:
PUSH ACC ;累加器入棧保護
PUSH PSW ;狀態字入棧保護
CLR ET0 ;關T0中斷允許
CLR TR0 ;關閉定時器T0
MOV TL0,#0B0H ;重裝初值(低8位修正值)
MOV TH0,#3CH ;重裝初值(高8位修正值)
SETB TR0 ;開啟定時器T0
DJNZ R4, OUTT0 ;20次中斷未到中斷退出
ADDSS:
MOV R4,#14H ;20次中斷到(1秒)重賦初值
MOV R0,#71H ;指向秒計時單元(70H-71H)
ACALL DBchange ;調用數據處理程序(加1並存入顯示單元)
MOV A,R3 ;秒數據放入A(R3為2位十進制數組合)
CLR C ;清進位標志
CJNE A,#60H,ADDMM ;
ADDMM:
JC OUTT0 ;小於60秒時中斷退出
LCALL CLR0 ;大於或等於60秒時對秒計時單元清0
MOV R0,#77H ;指向分計時單元(76H-77H)
ACALL DBchange ;
MOV A,R3 ;分數據放入A
CLR C ;清進位標志
CJNE A,#60H,ADDHH ;
ADDHH:
JC OUTT0 ;小於60分時中斷退出
ACALL CLR0 ;大於或等於60分時分計時單元清0
MOV R0,#79H ;指向小時計時單元(78H-79H)
ACALL DBchange ;
MOV A,R3 ;時數據放入A
CLR C ;清進位標志
MOV 7BH,#01H
CJNE A,#24H,HOUR ;
HOUR:
JC OUTT0 ;小於24小時中斷退出
ACALL CLR0 ;大於或等於24小時小時計時單元清0
OUTT0:
MOV 72H,76H ;中斷退出時將分、時計時單元數據移
MOV 73H,77H ;入對應顯示單元
MOV 74H,78H ;
MOV 75H,79H ;
POP PSW ;恢復狀態字(出棧)
POP ACC ;恢復累加器
SETB ET0 ;開放T0中斷
RETI ;中斷返回;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 閃動調時 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T1中斷服務程序,用作時間調整時調整單元閃爍指示
INTT1:
PUSH ACC ;中斷現場保護
PUSH PSW ;
MOV TL1, #0B0H ;裝定時器T1定時初值
MOV TH1, #3CH ;
DJNZ R2,INTT1OUT ;0.3秒未到退出中斷(50MS中斷6次)
MOV R2,#06H ;重裝0.3秒定時用初值
CPL 02H ;0.3秒定時到對閃爍標志取反
JB 02H,FLASH1 ;02H位為1時顯示單元"熄滅"
MOV 72H,76H ;02H位為0時正常顯示
MOV 73H,77H ;
MOV 74H,78H ;
MOV 75H,79H ;
INTT1OUT:
POP PSW ;恢復現場
POP ACC ;
RETI ;中斷退出
FLASH1:
JB 01H,FLASH2 ;01H位為1時,轉小時熄滅控制
MOV 72H,7AH ;01H位為0時,"熄滅符"數據放入分
MOV 73H,7AH ;顯示單元(72H-73H),將不顯示分數據
MOV 74H,78H ;
MOV 75H,79H ;
AJMP INTT1OUT ;轉中斷退出
FLASH2:
MOV 72H,76H ;01H位為1時,"熄滅符"數據放入小時
MOV 73H,77H ;顯示單元(74H-75H),小時數據將不顯示
MOV 74H,7AH ;
MOV 75H,7AH ;
AJMP INTT1OUT ;轉中斷退出
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 數據處理程序,把6個數碼管顯示內容存入相應的地址;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
DBchange:
MOV A,@R0 ;取當前計時單元數據到A
DEC R0 ;指向前一地址
SWAP A ;A中數據高四位與低四位交換
ORL A,@R0 ;前一地址中數據放入A中低四位
ADD A,#01H ;A加1操作
DA A ;十進制調整
MOV R3,A ;移入R3寄存器
ANL A,#0FH ;高四位變0
MOV @R0,A ;放回前一地址單元
MOV A,R3 ;取回R3中暫存數據
INC R0 ;指向當前地址單元
SWAP A ;A中數據高四位與低四位交換
ANL A,#0FH ;高四位變0
MOV @R0,A ;數據放入當削地址單元中
RET ;子程序返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 清零程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;對計時單元復零用
CLR0:
CLR A ;清累加器
MOV @R0,A ;清當前地址單元
DEC R0 ;指向前一地址
MOV @R0,A ;前一地址單元清0
RET ;子程序返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 時鍾調整中斷程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;當調時按鍵按下時進入此程序
OUTINTT0:
PUSH ACC;
PUSH PSW;
CLR ET0 ;關定時器T0中斷
CLR TR0 ;關閉定時器T0
CLR EX0 ;關閉外部中斷0
MOV R2,#06H ;進入調時狀態,賦閃爍定時初值
SETB ET1 ;允許T1中斷
SETB TR1 ;開啟定時器T1
SET2: JNB P1.0,SET1 ;P1.0口為0(鍵未釋放),等待
SETB 00H ;鍵釋放,分調整閃爍標志置1
SET4:
JB P1.0,SET3 ;p1.0沒有按下時進入分調整程序
LJMP SETHH ;p1.0按下轉調小時狀態
SET3:
LCALL DISPLAY ;等待調分按鍵時時鍾顯示用
JB P1.1,SET4;等待p1.1按下
LCALL DL1S; MOV R0,#77H;按下時加1分鍾操作
LCALL DBchange ;調用加1子程序
MOV A,R3 ;取調整單元數據
CLR C ;清進位標志
CJNE A,#60H,HHH ;調整單元數據與60比較
HHH:
JC SET4 ;調整單元數據小於60轉SET4循環
LCALL CLR0 ;調整單元數據大於或等於60時清0
CLR C ;清進位標志
lJMP SET4 SETHH:
CLR 00H ;分閃爍標志清除(進入調小時狀態)
SETHH1:
JNB P1.0,SET5 ;等待鍵釋放
SETB 01H ;小時調整標志置1
SET6:
JNB P1.0,SETOUT ;P1.0再次按下時退出時間調整
LCALL DISPLAY;
JB P1.1,SET6;等待按鍵按下
LCALL DL1S;
MOV R0,#79H ;按下P1.1時加1小時操作
LCALL DBchange ;調加1子程序
MOV A,R3 ;
CLR C ;
CJNE A,#24H,HOUU ;計時單元數據與24比較
HOUU:
JC SET6;小於24轉SET6循環
LCALL CLR0 ;大於或等於24時清0操作
AJMP SET6;跳轉到SET6循環
SETOUT:
JNB P1.0,SETOUT1 ;調時退出程序。等待鍵釋放
LCALL DISPLAY ;延時削抖
JNB P1.0,SETOUT ;是抖動,返回SETOUT再等待
OUTRETEND:
CLR 01H ;清調小時標志
CLR 00H ;清調分標志
CLR 02H ;清閃爍標志
CLR TR1 ;關閉定時器T1
CLR ET1 ;關定時器T1中斷
SETB TR0 ;開啟定時器T0
SETB ET0 ;開定時器T0中斷(計時開始)
SETB EX0;開啟外部中斷0
POP PSW;
POP ACC;
RETI ;反回主程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SET1:
LCALL DISPLAY ;鍵釋放等待時調用顯示程序(調分)
LJMP SET2 ;防止鍵按下時無時鍾顯示
SET5:
LCALL DISPLAY ;鍵釋放等待時調用顯示程序(調小時)
LJMP SETHH1 ;防止鍵按下時無時鍾顯示
SETOUT1:
LCALL DISPLAY ;退出時鍾調整時鍵釋放等待
LJMP SETOUT ;防止鍵按下時無時鍾顯示
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 顯示程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 顯示數據在70H-75H單元內,用六位LED共陽數碼管顯示,P0口輸出段碼數據,P2口作
; 掃描控制,每個LED數碼管亮1MS時間再逐位循環。
DISPLAY:
MOV R1,#70H ;指向顯示數據首址
MOV R5,#01H ;掃描控制字初值
PLAY:
MOV A,R5 ;掃描字放入A
MOV P2,A ;從P2口輸出
MOV A,@R1 ;取顯示數據到A
MOV DPTR,#TAB ;取段碼表地址
MOVC A,@A+DPTR ;查顯示數據對應段碼
MOV P0,A ;段碼放入P0口
LCALL DL1MS ;顯示1MS
INC R1 ;指向下一地址
MOV A,R5 ;掃描控制字放入A
JB ACC.5,ENDOUT ;ACC.5=1時一次顯示結束
RL A ;A中數據循環左移
MOV R5,A ;放回R5內
LJMP PLAY ;跳回PLAY循環
ENDOUT:
MOV P0,#00H ;P0口復位
RET ;子程序返回
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H
;共陰段碼表 "0""1""2" "3""4""5""6""7" "8""9""不亮"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;整點報時;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BELL:
MOV A,7BH;
CLR C;
MOV 7BH,#00H ;
CJNE A,#01H,BELLEND MOV A,79H;
SWAP A;
ORL A,78H;
MOV 7CH ,ABELLRING:
CLR P1.7;
LCALL DL05S;
SETB P1.7;
LCALL DL05S;
DJNZ 7CH,BELLRING; MOV A ,#00H;
MOV 7BH,#00H ;BELLEND:RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;省電模式
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISCLOSE:
JB P1.3,OUTDISCLOSE;
CLOSE1: MOV P2,#0FFH;
JNB P1.3,CLOSE1;
JB P1.3,CLOSE1;
CLOSE2: JNB P1.3,CLOSE2;
MOV P2,R5;
OUTDISCLOSE:RET;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 延時程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;1MS延時程序,LED顯示程序用
DL1MS: MOV R6,#14H
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
;20MS延時程序,採用調用顯示子程序以改善LED的顯示閃爍現象
DS20MS: ACALL DISPLAY
ACALL DISPLAY
ACALL DISPLAY
RET
;延時程序,用作按鍵時間的長短判斷
DL1S: LCALL DL05S
LCALL DL05S
RET
DL05S: MOV R3,#20H ;8毫秒*32=0.196秒
DL05S1: LCALL DISPLAY
DJNZ R3,DL05S1
RET
END ;程序結束 但是做這個是自己做的,是可以調時間,不要的話可以把那個部分刪除。

C. 51單片機電子時鍾

才1毛錢

D. 如何做一個單片機電子時鍾

這個很簡單啊,兩種思路:1,用單片機定時器來做,優點是外圍電路簡單,只需要一個單片機最小系統,和一個顯示模塊(1602液晶比較好);缺點是:定時不是很准,跑的時間長了會有誤差,而且主要是程序,要寫很多,不過程序不是很難。2,用時鍾晶元,一般都用DS1302,還需要單片機最小系統和顯示模塊,優點是:定時准確,誤差很小,在有備用電池的情況下,即使單片機掉電,也可以維持很長時間,程序相對簡單。缺點是:外圍電路比前者相對復雜一點。如果想做個實際的東西拿來用,建議使用第二種方法,如果是想鍛煉自己的編程能力的話,選第一種吧。祝成功!

E. 基於單片機的電子時鍾與其它時鍾的比較具體說一下其它時鍾

不用單片機的話,可以是機械時鍾,也可以是電子時鍾。機械時鍾成本高,且需要上發條或通過振動等提供能量,電子時鍾不採用單片機可採用專用晶元,專用晶元成本最低,功能齊全。也可採用數字集成電路。數字集成電路可以是GAL、PAL、CPLD、FPGA等等,當然,也可採用集成度低的74系列或CD系列集成電路,電路較復雜。
如果是專用的電子時鍾,建議採用專用晶元。
如果是附加功能,採用單片機靈活性較大,成本較低。
如果是基於學習,那當然取決於你想學什麼?

F. 單片機電子時鍾怎麼調星期

按鍵控制電路中共有4個按鍵,按鍵1的功能是進行日期,時間的設置。
按下1次,進入「秒」設置;按下2次,進入「分」設置;按下3次,進入「時」設置;按下4次,進入「星期」設置;按下5次,進入「日」設計;按下6次;進入「月」設置;按下7次,進入「年」設置。按鍵2的功能是增加時間或日期。按鍵3的功能是減少時間或日期。按鍵4的功能是數碼管顯示的相應時間進行加或減。
系統上電首先初始化LCD1602和定時器,設置定時器模式、開啟定時器中斷,然後循環執行更新顯示時間,實時掃描按鍵狀態。當單片機上電以後,LCD上會立即顯示出2021. 12.12 SUN 7 21:42:00即2021年12月12號,周日,21 時 42 分 0 秒,通過與實時掃描單片機 IO 口相連接的按鍵的控制可以實現對時間以及模式的調整,以調整到正確的時間和模式。

G. c51單片機做電子時鍾

主程序如下:
void main(void )//主程序
{
TMOD=0x01;// 定時器1工作方式一
ET0=1;
EA=1;
TH0=(65536-50000)/256;//定時50ms
TL0=(65536-50000)%256;
TR0=1;//啟動定時器
while(1)
{
display();

}
}

//中斷子程序
void Timer0(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20){ a=0;sec++;}
if(sec==60){ sec=0;min++;}
if(min==60){ min=0;hour++;}
if(hour==24){ hour=0;}
}

H. 基於單片機的電子時鍾

首先,硬體的選取:
1,單片機,其控制系統不算復雜,使用簡單的8位機即可,然後就是時鍾的選擇,本設計基於其實時性要求不高,所以時鍾盡量選擇低一點,可以用3M、6M的時鍾,因為時鍾選擇越高其單片機的功耗就越大,甚至出現超頻現象(不過現在的單片機時鍾一般都能達到50M了)!
2,顯示部分,根據本常式的要求,可以選用6個8位數碼管進行顯示。
3,驅動電路,數碼管驅動晶元有很多,常見的有串列通信的如74LS164、74HC595、SM1617等常用LED串列驅動晶元。
4,時鍾晶元的選擇,單片機上面有定時器,但是實現長時間的定時必定不準確,誤差很大,還得經常對時,所以建議你選用一款時鍾晶元,常用的DS1302等。
5,用戶界面,你就用幾個按鍵實現用戶操作就行了。
軟體:首先顯示部分的變成,在網上有很多常式,你只需要簡單的移植就可以使用了,時鍾晶元DS1302典型的IIC匯流排驅動模式,你可以使用單片機中IIC外設來訪問,按鍵部分使用掃描和外部中斷都可!
自己動手豐衣足食,寫了這么多,希望對你有用,加油

I. 單片機電子時鍾編程

設計兩個按鍵,一個選定時鍾數字一個改變時鍾數字,選擇一個中斷定時掃描按鍵,通過讀入鍵值給DS1307初始化校時,再選擇一個中斷定時掃描DS1307可以讀出時,分,秒的BCD碼,將BCD碼解碼後點亮數碼管,數碼管的顯示可以通過對比當前時間與上一次掃描讀出時間確定時,分,秒哪位發生了改變,分別選通對應的數碼管,刷新顯示。

J. 用單片機做一個電子時鍾

這個很簡單啊,兩種思路:1,用單片機定時器來做,優點是外圍電路簡單,只需要一個單片機最小系統,和一個顯示模塊(1602液晶比較好);缺點是:定時不是很准,跑的時間長了會有誤差,而且主要是程序,要寫很多,不過程序不是很難。2,用時鍾晶元,一般都用ds1302,還需要單片機最小系統和顯示模塊,優點是:定時准確,誤差很小,在有備用電池的情況下,即使單片機掉電,也可以維持很長時間,程序相對簡單。缺點是:外圍電路比前者相對復雜一點。如果想做個實際的東西拿來用,建議使用第二種方法,如果是想鍛煉自己的編程能力的話,選第一種吧。祝成功!

閱讀全文

與單片機的電子時鍾相關的資料

熱點內容
樹莓派都用python不用c 瀏覽:755
access文件夾樹的構造 瀏覽:660
安卓多指操作怎麼設置 瀏覽:656
linux樹形目錄 瀏覽:727
平方根的簡單演算法 瀏覽:898
千牛訂單頁面信息加密取消 瀏覽:558
單片機自製紅外遙控燈 瀏覽:719
伺服器最小配置怎麼弄 瀏覽:853
ibm伺服器硬體如何升級 瀏覽:923
全球程序員節點贊 瀏覽:986
php函數傳遞數組 瀏覽:631
人工峰群演算法的目標函數 瀏覽:468
如何刪加密文檔 瀏覽:105
塗鴉app一鍵執行如何刪除 瀏覽:756
安卓手機如何打開fr3文件 瀏覽:743
壓縮袋8絲和14絲是什麼意思 瀏覽:647
程序員大咖java 瀏覽:70
蘋果手機文檔安卓上怎麼打開 瀏覽:527
如何做淘寶代理伺服器 瀏覽:672
gz壓縮文件夾 瀏覽:179