/*************************************************************************************
* 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)
|