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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1195|回復(fù): 0
收起左側(cè)

請(qǐng)問一下,這個(gè)AVR單片機(jī)DS1302程序?qū)Σ粚?duì)? 求幫助

[復(fù)制鏈接]
ID:559337 發(fā)表于 2019-7-24 16:23 | 顯示全部樓層 |閱讀模式
  1. #include <iom16v.h>
  2. #include <macros.h>         
  3. #define uchar unsigned char  
  4. #define uint  unsigned int  

  5. #define SCK_CLR    PORTC&=~BIT(0)
  6. //拉低時(shí)鐘線  
  7. #define SCK_SET  PORTC|=BIT(0)
  8. //拉高時(shí)鐘線
  9. #define SCK_OUT  DDRC|=BIT(0)
  10. #define RST_CLR  PORTC&=~BIT(2)
  11. //拉低RST線  復(fù)位線
  12. #define RST_SET  PORTC|=BIT(2)
  13. //拉高RST線
  14. #define RST_OUT  DDRC|=BIT(2)
  15. //把RST設(shè)為輸出
  16. #define IO_CLR  PORTC&=~BIT(1)
  17. //拉低IO線  數(shù)據(jù)線
  18. #define IO_SET  PORTC|=BIT(1)
  19. //拉高IO線
  20. #define IO_IN  DDRC&=~BIT(1)
  21. //把IO設(shè)為輸入
  22. #define IO_RD PINC&BIT(1)
  23. //從IO中讀數(shù)據(jù)  
  24. #define IO_OUT  DDRC|=BIT(1)
  25. //把IO設(shè)為輸出



  26. uchar const write_add[]={0x80,0x82,0x84};   //寫地址,0x86,0x88,0x8c,0x8a
  27. //uchar code read_add[] ={0x81,0x83,0x85};   //讀地址,0x87,0x89,0x8d,0x8b
  28. uchar const init_ds[]  ={0x55,0x17,0x15,0x01,0x01,0x13,0x13};   
  29. uchar miao,fen,shi;//,ri,yue,week,nian=0x20;
  30. uchar nfen=0;
  31. uchar nshi=0;

  32. /*************寫一個(gè)數(shù)據(jù)到對(duì)應(yīng)的地址里***************/
  33. void write_ds1302(uchar add,uchar dat)
  34. {
  35. uchar i;  
  36. RST_SET;
  37. IO_OUT;    //把復(fù)位線拉高
  38. for(i=0;i<8;i++)
  39. {         //低位在前
  40.   SCK_CLR;   //時(shí)鐘線拿低開始寫數(shù)據(jù)
  41.   if(add&0x01)
  42.        {
  43.         IO_SET;
  44.        }
  45.        else
  46.        {
  47.        IO_CLR;
  48.        }   //把地址右移一位
  49.   SCK_SET;   //時(shí)鐘線拿高
  50.        add=add>>1;
  51.     }

  52. for(i=0;i<8;i++)
  53. {
  54.   SCK_CLR;   //時(shí)鐘線拿低開始讀數(shù)據(jù)
  55.   if(dat&0x01)
  56.         {
  57.          IO_SET;
  58.         }
  59.         else
  60.         {
  61.           IO_CLR;
  62.         }   //把數(shù)據(jù)右移一位
  63.   SCK_SET;   //時(shí)鐘線拿高
  64.         dat=dat>>1;
  65.     }

  66. RST_CLR;    //復(fù)位線合低
  67. SCK_CLR;
  68. IO_CLR;
  69. }
  70. /*************從對(duì)應(yīng)的地址讀一個(gè)數(shù)據(jù)出來***************/
  71. uchar read_ds1302(uchar add)
  72. {
  73. uchar value,i;
  74. RST_SET;
  75.     IO_IN;     //把復(fù)位線拿高
  76. for(i=0;i<8;i++)
  77. {         //低位在前
  78.   SCK_CLR;   //時(shí)鐘線拿低開始寫數(shù)據(jù)
  79.   if(add&0x01)
  80.       {
  81.        IO_SET;
  82.        }
  83.        else
  84.       {
  85.       IO_CLR;
  86.       }   
  87.   SCK_SET;   //時(shí)鐘線拿高
  88.    add=add>>1; //把地址右移一位
  89.   }  
  90.   for(i=0;i<8;i++)
  91.   {
  92.   SCK_CLR;   //時(shí)鐘線拿低開始讀數(shù)據(jù)
  93.   value >>= 1;
  94.   if(IO_RD)
  95.    value |= 0x80;
  96.   SCK_SET;   //時(shí)鐘線拿高
  97.   }
  98.    RST_CLR;    //復(fù)位線合低
  99.    SCK_CLR;
  100.    IO_CLR;
  101.    return value;   //返回讀出來的數(shù)據(jù)
  102. }
  103. /*************把要的時(shí)間年月日都讀出來***************/
  104. void read_time()
  105. {
  106. miao = read_ds1302(0x81); //讀秒
  107. fen = read_ds1302(0x83); //讀分
  108. shi = read_ds1302(0x85); //讀時(shí)
  109. // ri   = read_ds1302(read_add[3]); //讀日
  110. // yue  = read_ds1302(read_add[4]); //讀月
  111. // nian = read_ds1302(read_add[5]); //讀年
  112. // week = read_ds1302(read_add[6]); //讀星期
  113. }
  114. /*************把要寫的時(shí)間年月日都寫入ds1302里***************/
  115. void write_time()
  116. {
  117. write_ds1302(0x8e,0x00);   //打開寫保護(hù)
  118. // write_ds1302(write_add[0],miao); //寫秒
  119. write_ds1302(0x82,fen);  //寫分
  120. write_ds1302(0x84,shi);  //寫時(shí)
  121. // write_ds1302(write_add[3],ri);  //寫日
  122. // write_ds1302(write_add[4],yue);  //寫月
  123. // write_ds1302(write_add[5],nian); //寫年
  124. // write_ds1302(write_add[6],week); //寫星期
  125. write_ds1302(0xc2,nshi);   //寫鬧時(shí)
  126. write_ds1302(0xc4,nfen);   //寫鬧分
  127. write_ds1302(0x8e,0x80);   //關(guān)閉寫保護(hù)
  128. }
  129. void read_nao()
  130. {
  131. nshi = read_ds1302(0xc3); //讀鬧鐘時(shí)
  132. nfen = read_ds1302(0xc5); //讀鬧鐘分
  133. }
  134. /*************把數(shù)據(jù)保存到ds1302 RAM中**0-31***********/
  135. void write_ds1302ram(uchar add,uchar dat)
  136. {
  137. add <<= 1;     //地址是從第二位開始的
  138. add &= 0xfe;   //把最低位清零  是寫的命令
  139. add |= 0xc0;   //地址最高兩位為1
  140. write_ds1302(0x8e,0x00);
  141. write_ds1302(add,dat);
  142. write_ds1302(0x8e,0x80);
  143. }
  144. /*************把數(shù)據(jù)從ds1302 RAM讀出來**0-31***********/
  145. uchar read_ds1302ram(uchar add)
  146. {
  147. add <<= 1;     //地址是從第二位開始的
  148. add |= 0x01;   //把最低位清零  是讀的命令
  149. add |= 0xc0;   //地址最高兩位為1   
  150. return(read_ds1302(add));
  151. }
  152. /*************初始化ds1302時(shí)間***************/
  153. void init_ds1302()
  154. {
  155. uchar i;
  156. RST_CLR;    //復(fù)位線合低
  157. SCK_CLR;
  158. IO_CLR;
  159. i = read_ds1302ram(30);   
  160. if(i != 3)
  161. {
  162.   i = 3;
  163.   write_ds1302ram(30,i);
  164.   write_ds1302(0x8e,0x00);             //打開保護(hù)
  165.   for(i=0;i<3;i++)
  166.    write_ds1302(write_add[i],init_ds[i]); //把最高位值0 允許ds1302工作
  167.   write_ds1302(0x8e,0x80); //關(guān)寫保護(hù)
  168. }
  169. }
  170. void init_ds1302_io()
  171. {
  172. RST_CLR;    //第一次讀寫數(shù)據(jù)是要把io位拿低
  173. SCK_CLR;
  174. IO_CLR;
  175. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美寡妇偷汉性猛交 | 先锋资源站 | 欧美成人免费在线 | 日韩中文字幕一区二区 | 一区二区三区av夏目彩春 | 亚洲欧美自拍偷拍视频 | 色综合天天天天做夜夜夜夜做 | 欧美一级片在线观看 | 欧美日韩三级在线观看 | 一区二区在线 | 亚洲一区二区三区免费视频 | 欧美日韩亚洲国产 | 九色91视频| 亚洲国产高清在线观看 | 天天插天天操 | 91精品免费 | 91精品久久久久久久久中文字幕 | 91欧美精品成人综合在线观看 | 婷婷综合| 国产欧美在线观看 | 国产综合欧美 | 日韩美香港a一级毛片免费 国产综合av | 免费在线a视频 | 免费在线一区二区 | 福利网站在线观看 | 国产精品高 | 亚洲一区二区精品视频 | 超碰日本 | 日韩精品免费在线观看 | 欧美黑人狂野猛交老妇 | 欧美一区二区三区高清视频 | 亚洲综合网站 | 亚洲精品久久久一区二区三区 | 久久综合一区二区 | 天天综合天天 | 亚洲精品黄色 | 欧洲亚洲精品久久久久 | 日韩毛片免费看 | 精品国产乱码久久久久久蜜柚 | 国产亚洲精品美女久久久久久久久久 | 免费黄色录像视频 |