//ds1302.h: /************ DS1302程序 ************ * 版本.........: 1.0 * 作者.........: 陈利栋 * 文件名.......: ds1302.h * 创建时间.....: 2010.11.11 * 最后修改.....: 2010.11.11 ************************************/ #ifndef __DS1302_H__ #define __DS1302_H__ #include "main.h" #include // 寄存器地址定义 #define DS1302_SECOND_ADDR 0x80 #define DS1302_MINUTE_ADDR 0x82 #define DS1302_HOUR_ADDR 0x84 #define DS1302_DATE_ADDR 0x86 #define DS1302_MONTH_ADDR 0x88 #define DS1302_DAY_ADDR 0x8a #define DS1302_YEAR_ADDR 0x8c #define DS1302_WRITE_PROTECT_ADDR 0x8e // 写保护 #define DS1302_TRICKLE_CHARGE_ADDR 0x90 // 涓流充电 #define DS1302_CLOCK_BURST_ADDR 0xbe // 连续读写 #if DS1302_AUTO_TO_DEC == 1 #define DEC_TO_BCD(d) DecToBcd(d) #define BCD_TO_DEC(b) BcdToDec(b) #else #define DEC_TO_BCD(d) d #define BCD_TO_DEC(b) b #endif /* DS1302_AUTO_TO_DEC == 1 */ typedef enum { _12_hours, _24_hours } HourMode_t; typedef enum { am, pm } AM_PM_t; // DS1302日期时间结构 typedef struct { unsigned char Year; // 年 0 - 99 unsigned char Month; // 月 1 - 12 unsigned char Date; // 日 1 - 31 unsigned char Hour; // 时 1 - 12 或 0 - 23 unsigned char Minute; // 分 0 - 59 unsigned char Second; // 秒 0 - 59 unsigned char Day; // 星期 1 - 7 星期天 = 7 HourMode_t HourMode; // 小时模式 _12_hours 或 _24_hours AM_PM_t AM_PM; // 上午下午标志 12时制时有效 am 或 pm } DS1302_DateTime_t; // 更新标记 1:已更新 0:未更新 // 调用 DS1302_GetDateTime 后自动清零 extern volatile unsigned char DS1302_Update; /* 存放日期和时间的变量 执行 DS1302_GetDateTime 后 时间日期写入到该变量 修改此值,并执行 DS1302_SetDateTime, 更新到DS1302 */ extern DS1302_DateTime_t DS1302_DateTime; // 初始化 void DS1302_Init ( void ); // 读取日期和时间, DS1302 -> DS1302_DateTime void DS1302_GetDateTime ( void ); // 设置日期和时间, DS1302_DateTime -> DS1302 void DS1302_SetDateTime ( void ); unsigned char GetDayFromDate ( unsigned char year, unsigned char month, unsigned char date ); // 扫描(轮询)函数, 扫描频率应大于1Hz void DS1302_Scan ( void ); void DS1302_Key_Handler ( void ); void Sec_TO_Date ( u32 secs ); u32 Date_TO_Sec ( u16 year, u8 month, u8 date, u8 hour, u8 minute, u8 second ); #endif /* __DS1302_H__ */