找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1840|回复: 1
收起左侧

DS1302的C语言源代码 直接移植使用

[复制链接]
ID:50487 发表于 2022-3-23 11:06 | 显示全部楼层 |阅读模式
  1. #include "ds1302.h"


  2. char  ds1302_data_read()
  3. {
  4. return P22;
  5. }  

  6. /***************************************************
  7. 程序驱动
  8. ****************************************************/
  9. void DS1302_Write(unsigned char D)
  10. {
  11. unsigned char i;
  12. for(i=0;i<8;i++)
  13.         {
  14.         ds1302_data(D&0x01);
  15.         ds1302_sclk(1);
  16.         ds1302_sclk(0);
  17.         D=D>>1;
  18.         }
  19. }
  20. //写地址和数据
  21. void WDS1302(unsigned char ucAddr, unsigned char ucDat)
  22. {
  23. ds1302_rst(0);
  24. ds1302_sclk(0);
  25. ds1302_rst(1);
  26. DS1302_Write(ucAddr);
  27. DS1302_Write(ucDat);
  28. ds1302_sclk(1);
  29. ds1302_sclk(0);
  30. ds1302_data(1);
  31. }
  32. //读一串数据
  33. unsigned char DS1302_Read()
  34. {
  35. unsigned char TempDat=0,i;
  36.     for(i=0;i<8;i++)
  37.     {
  38.     TempDat>>=1;                        
  39.     if(ds1302_data_read()) TempDat=TempDat|0x80;
  40.                         ds1302_sclk(1);                        
  41.                         ds1302_sclk(0);
  42.     }
  43. return TempDat;
  44. }
  45. //写地址然后读数据
  46. unsigned char read1302(unsigned char ucAddr)
  47. {
  48. unsigned char ucDat;
  49. ds1302_rst(0);
  50. ds1302_sclk(0);
  51. ds1302_rst(1);
  52. DS1302_Write(ucAddr);
  53. ucDat=DS1302_Read();
  54. ds1302_sclk(1);
  55. ds1302_rst(0);
  56. ds1302_data(1);
  57. return ucDat;
  58. }

  59. /***************************************************
  60. ds1302程序初始化
  61. ****************************************************/
  62. void w_ram()
  63. {
  64. WDS1302(0x8e,0x00);//关闭保护寄存器
  65. WDS1302(0xc0,0x51);  //ram里面的一个数据
  66. WDS1302(0x8e,0x80);//开保护
  67. }
  68. unsigned char g_ram()
  69. {
  70. unsigned char g_ram_data;
  71. g_ram_data=read1302(0xc1);
  72. return g_ram_data;
  73. }

  74. void init_time()
  75. {
  76. if(g_ram()!=0x51)
  77.         {
  78.         w_ram();
  79.         WDS1302(0x8e,0x00);//关闭保护寄存器
  80.         WDS1302(0x80,0x00);//set秒
  81.         WDS1302(0x82,0x36);//set分
  82.         WDS1302(0x84,0x20);//set时
  83.         WDS1302(0x8A,0x03);//set星期
  84.         WDS1302(0x86,0x16);//set日
  85.         WDS1302(0x88,0x03);//set月
  86.         WDS1302(0x8C,0x22);//set年
  87.         WDS1302(0x90,0xa5);//充电
  88.         WDS1302(0x8e,0x80);//开保护
  89.         }
  90. }


  91. void  w_nian(unsigned char a)
  92. {
  93. unsigned char b;
  94. b=a/10*16+a%10;
  95. WDS1302(0x8e,0x00);//关闭保护寄存器
  96. WDS1302(write_nian,b);//年
  97. WDS1302(0x8e,0x80);//开保护
  98. }
  99. void  w_yue(unsigned char a)
  100. {
  101. unsigned char b;
  102. b=a/10*16+a%10;
  103. WDS1302(0x8e,0x00);//关闭保护寄存器
  104. WDS1302(write_yue,b);//年
  105. WDS1302(0x8e,0x80);//开保护
  106. }
  107. void  w_ri(unsigned char a)
  108. {
  109. unsigned char b;
  110. b=a/10*16+a%10;
  111. WDS1302(0x8e,0x00);//关闭保护寄存器
  112. WDS1302(write_tian,b);//年
  113. WDS1302(0x8e,0x80);//开保护
  114. }
  115. void  w_fen(unsigned char a)
  116. {
  117. unsigned char b;
  118. b=a/10*16+a%10;
  119. WDS1302(0x8e,0x00);//关闭保护寄存器
  120. WDS1302(0x82,b);//set分
  121. WDS1302(0x8e,0x80);//开保护
  122. }
  123. void w_shi(unsigned char a)
  124. {
  125. unsigned char b;
  126. b=a/10*16+a%10;
  127. WDS1302(0x8e,0x00);//关闭保护寄存器
  128. WDS1302(0x84,b);//set时
  129. WDS1302(0x8e,0x80);//开保护
  130. }
  131. void w_miao(unsigned char a)
  132. {
  133. unsigned char b;
  134. b=a/10*16+a%10;
  135. WDS1302(0x8e,0x00);//关闭保护寄存器
  136. WDS1302(write_second,b);//setmiao
  137. WDS1302(0x8e,0x80);//开保护
  138. }
  139. void w_zhou(unsigned char a)
  140. {
  141. unsigned char b;
  142. b=a/10*16+a%10;
  143. WDS1302(0x8e,0x00);//关闭保护寄存器
  144. WDS1302(write_zhou,b);//setmiao
  145. WDS1302(0x8e,0x80);//开保护
  146. }
  147. unsigned char  get_fen()
  148. {
  149. unsigned char a,b;
  150. a=read1302(read_fen);
  151. b=a%16+a/16*10;
  152. return b;
  153. }
  154. unsigned char  get_shi()
  155. {
  156. unsigned char a=0,b=0;
  157. a=read1302(read_xiaoshi);
  158. b=a%16+a/16*10;
  159. return b;
  160. }
  161. unsigned char  get_miao()
  162. {
  163. unsigned char a=0,b=0;
  164. a=read1302(read_miao);
  165. b=a%16+a/16*10;
  166. return b;
  167. }
  168. unsigned char  get_nian()
  169. {
  170. unsigned char a=0,b=0;
  171. a=read1302(read_nian);
  172. b=a%16+a/16*10;
  173. return b;
  174. }
  175. unsigned char  get_yue()
  176. {
  177. unsigned char a=0,b=0;
  178. a=read1302(read_yue);
  179. b=a%16+a/16*10;
  180. return b;
  181. }
  182. unsigned char  get_ri()
  183. {
  184. unsigned char a=0,b=0;
  185. a=read1302(read_tian);
  186. b=a%16+a/16*10;
  187. return b;
  188. }
  189. unsigned char  get_zhou()
  190. {
  191. unsigned char a=0,b=0;
  192. a=read1302(read_zhou);
  193. b=a%16+a/16*10;
  194. return b;
  195. }
复制代码
源代码免费提供给大家,直接使用
51hei.png

上图2个文件下载 c代码(请自行移植到各单片机平台): DS1302.zip (1.48 KB, 下载次数: 39)

评分

参与人数 1黑币 +20 收起 理由
admin + 20 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1023698 发表于 2022-5-4 10:45 | 显示全部楼层
感谢楼主无私奉献
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表