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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

ds1302.h DS1302的芯片驅(qū)動程序下載

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:140725 發(fā)表于 2016-10-11 19:27 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式


ds1302.h文件及其他文件下載:
ds1302的芯片驅(qū)動程序.rar (39.82 KB, 下載次數(shù): 57)


一下是部分內(nèi)容預(yù)覽:
  1. /*******************************************************************
  2. *【文 件 名】:DS1302.h                                            *
  3. *【建立日期】:7月4日                                        *
  4. *【修改日期】:7月5日                                        *
  5. *【文件作用】:DS1302驅(qū)動程序,提供直接調(diào)用函數(shù)                    *
  6. *【說    明】:顯示格式:                                          *
  7. *                DATA:年-月-日-星期                             *
  8. *                TIME:時:分:秒                                   *
  9. *------------------------------------------------------------------*
  10. *【作    者】:郭鑫(ben)                                           *
  11. *【版    權(quán)】:國家創(chuàng)新性實驗項目,編號GCS07001                    *
  12. *******************************************************************/


  13. #ifndef _DS1302_08_07_04_
  14. #define _DS1302_08_07_04_

  15. #include <reg52.h>


  16. //------------定義------------
  17. #define delay_value3 10

  18. typedef struct
  19. {
  20.         uchar Second;
  21.         uchar Minute;
  22.         uchar Hour;
  23.         uchar Week;
  24.         uchar Day;
  25.         uchar Month;
  26.         uchar Year;
  27.         uchar DateString[11];
  28.         uchar TimeString[9];
  29. }time_struct;

  30. time_struct sys_time;

  31. #define DS1302_SECOND        0x80   //各個時間值的地址
  32. #define DS1302_MINUTE        0x82
  33. #define DS1302_HOUR                0x84
  34. #define DS1302_DAY                0x86
  35. #define DS1302_MONTH        0x88
  36. #define DS1302_WEEK                0x8A
  37. #define DS1302_YEAR                0x8C

  38. //-------------------------管腳定義--------------------------------         
  39. sbit  ds1302_clk = P3^4;   //實時時鐘時鐘線引腳
  40. sbit  ds1302_io  = P3^3;   //實時時鐘數(shù)據(jù)線引腳
  41. sbit  ds1302_rst = P3^2;   //實時時鐘復(fù)位線引腳
  42. sbit  acc0= ACC^0;         //數(shù)據(jù)讀入
  43. sbit  acc7= ACC^7;         //數(shù)據(jù)讀出



  44. //初始時間                          秒   分        時         日   月  星期        年   
  45. uchar start_time[7]={0x10,0x47,0x14,0x22,0x03,0x06,0x08};
  46. //uchar pdata shijian[]="時間:";
  47. //uchar pdata riqi[]="日期:";                                  

  48. //----------函數(shù)聲明-------------
  49. void ds1302_byte_w(uchar byt);                                          //DS1302寫入一個字節(jié)
  50. uchar ds1302_byte_r(void);                                                  //DS1302讀出一個字節(jié)

  51. void ds1302_w(uchar adds,uchar dat_writed);                  //DS1302數(shù)據(jù)寫入某地址
  52. uchar ds1302_r(uchar adds);                                                  //DS1302某地址數(shù)據(jù)讀取

  53. void ds1302_w_protect(bit flag);  
  54. void ds1302_init_time(uchar *time_to_w);
  55. void ds1302_initial(void);                                     //DS1302初始化

  56. void ds1302_get_time(time_struct *cur_time);    //獲取DS1302時間日期       
  57. void ds1302_set_time(void);                      //鍵控設(shè)置時間日期

  58. void call_ds1302(void);                                                         //供外部調(diào)用


  59. //----------DS1302初始化----------
  60. void ds1302_initial(void)
  61. {
  62.         uchar second;
  63.         second=ds1302_r(DS1302_SECOND);
  64.         ds1302_w_protect(0);
  65.         if(second&0x80)                  
  66.                 ds1302_w(DS1302_SECOND,0x00);
  67. //        ds1302_set_time(start_time);
  68.         ds1302_w_protect(1);       
  69.         lcd_cmd_w(0x01); //清屏
  70.         lcd_setposition(1,2);
  71.         lcd_str_w("日歷系統(tǒng)");
  72.         lcd_setposition(2,0);
  73.         lcd_str_w("Data: ");

  74.         lcd_setposition(3,0);
  75.         lcd_str_w("Time: ");

  76.         lcd_setposition(4,1);
  77.         lcd_str_w("key4設(shè)置系統(tǒng)");

  78. }//void ds1302_initial(void)


  79. //-------DS1302讀出一個字節(jié)----------
  80. uchar ds1302_byte_r(void)
  81. {
  82.         uchar i;
  83.           for(i=8; i>0; i--)
  84.           {
  85.                 ACC=ACC>>1;
  86.                 acc7=ds1302_io;
  87.                 ds1302_clk=1;
  88.                 ds1302_clk=0;
  89. //                delay(delay_value3);
  90.         }
  91.         return(ACC);
  92. }//uchar ds1302_byte_w(void)

  93. //---------DS1302寫入一個字節(jié)--------------
  94. void ds1302_byte_w(uchar byt)
  95. {
  96.         uchar i=0;
  97.         ACC=byt;
  98.         for(i=8;i>0;i--)
  99.         {
  100.                 ds1302_io=acc0;
  101.                 ds1302_clk=1;
  102.                 ds1302_clk=0;
  103. //                delay(delay_value3);
  104.                 ACC=ACC>>1;
  105.         }
  106. }//void ds1302_byte_r(uchar byt)

  107. //-------------DS1302某地址數(shù)據(jù)讀取--------------
  108. uchar ds1302_r(uchar adds)
  109. {
  110.         uchar data_read;
  111.           ds1302_rst = 0;
  112.         ds1302_clk = 0;
  113.         ds1302_rst = 1;
  114.         ds1302_byte_w(adds|0x01); //            
  115.         data_read = ds1302_byte_r();      
  116.         ds1302_clk = 1;
  117.         ds1302_rst = 0;
  118.         return(data_read);       
  119. }//uchar ds1302_r(uchar adds)


  120. //-------------DS1302數(shù)據(jù)寫入某地址------------
  121. void ds1302_w(uchar adds,uchar data_writed)
  122. {
  123.           ds1302_rst = 0;
  124.         ds1302_clk = 0;
  125.         ds1302_rst = 1;
  126.         ds1302_byte_w(adds);         
  127.         ds1302_byte_w(data_writed);         
  128.         ds1302_clk = 1;
  129.         ds1302_rst = 0;       
  130. }//void ds1302_w(uchar dat,uchar adds)


  131. //-----------DS1302是否寫保護----------------
  132. void ds1302_w_protect(bit flag)                                   //flag=0不保護,flag=1寫保護
  133. {
  134.         if(flag)
  135.                 ds1302_w(0x8e,0x80);       
  136.         else
  137.                 ds1302_w(0x8e,0x00);
  138. }//void ds1302_w_protect(bit flag)




  139. void ds1302_init_time(uchar *time_to_w)
  140. {
  141.         uchar i=0;
  142.           uchar adds = 0x80;
  143.           ds1302_w_protect(0);           //控制命令,WP=0,寫操作
  144.         for(i = 0; i < 7; i++)
  145.           {       
  146.                 ds1302_w(adds,time_to_w[i]);  // 秒 分 時 日 月 星期 年
  147.             adds+=2;
  148.           }
  149.           ds1302_w_protect(1);          //控制命令,WP=1,寫保護


  150. }//void ds1302_set_time(uchar *time_to_w)



  151. /*******************************************************************
  152. *【函 數(shù) 名】:ds1302_get_time                                     *
  153. *【修改日期】:2008年7月4日                                        *
  154. *【文件作用】:獲取DS1302時間值并轉(zhuǎn)化位數(shù)組形式,供顯示使用        *
  155. *------------------------------------------------------------------*
  156. *【備    注】:                                                    *
  157. *******************************************************************/
  158. void ds1302_get_time(time_struct *cur_time)               
  159. {
  160.         uchar temp_time;               //存放讀取的臨時時間
  161.         temp_time = ds1302_r(DS1302_SECOND);
  162.         cur_time->Second = ((temp_time&0x70)>>4)*10 + (temp_time&0x0F);
  163.        
  164.         temp_time = ds1302_r(DS1302_MINUTE);
  165.         cur_time->Minute = ((temp_time&0x70)>>4)*10 + (temp_time&0x0F);
  166.        
  167.         temp_time = ds1302_r(DS1302_HOUR);
  168.         cur_time->Hour = ((temp_time&0x70)>>4)*10 + (temp_time&0x0F);
  169.        
  170.         temp_time = ds1302_r(DS1302_DAY);
  171.         cur_time->Day = ((temp_time&0x70)>>4)*10 + (temp_time&0x0F);       
  172.        
  173.         temp_time = ds1302_r(DS1302_WEEK);
  174.         cur_time->Week = ((temp_time&0x70)>>4)*10 + (temp_time&0x0F);
  175.        
  176.         temp_time = ds1302_r(DS1302_MONTH);
  177.         cur_time->Month = ((temp_time&0x70)>>4)*10 + (temp_time&0x0F);
  178.        
  179.         temp_time = ds1302_r(DS1302_YEAR);
  180.         cur_time->Year = ((temp_time&0x70)>>4)*10 + (temp_time&0x0F);
  181.        
  182.                 cur_time->DateString[0] = cur_time->Year/10 + '0'; //年份
  183.                 cur_time->DateString[1] = cur_time->Year%10 + '0';
  184.                 cur_time->DateString[2] = '_';
  185.                 cur_time->DateString[3] = cur_time->Month/10 + '0'; //月份
  186.                 cur_time->DateString[4] = cur_time->Month%10 + '0';
  187.                 cur_time->DateString[5] = '_';
  188.                 cur_time->DateString[6] = cur_time->Day/10 + '0';
  189.                 cur_time->DateString[7] = cur_time->Day%10 + '0';
  190.                 cur_time->DateString[8] = '_';
  191.                 cur_time->DateString[9]        = cur_time->Week%10+'0';
  192.                 cur_time->DateString[10] = '\0';               

  193.                 cur_time->TimeString[0] = cur_time->Hour/10 + '0'; //時的十位
  194.                 cur_time->TimeString[1] = cur_time->Hour%10 + '0'; //時的各位
  195.                 cur_time->TimeString[2] = ':';
  196.                 cur_time->TimeString[3] = cur_time->Minute/10 + '0';
  197.                 cur_time->TimeString[4] = cur_time->Minute%10 + '0';
  198.                 cur_time->TimeString[5] = ':';
  199.                 cur_time->TimeString[6] = cur_time->Second/10 + '0';
  200.                 cur_time->TimeString[7] = cur_time->Second%10 + '0';
  201.                 cur_time->TimeString[8] = '\0';       
  202. }//void ds1302_get_time(time_struct *cur_time)


  203. /*******************************************************************
  204. *【函 數(shù) 名】:ds1302_set_time                                     *
  205. *【修改日期】:2008年7月5日                                        *
  206. *【文件作用】:鍵控設(shè)置時間                                        *
  207. *------------------------------------------------------------------*
  208. *【備    注】:可能由于按鍵原因,設(shè)置反應(yīng)慢,有待改進              *
  209. *******************************************************************/
  210. void ds1302_set_time(void)
  211. {
  212. // time_struct idata  CTE;
  213. time_struct idata  time;
  214. // time_struct idata old_time;
  215. uint  idata clk_time;
  216. uchar idata time_flag[5];
  217. uint idata timeflag = 1;
  218. // uint idata i=0;
  219. uchar max;

  220. if(key_check(4) == 1)    //調(diào)整時間
  221. {
  222. //  lcd_cmd_w(0x01);
  223. //  lcd_setposition(1,2);
  224. //  lcd_str_w("日歷系統(tǒng)");
  225. //  lcd_setposition(2,0);
  226. //  lcd_str_w("Date: ");
  227. //  lcd_setposition(3,0);
  228. //  lcd_str_w("Time: ");
  229.   lcd_setposition(4,0);
  230.   lcd_str_w("調(diào)整時間模式    ");

  231.   while(1)
  232.   {
  233. //   ds1302_get_time(&CTE);
  234.    ds1302_get_time(&time);

  235.    lcd_setposition(2,3);
  236.    lcd_str_w(time.DateString);
  237.    lcd_setposition(3,3);
  238.    lcd_str_w(time.TimeString);
  239.    lcd_setposition(4,0);
  240.    

  241.    if(timeflag == 1)        //調(diào)整:年
  242.    {
  243.     max = 99;
  244.         clk_time = time.Year;
  245.     lcd_str_w("現(xiàn)在調(diào)整: 年");
  246.     lcd_setposition(2,3);
  247.     lcd_str_w("  ");
  248.     delay(50);
  249.     lcd_setposition(2,3);
  250.     time_flag[0] = clk_time/10 + '0';
  251.     time_flag[1] = clk_time%10 + '0';
  252.     time_flag[2] = '\0';
  253.     lcd_str_w(time_flag);
  254.     delay(50);
  255.    }

  256.    else if(timeflag == 2)//        調(diào)整: 月
  257.    {
  258.     max = 13;
  259.         clk_time = time.Month;
  260.     lcd_str_w("現(xiàn)在調(diào)整: 月");
  261.     lcd_setposition(2,4);
  262.     lcd_str_w("_  ");
  263.     delay(50);
  264.     lcd_setposition(2,4);
  265.     time_flag[0] = '_';
  266.     time_flag[1] = clk_time/10 + '0';
  267.     time_flag[2] = clk_time%10 + '0';
  268.     time_flag[3] = '\0';
  269.     lcd_str_w(time_flag);
  270.     delay(50);
  271.    }

  272.    else if(timeflag == 3)           //調(diào)整: 日
  273.    {
  274.     max = 32;
  275.     clk_time = time.Day;
  276.     lcd_str_w("現(xiàn)在調(diào)整: 日");
  277.     lcd_setposition(2,6);
  278.     lcd_str_w("  ");
  279.     delay(50);
  280.     lcd_setposition(2,6);
  281.     time_flag[0] = clk_time/10 + '0';
  282.     time_flag[1] = clk_time%10 + '0';
  283.     time_flag[2] = '\0';
  284.     lcd_str_w(time_flag);
  285.     delay(50);
  286.    }
  287.    
  288.         else if(timeflag == 7)                 // 調(diào)整: 周
  289.    {
  290.     max = 8;
  291.         clk_time = time.Week;
  292.     lcd_str_w("現(xiàn)在調(diào)整: 周");
  293.     lcd_setposition(2,7);
  294.     lcd_str_w("_ ");
  295.     delay(50);
  296.     lcd_setposition(2,7);
  297.     time_flag[0] ='_';
  298.     time_flag[1] = clk_time%10 + '0';
  299.     time_flag[2] = '\0';
  300.     lcd_str_w(time_flag);
  301.     delay(50);
  302.    }

  303.    else if(timeflag == 4)                 //調(diào)整: 時
  304.    {
  305.         max = 24;
  306.     clk_time = time.Hour;
  307.     lcd_str_w("現(xiàn)在調(diào)整: 時");
  308.     lcd_setposition(3,3);
  309.     lcd_str_w("  ");
  310.     delay(50);
  311.     lcd_setposition(3,3);
  312.     time_flag[0] = clk_time/10 + '0';
  313.     time_flag[1] = clk_time%10 + '0';
  314.     time_flag[2] = '\0';
  315.     lcd_str_w(time_flag);
  316.     delay(50);
  317.    }

  318.    else if(timeflag == 5)  //調(diào)整: 分
  319.    {
  320.     max = 60;
  321.     clk_time = time.Minute;
  322.     lcd_str_w("現(xiàn)在調(diào)整: 分");
  323.     lcd_setposition(3,4);
  324.     lcd_str_w(":  ");
  325.     delay(50);
  326.     lcd_setposition(3,4);
  327.     time_flag[0] = ':';
  328.     time_flag[1] = clk_time/10 + '0';
  329.     time_flag[2] = clk_time%10 + '0';
  330.     time_flag[3] = '\0';
  331.     lcd_str_w(time_flag);
  332.     delay(50);
  333.    }

  334.    else if(timeflag == 6)   //調(diào)整: 秒
  335.    {
  336.     max = 60;
  337.         clk_time = time.Second;
  338.     lcd_str_w("現(xiàn)在調(diào)整: 秒");
  339.     lcd_setposition(3,6);
  340.     lcd_str_w("  ");
  341.     delay(50);
  342.     lcd_setposition(3,6);
  343.     time_flag[0] = clk_time/10 + '0';
  344.     time_flag[1] = clk_time%10 + '0';
  345.     time_flag[2] = '\0';
  346.     lcd_str_w(time_flag);
  347.     delay(50);
  348.    }

  349.    lcd_setposition(4,6);                                   //可以去掉
  350.    time_flag[0]='(';
  351.    time_flag[1]= clk_time/10 + '0';
  352.    time_flag[2]= clk_time%10 + '0';
  353.    time_flag[3]=')';
  354.    time_flag[4]='\0';
  355.    lcd_str_w(time_flag);


  356.    if(key_check(4) == 1)          //切換設(shè)置值
  357.    {
  358.       timeflag = timeflag + 1;
  359.       if(timeflag == 8)
  360.            timeflag = 1;
  361.         goto again;
  362.    }

  363.    if(key_check(3) == 1)          //值加1
  364.    {

  365.     clk_time = clk_time + 1;
  366.         if(clk_time == max)
  367.                 if(timeflag == 2||timeflag == 7||timeflag == 3)
  368.                         clk_time = 1;
  369.                 else
  370.                         clk_time = 0;
  371.                             
  372.        clk_time = (((clk_time/10)<<4) &0xf0) + (((clk_time%10)&0x0f));
  373.           
  374.            ds1302_w_protect(0);          //控制命令,WP=1,寫保護

  375.        if(timeflag == 1)
  376.                       ds1302_w(0x8c,clk_time);          
  377.            else if(timeflag == 7)
  378.             ds1302_w(0x8a,clk_time);
  379.            else if(2 <= timeflag <= 6)
  380.             ds1302_w((0x88-(timeflag-2)*2),clk_time);
  381.                 ds1302_w_protect(1);          //控制命令,WP=1,寫保護
  382.          goto again;
  383.         }

  384.    if(key_check(2) == 1)           //
  385.    {

  386.     if(clk_time != 0)
  387.       clk_time = clk_time - 1;
  388.     clk_time = (((clk_time/10)<<4) &0xf0) + (((clk_time%10)&0x0f));
  389.               ds1302_w_protect(0);          //控制命令,WP=1,寫保護

  390.         if(timeflag == 1)
  391.         ds1302_w(0x8c,clk_time);
  392.        
  393.         else if(timeflag == 7)
  394.              ds1302_w(0x8a,clk_time);
  395.    
  396.         else if(2<=timeflag <= 6)
  397.         ds1302_w((0x88-(timeflag-2)*2),clk_time);
  398.         ds1302_w_protect(1);          //控制命令,WP=1,寫保護
  399.          goto again;
  400.    }

  401. again:

  402.    if(key_check(1) == 1 || key_check(0) == 1)
  403.    {
  404.                 ds1302_initial();
  405.                 return;
  406.    
  407.    }


  408.   }
  409. }
  410. }
  411.          


  412. /*******************************************************************
  413. *【函 數(shù) 名】:call_ds1302                                         *
  414. *【修改日期】:2008年7月4日                                        *
  415. *【文件作用】:供外部調(diào)用,調(diào)用即可啟動DS1302                      *
  416. *------------------------------------------------------------------*
  417. *【備    注】:缺少ds1302_initial和while(1)                        *
  418. *******************************************************************/
  419. void call_ds1302()
  420. {

  421.                 ds1302_get_time(&sys_time);
  422.                 lcd_setposition(2,3);
  423.                 lcd_str_w(sys_time.DateString);
  424.                 lcd_setposition(3,3);
  425.                 lcd_str_w(sys_time.TimeString);
  426.                 ds1302_set_time();                                               
  427. }



  428. #endif
復(fù)制代碼



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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日日夜夜精品 | 性一交一乱一伦视频免费观看 | 久久久一区二区三区 | 麻豆成人在线视频 | 日韩中文字幕在线播放 | 毛片软件| 在线观看特色大片免费网站 | 我要看免费一级毛片 | 欧美福利| 999热精品| 91精品国产91久久久久游泳池 | 国产在线一区二区 | 国产精品精品3d动漫 | av日日操| 午夜爱爱网 | 成人精品久久久 | 欧美一区二区三区在线播放 | 拍戏被cao翻了h承欢 | 欧美激情久久久 | 国产区高清 | 久久人人爽人人爽 | 国产日韩欧美在线一区 | 精久久 | 国产亚洲精品久久19p | 黄网站在线播放 | 欧美激情视频一区二区三区在线播放 | a级片在线 | 成人在线免费av | 国产真实乱对白精彩久久小说 | 色视频网站在线观看 | 999热在线视频 | 中文字幕在线三区 | 美女精品一区 | 91久操网| 国产精品免费一区二区三区四区 | 日韩1区| 精久久久 | 中文字幕日韩一区 | 精品少妇一区二区三区在线播放 | 中文字幕91 | 欧美a区|