/*************************************************************************************
* ds1302實現時間的顯示和調整
* 步驟及現象:程序下載前,stc-isp選擇IRC頻率:12MHz,程序下載后,數碼管顯示時間為
* “ 12-00-00 ”,按按鍵0,這時數碼管顯示“ 2019.01.01 ”,并且LED8亮。按按鍵1,
* LED8滅,表示退出設置年月日功能。這時按2或3,進入時分秒界面。
* (1)若設置時分秒(按鍵1是位選,按鍵2是加,按鍵3是減),按按鍵1這時LED1燈亮
* (LED1燈亮表示進入設置時分秒狀態),這時代表小時的兩位數碼管1s閃爍一次,這時
* 按按鍵2一次加1,長按連續加。按按鍵3一次減1,長按連續減。分、秒操作、現象一樣。
* (2)若設置年月日(按鍵0是位選,按鍵2是加,按鍵3是減),按按鍵0這時LED8燈亮
* (LED8燈亮表示進入設置年月日狀態),這時代表年的前兩位的兩位數碼管1s閃爍一次
* 這時按按鍵2加1,長按連續加。按按鍵3一次減1,長按連續減。年的后兩位、月、日操作
* 和現象一樣。
*************************************************************************************/
#include <stc8.h>
#include "ds1302.h"
#include "key.h"
#include "HC595.H"
#include "TIM.h"
#include "showtime.h"
#include "settime.h"
char TIMED[7] = {0};
unsigned char num=0;
bit Flg = 0;
extern uchar code WRITE_RTC_ADDR[7];
void main()
{
unsigned char keys=16, bekey=16;
Ds1302Init();
Timer0Init();
while(1)
{
keys = key_scan();
if(16 != keys)
bekey = keys; // 最近一次按下的按鍵的鍵值
Ds1302ReadTime();
settime(keys); // 設置秒分時,日月年函數,keys的值決定是調整秒分時還是日月年。
ShowTime(bekey); // 工作狀態下,時間的顯示函數。
}
}
void TM0_Isr() interrupt 1 using 1
{
num++;
if(150 == num)
{
num = 0;
Flg = ~Flg; // 被選中的兩位數碼管,閃爍標志位
}
}
本人初學,僅供參考,存在錯誤和不足之處,請大家回帖多多指教,切勿照搬,文件下載:
ds1302數碼管時間顯示及調整.rar
(84.77 KB, 下載次數: 90)
2019-7-1 12:53 上傳
點擊文件名下載附件
|