久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3776|回復: 0
打印 上一主題 下一主題
收起左側

PCF8563T標準驅動源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:52711 發表于 2019-8-10 22:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
龍嘯九天的標準IIC程序,PCF8563T

單片機源程序如下:
  1. /**————————————————————
  2. 2 〖說明〗I2C總線驅動程序(用兩個普通IO模擬I2C總線)
  3. 3 包括100Khz(T=10us)的標準模式(慢速模式)選擇,
  4. 4 和400Khz(T=2.5us)的快速模式選擇,
  5. 5 默認11.0592Mhz的晶振。

  6. 9 〖版本〗V1.00A Build 0803
  7. 10 ————————————
  8. /**/
  9. #include <reg66x.h>    /* special function registers       */
  10. #include <INTRINS.H>


  11. #define uchar unsigned char
  12. #define uint unsigned int
  13. #define Byte unsigned char
  14. #define Word unsigned int
  15. #define bool bit
  16. #define true 1
  17. #define false 0
  18. uchar SystemError;

  19. #define SomeNOP()  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  20. extern void delay(int n);
  21. /**--------------------------------------------------------------------------------
  22. 30 調用方式:void I2CStart(void) ﹫2001/07/0 4
  23. 31 函數說明:私有函數,I2C專用
  24. 32 ---------------------------------------------------------------------------------*/
  25. void I2CStart(void)
  26. {
  27. EA=0;
  28. SDA=1; SCL=1; SomeNOP();//INI
  29. SDA=0; SomeNOP(); //START
  30. SCL=0;
  31. }

  32. /**--------------------------------------------------------------------------------
  33. 42 調用方式:void I2CStop(void) ﹫2001/07/0 4
  34. 43 函數說明:私有函數,I2C專用
  35. 44 ---------------------------------------------------------------------------------*/
  36. void I2CStop(void)
  37. {
  38. SCL=0; SDA=0; SomeNOP(); //INI
  39. SCL=1; SomeNOP(); SDA=1; //STOP
  40. EA=1;
  41. }

  42. /**--------------------------------------------------------------------------------
  43. 53 調用方式:bit I2CAck(void) ﹫2001/07/0 4
  44. 54 函數說明:私有函數,I2C專用,等待從器件接收方的應答
  45. 55 ---------------------------------------------------------------------------------*/
  46. bool WaitAck(void)
  47. {
  48. uchar errtime=255;//因故障接收方無ACK,超時值為255。
  49. SDA=1;SomeNOP();
  50. SCL=1;SomeNOP();
  51. while(SDA) {errtime--; if (!errtime) {I2CStop();SystemError=0x11;return false;}}
  52. SCL=0;
  53. return true;
  54. //第1 頁
  55. //文件: PCF8563T.C 2001-11-27, 18:39:20
  56. }

  57. /**--------------------------------------------------------------------------------
  58. 67 調用方式:void SendAck(void) ﹫2001/07/0 4
  59. 68 函數說明:私有函數,I2C專用,主器件為接收方,從器件為發送方時,應答信號。
  60. 69 ---------------------------------------------------------------------------------*/
  61. void SendAck(void)
  62. {
  63. SDA=0; SomeNOP();
  64. SCL=1; SomeNOP();
  65. SCL=0;
  66. }

  67. /**--------------------------------------------------------------------------------
  68. 78 調用方式:void SendAck(void) ﹫2001/07/0 4
  69. 79 函數說明:私有函數,I2C專用,主器件為接收方,從器件為發送方時,非應答信號。
  70. 80 }**--------------------------------------------------------------------------------
  71. */
  72. void SendNotAck(void)
  73. {
  74. SDA=1; SomeNOP();
  75. SCL=1; SomeNOP();
  76. SCL=0;
  77. }

  78. /**--------------------------------------------------------------------------------
  79. 89 調用方式:void I2CSend(uchar ch) ﹫2001/07/0 5
  80. 90 函數說明:私有函數,I2C專用
  81. 91 ---------------------------------------------------------------------------------*/
  82. void I2CSendByte(Byte ch)
  83. {
  84. uchar i=8;
  85. while (i--)
  86. {
  87. SCL=0;_nop_();
  88. SDA=(bit)(ch&0x80); ch<<=1; SomeNOP();
  89. SCL=1; SomeNOP();
  90. }
  91. SCL=0;
  92. }

  93. /**--------------------------------------------------------------------------------
  94. 105 調用方式:uchar I2CReceive(void) ﹫2001/07/0 5
  95. 106 函數說明:私有函數,I2C專用
  96. 107 ---------------------------------------------------------------------------------*/
  97. Byte I2CReceiveByte(void)
  98. {
  99. uchar i=8;
  100. Byte ddata=0;
  101. SDA=1;
  102. while (i--)
  103. {
  104. ddata<<=1;
  105. SCL=0;SomeNOP();
  106. SCL=1;SomeNOP();
  107. ddata|=SDA;
  108. }
  109. SCL=0;
  110. return ddata;
  111. }


  112. //---------------------------------------------------------------------------
  113. //開始PCF8563T驅動程序
  114. //第2 頁
  115. //文件: PCF8563T.C 2001-11-27, 18:39:20
  116. /**--------------------------------------------------------------------------------
  117. 128 調用方式:void GetPCF8563(uchar firsttype,uchar count,uchar *buff) ﹫2001/08/0 7
  118. 129 函數說明:讀取時鐘芯片PCF8563的時間,設置要讀的第一個時間類型firsttype,并設置讀取
  119. 130 的字節數,則會一次把時間讀取到buff中。順序是:
  120. 131 0x02:秒/0x03:分/0x04:小時/0x05:日/0x06:星期/0x07:月(世紀)/0x08:年
  121. 132 ---------------------------------------------------------------------------------*/
  122. void GetPCF8563(uchar firsttype,uchar count,uchar *buff)
  123. {
  124. uchar i;
  125. I2CStart();
  126. I2CSendByte(0xA2);
  127. WaitAck();
  128. I2CSendByte(firsttype);
  129. WaitAck();

  130. I2CStart();
  131. I2CSendByte(0xA3);
  132. WaitAck();

  133. for (i=0;i<count;i++)
  134. {
  135. buff[i]=I2CReceiveByte();
  136. if (i!=count-1) SendAck();//除最后一個字節外,其他都要從MASTER發應答。
  137. }

  138. SendNotAck();
  139. I2CStop();
  140. }


  141. /**--------------------------------------------------------------------------------
  142. 158 調用方式:void SetPCF8563(uchar timetype,uchar value) ﹫2001/08/0 7
  143. 159 函數說明:調整時鐘。timetype是要改的時間類型,value是新設置的時間值(BCD格式)。
  144. 160 0x02:秒/0x03:分/0x04:小時/0x05:日/0x06:星期/0x07:月(世紀)/0x08:年
  145. 161 ---------------------------------------------------------------------------------*/
  146. void SetPCF8563(uchar timetype,uchar value)
  147. {
  148. I2CStart();
  149. I2CSendByte(0xA2);
  150. WaitAck();
  151. I2CSendByte(timetype);
  152. WaitAck();
  153. I2CSendByte(value);
  154. WaitAck();
  155. I2CStop();
  156. }

  157. /**--------------------------------------------------------------------------------
  158. 175 調用方式:void SetAlarmHour(uchar count) ﹫2001/08/0 7
  159. 176 函數說明:設置報警鬧鐘在一天的第count點報警。例如:count=23,則在晚上11點報警。
  160. 177 ---------------------------------------------------------------------------------
  161. void SetAlarm(uchar alarmtype,uchar count)
  162. {
  163. SetPCF8563(0x01,0x02);
  164. SetPCF8563(alarmtype,count);
  165. }
  166. */
  167. /**--------------------------------------------------------------------------------
  168. 85 調用方式:void CleanAlarm(void) ﹫2001/08/0 7
  169. 186 函數說明:清除所有報警設置。
  170. 187 ---------------------------------------------------------------------------------
  171. void CleanAlarm(void)
  172. {
  173. //第3 頁
  174. //文件: PCF8563T.C 2001-11-27, 18:39:20
  175. SetPCF8563(0x01,0x00);
  176. SetPCF8563(0x09,0x80);
  177. SetPCF8563(0x0A,0x80);
  178. SetPCF8563(0x0B,0x80);
  179. SetPCF8563(0x0C,0x80);
  180. // SetPCF8563(0x0D,0x00);
  181. // SetPCF8563(0x0E,0x03);
  182. }
  183. */

  184. /*--------------------------------------------------------------------------------
  185. 201 調用方式:uchar read1380(uchar command )
  186. 202 函數說明:read1380()返回當前時間, command指要返回的時間類型。
  187. 203 秒:81H 分鐘:83H 小時:85H 日期:87H 星期:89H 星期幾:8BH 年:8D H
  188. 204 ---------------------------------------------------------------------------------*/
  189. // uchar read1380 (uchar command)
  190. // {
  191. // uchar time;
  192. // GetPCF8563(command,1,&time);
  193. // return time;
  194. // }

  195. //---------------------------------------------------------------------------
  196. //開始CAT1161驅動程序
  197. //第2 頁
  198. //文件: CAT1161.C 2001-11-27, 18:39:20
  199. /**--------------------------------------------------------------------------------
  200. 128 調用方式:void GetCAT1161(uchar catadd,uchar count,uchar *buff) ﹫2001/08/0 7
  201. 129 函數說明:讀取時鐘芯片PCF8563的時間,設置要讀的第一個時間類型firsttype,并設置讀取
  202. 130 的字節數,則會一次把時間讀取到buff中。順序是:
  203. 131 0x02:秒/0x03:分/0x04:小時/0x05:日/0x06:星期/0x07:月(世紀)/0x08:年
  204. 132 ---------------------------------------------------------------------------------
  205. void GetCAT1161(uchar catadd,uchar *buff)
  206. {
  207. // uchar i;
  208. I2CStart();
  209. I2CSendByte(0xA0);
  210. WaitAck();
  211. I2CSendByte(catadd);
  212. WaitAck();

  213. I2CStart();
  214. I2CSendByte(0xA1);
  215. WaitAck();
  216. I2CSendByte(catadd);
  217. WaitAck();
  218. // for (i=0;i<count;i++)
  219. // {
  220. *buff=I2CReceiveByte();
  221. // if (i!=count-1) SendAck();//除最后一個字節外,其他都要從MASTER發應答。
  222. // }

  223. SendNotAck();
  224. I2CStop();
  225. }


  226. /**--------------------------------------------------------------------------------
  227. 158 調用方式:void SetCAT1161(uchar timetype,uchar value) ﹫2001/08/0 7
  228. 159 函數說明:調整時鐘。timetype是要改的時間類型,value是新設置的時間值(BCD格式)。
  229. 160 0x02:秒/0x03:分/0x04:小時/0x05:日/0x06:星期/0x07:月(世紀)/0x08:年
  230. 161 ---------------------------------------------------------------------------------
  231. void SetCAT1161(uchar catadd,uchar value)
  232. {
  233. I2CStart();
  234. I2CSendByte(0xA0);
  235. WaitAck();
  236. I2CSendByte(catadd);
  237. WaitAck();
  238. I2CSendByte(value);
  239. WaitAck();
  240. I2CStop();
  241. }
  242. */
  243. //---------------------------------------------------------------------------
  244. //開始AT24C02驅動程序
  245. /**--------------------------------------------------------------------------------
  246. 128 調用方式:void AT24C02(uchar firstadd,uchar count,uchar *buff) ﹫2001/08/0 7
  247. 129 函數說明:

  248. 132 ---------------------------------------------------------------------------------*/
  249. void ReadAT24C02(uchar *buff)

  250. {

  251. unsigned char i=0;
  252. unsigned char nLen=26;
  253. I2CStart();
  254. I2CSendByte(0xA0);
  255. WaitAck();
  256. I2CSendByte(0x00);  //ram的第一個地址
  257. WaitAck();

  258. I2CStart();
  259. I2CSendByte(0xA1);
  260. WaitAck();

  261. while(--nLen)
  262. {

  263.   buff[i]=I2CReceiveByte(); //讀出內容
  264.   i++;   //指針加1
  265.   SendAck();   //發確認信號
  266. }
  267. buff[i]=I2CReceiveByte();   //讀一字節
  268. SendNotAck();   //沒有確認信號


  269. I2CStop();
  270. }


  271. /**--------------------------------------------------------------------------------
  272. 158 調用方式:void SetAT24C02(uchar firstadd,uchar count,uchar *buff) ﹫2005/12/28
  273. 159 函數說明:
  274. 161 ---------------------------------------------------------------------------------*/
  275. void WriteAT24C02(uchar *buff)

  276. {
  277.   unsigned char i,temp,Addr;
  278.   unsigned char k=0;
  279.   unsigned char nLen=26;
  280.   Addr=0x00;
  281. I2CStart();
  282. I2CSendByte(0xA0);
  283. WaitAck();
  284. I2CSendByte(Addr);
  285. WaitAck();
  286. for(i = 0;i < nLen;i++)
  287.         {
  288.                  if(Addr%8==0)   //每頁8字節  //換頁
  289.                          {
  290.                           I2CStop();
  291.                                delay(10000);
  292.                                SomeNOP();
  293.                           I2CStart();
  294.                           I2CSendByte(0xA0);
  295.                           WaitAck();
  296.                           I2CSendByte(Addr);
  297.                           WaitAck();
  298.                          }
  299.                  temp = buff[k];
  300.                  I2CSendByte(temp);
  301.                  WaitAck();
  302.                  k++;
  303.                 Addr++;
  304.         }

  305. I2CStop();
  306. }
