ds1302.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. //ds1302.h:
  2. /************ DS1302程序 ************
  3. * 版本.........: 1.0
  4. * 作者.........: 陈利栋
  5. * 文件名.......: ds1302.h
  6. * 创建时间.....: 2010.11.11
  7. * 最后修改.....: 2010.11.11
  8. ************************************/
  9. #ifndef __DS1302_H__
  10. #define __DS1302_H__
  11. #include "main.h"
  12. #include <time.h>
  13. // 寄存器地址定义
  14. #define DS1302_SECOND_ADDR 0x80
  15. #define DS1302_MINUTE_ADDR 0x82
  16. #define DS1302_HOUR_ADDR 0x84
  17. #define DS1302_DATE_ADDR 0x86
  18. #define DS1302_MONTH_ADDR 0x88
  19. #define DS1302_DAY_ADDR 0x8a
  20. #define DS1302_YEAR_ADDR 0x8c
  21. #define DS1302_WRITE_PROTECT_ADDR 0x8e // 写保护
  22. #define DS1302_TRICKLE_CHARGE_ADDR 0x90 // 涓流充电
  23. #define DS1302_CLOCK_BURST_ADDR 0xbe // 连续读写
  24. #if DS1302_AUTO_TO_DEC == 1
  25. #define DEC_TO_BCD(d) DecToBcd(d)
  26. #define BCD_TO_DEC(b) BcdToDec(b)
  27. #else
  28. #define DEC_TO_BCD(d) d
  29. #define BCD_TO_DEC(b) b
  30. #endif /* DS1302_AUTO_TO_DEC == 1 */
  31. typedef enum
  32. {
  33. _12_hours, _24_hours
  34. } HourMode_t;
  35. typedef enum
  36. {
  37. am, pm
  38. } AM_PM_t;
  39. // DS1302日期时间结构
  40. typedef struct
  41. {
  42. unsigned char Year; // 年 0 - 99
  43. unsigned char Month; // 月 1 - 12
  44. unsigned char Date; // 日 1 - 31
  45. unsigned char Hour; // 时 1 - 12 或 0 - 23
  46. unsigned char Minute; // 分 0 - 59
  47. unsigned char Second; // 秒 0 - 59
  48. unsigned char Day; // 星期 1 - 7 星期天 = 7
  49. HourMode_t HourMode; // 小时模式 _12_hours 或 _24_hours
  50. AM_PM_t AM_PM; // 上午下午标志 12时制时有效 am 或 pm
  51. } DS1302_DateTime_t;
  52. // 更新标记 1:已更新 0:未更新
  53. // 调用 DS1302_GetDateTime 后自动清零
  54. extern volatile unsigned char DS1302_Update;
  55. /* 存放日期和时间的变量
  56. 执行 DS1302_GetDateTime 后 时间日期写入到该变量
  57. 修改此值,并执行 DS1302_SetDateTime, 更新到DS1302 */
  58. extern DS1302_DateTime_t DS1302_DateTime;
  59. // 初始化
  60. void DS1302_Init ( void );
  61. // 读取日期和时间, DS1302 -> DS1302_DateTime
  62. void DS1302_GetDateTime ( void );
  63. // 设置日期和时间, DS1302_DateTime -> DS1302
  64. void DS1302_SetDateTime ( void );
  65. unsigned char GetDayFromDate ( unsigned char year, unsigned char month, unsigned char date );
  66. // 扫描(轮询)函数, 扫描频率应大于1Hz
  67. void DS1302_Scan ( void );
  68. void DS1302_Key_Handler ( void );
  69. void Sec_TO_Date ( u32 secs );
  70. u32 Date_TO_Sec ( u16 year, u8 month, u8 date, u8 hour, u8 minute, u8 second );
  71. #endif /* __DS1302_H__ */