單片機用的是AT89S51 所有IO口全用上了 P1.2作為按鍵減 程序不管怎么修改都不能正常按順序減 我也不改了就這么用了 我做的實物上把它作為星期顯示用了 然后溫度能顯示四位數(含零下) 上傳的程序里星期用的是P1.4
溫度用的是P1.5 P1.6 P1.7 只顯示三位 想要四位就在程序里改吧
設置順序是 年 月 日 星期 時 分 秒
設置時數碼管的小數點(兩位數時只個位數小數點亮)點亮以確認設置哪一位 連續按P1.0退出設置狀態并保存數據
在設置狀態時按P1.3退出設置狀態不保存設置數據 正常走時狀態按P1.3切換12小時制24小時制 通電默認12小時制
初次使用時可以按住P1.0在通電 把預置好的年月日星期時間寫入到1302內
我用的晶振每小時快1秒左右 24小時快23秒左右 程序里就加入了誤差修正 每小時減一秒 半夜12點不減秒
上傳的程序里每小時都減一秒 屏蔽了半夜12點不減秒
源程序網上找的 把LCD1602顯示變成了數碼管顯示 并加入了四位溫度顯示 經過修改后變成現在的樣子
制作出來的實物圖如下:
51hei截圖20200609202906.jpg (46.4 KB, 下載次數: 56)
下載附件
2020-6-9 20:29 上傳
51hei截圖20200601105735.jpg (202.33 KB, 下載次數: 53)
下載附件
2020-6-9 20:29 上傳
部分單片機程序
RST BIT P3.5; 5腳 ;1302串行口數據端 SU BIT P3.6; 6腳
CLK BIT P3.7; 7腳
MOSHI BIT P1.0; ;模式 退出并保存
JIA BIT P1.1; ;加
JIAN BIT P1.2; ;減 不能正常按順序減
ALARM BIT P1.3; 鬧鐘設置 改成退出不保存
DQ BIT P3.0; 18b20
TEMPL DATA 26H
TEMPH DATA 27H
TEMPHC DATA 2AH
TEMPLC DATA 2BH
TEMP_ZH DATA 2CH
;==========================================================================================
NIAN EQU 7FH ; 年
YUE EQU 7DH ; 月
DAY EQU 7CH ; 日
WEEK EQU 29H ; 周
HHH EQU 7EH ;
SHI EQU 7BH ; 時
FEN EQU 7AH ; 分
MIAO EQU 79H ; 秒
SHIHC EQU 74H;
;==========================================================================================
;==========================================================================================
AMPMBZ EQU 2DH;
WCS EQU 2EH;
WCF EQU 2FH;
WCM EQU 30H;
SHIA EQU 3AH;
SHIB EQU 3BH;
FENA EQU 3CH;
FENB EQU 3DH;
MIAOA EQU 3EH;
MIAOB EQU 3FH;
GEW EQU 75H
SHIBZ EQU 20H.0
FENBZ EQU 20H.1
MIAOBZ EQU 20H.2
NIANBZ EQU 20H.3;
YUEBZ EQU 20H.4;
RIBZ EQU 20H.5;
ZHOUBZ EQU 20H.6;
FLAG EQU 6EH ;溫度標志位
SETB SHIBZ
SETB FENBZ
SETB MIAOBZ
SETB NIANBZ
SETB YUEBZ
SETB RIBZ
SETB ZHOUBZ
SETB AMPMBZ;
;==========================================================================================
DS1302_ADDR EQU 6DH
DS1302_DATA EQU 6CH
;==================================================================================
; ORG 0000H
; LJMP START
; ORG 0030H
;***************************************************************
; 初始化開機時間 &&&&&&& 初始化鬧鈴時間
;***************************************************************
START:
MOV HHH,#00H
MOV WCS,#00H;
MOV WCF,#00H;
MOV WCM,#01H; 每小時誤差幾秒改成幾 誤差判斷時到整點秒歸零
JNB MOSHI,YZ;初次使用時按住MOSHI 把預置的時間寫入DS1302;
LJMP LCDCSH;
;===============================================================
YZ:
MOV NIAN,#20H
MOV YUE,#06H
MOV DAY,#01H
MOV WEEK,#1H;
MOV SHI,#07H
MOV FEN,#59H
MOV MIAO,#55H
LCALL WR_DS1302 ;寫1302子程序
;***************************************************************
; 初始化LCD1602 &&&&&&& 初始化DS1302
;***************************************************************
LCDCSH:
lcall RD_DS1302 ; 讀時間日期
LCALL WCCS; 時間誤差初始化
;***************************************************************
; 主函數(這個大家都懂的)
;***************************************************************
MAIN:
lcall RD_DS1302 ; 讀時間日期
LCALL WCXZ; 誤差修正
LCALL SJ_DIP_2;顯示時間動態數據; 顯示時間日期
lcall key ; 時間設定
JNB ALARM,AMPM; 12小時24小時切換
LCALL RE_TEMP ; 讀溫度
LCALL CONVER ; 處理溫度
LCALL DISPBCD ; BCD 碼溫度值
LCALL DISPLAY_INT ; 顯示溫度
LJMP MAIN
全部資料51hei下載地址:
DS1302數碼管電子鐘.rar
(68.47 KB, 下載次數: 76)
2020-6-9 20:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|