復制代碼

以上程序51hei提供下載:
pcf8563t.rar (2.37 KB, 下載次數: 92)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黑色丝袜三级在线播放 | 特级毛片www | 日韩看片 | 99精品久久99久久久久 | 国产精品久久久久久久久免费丝袜 | 国产一区二区三区日韩 | 日日操夜夜操天天操 | www.99久久.com| 亚洲国产一区二区三区, | 激情网五月天 | 91久久精品一区二区二区 | av网址在线| 亚洲人在线播放 | 人人鲁人人莫人人爱精品 | 天天摸天天看 | 精品免费国产视频 | 精品福利av导航 | 国产午夜精品理论片a大结局 | 成人免费区一区二区三区 | 国产精品久久久久久婷婷天堂 | 秋霞a级毛片在线看 | 欧美国产精品一区二区三区 | 成人激情视频免费观看 | 亚洲国产一区二区三区 | 欧美电影在线观看网站 | www.99re| 最近免费日本视频在线 | 国产在线一区二区 | 久久精品国产一区二区电影 | 日韩欧美不卡 | 韩日一区二区 | 国产成人精品久久二区二区91 | 在线一区视频 | 日韩一区二区福利 | 国产精品美女久久久久久免费 | 午夜视频网 | 992tv人人草| dy天堂| 日韩国产在线 | 99久久精品国产毛片 | 久久久久国产 |