找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2292|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

DS1302的C語言源代碼 直接移植使用

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:50487 發(fā)表于 2022-3-23 11:06 | 只看該作者 |只看大圖 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
  1. #include "ds1302.h"


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

  6. /***************************************************
  7. 程序驅(qū)動
  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. //寫地址和數(shù)據(jù)
  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. //讀一串?dāng)?shù)據(jù)
  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. //寫地址然后讀數(shù)據(jù)
  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);//關(guān)閉保護(hù)寄存器
  65. WDS1302(0xc0,0x51);  //ram里面的一個數(shù)據(jù)
  66. WDS1302(0x8e,0x80);//開保護(hù)
  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);//關(guān)閉保護(hù)寄存器
  80.         WDS1302(0x80,0x00);//set秒
  81.         WDS1302(0x82,0x36);//set分
  82.         WDS1302(0x84,0x20);//set時(shí)
  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);//開保護(hù)
  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);//關(guān)閉保護(hù)寄存器
  96. WDS1302(write_nian,b);//年
  97. WDS1302(0x8e,0x80);//開保護(hù)
  98. }
  99. void  w_yue(unsigned char a)
  100. {
  101. unsigned char b;
  102. b=a/10*16+a%10;
  103. WDS1302(0x8e,0x00);//關(guān)閉保護(hù)寄存器
  104. WDS1302(write_yue,b);//年
  105. WDS1302(0x8e,0x80);//開保護(hù)
  106. }
  107. void  w_ri(unsigned char a)
  108. {
  109. unsigned char b;
  110. b=a/10*16+a%10;
  111. WDS1302(0x8e,0x00);//關(guān)閉保護(hù)寄存器
  112. WDS1302(write_tian,b);//年
  113. WDS1302(0x8e,0x80);//開保護(hù)
  114. }
  115. void  w_fen(unsigned char a)
  116. {
  117. unsigned char b;
  118. b=a/10*16+a%10;
  119. WDS1302(0x8e,0x00);//關(guān)閉保護(hù)寄存器
  120. WDS1302(0x82,b);//set分
  121. WDS1302(0x8e,0x80);//開保護(hù)
  122. }
  123. void w_shi(unsigned char a)
  124. {
  125. unsigned char b;
  126. b=a/10*16+a%10;
  127. WDS1302(0x8e,0x00);//關(guān)閉保護(hù)寄存器
  128. WDS1302(0x84,b);//set時(shí)
  129. WDS1302(0x8e,0x80);//開保護(hù)
  130. }
  131. void w_miao(unsigned char a)
  132. {
  133. unsigned char b;
  134. b=a/10*16+a%10;
  135. WDS1302(0x8e,0x00);//關(guān)閉保護(hù)寄存器
  136. WDS1302(write_second,b);//setmiao
  137. WDS1302(0x8e,0x80);//開保護(hù)
  138. }
  139. void w_zhou(unsigned char a)
  140. {
  141. unsigned char b;
  142. b=a/10*16+a%10;
  143. WDS1302(0x8e,0x00);//關(guān)閉保護(hù)寄存器
  144. WDS1302(write_zhou,b);//setmiao
  145. WDS1302(0x8e,0x80);//開保護(hù)
  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. }
復(fù)制代碼
源代碼免費(fèi)提供給大家,直接使用


上圖2個文件下載 c代碼(請自行移植到各單片機(jī)平臺): DS1302.zip (1.48 KB, 下載次數(shù): 39)

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1023698 發(fā)表于 2022-5-4 10:45 | 只看該作者
感謝樓主無私奉獻(xiàn)
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表