欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

ds1302時鐘怎樣實現斷電繼續走?

[復制鏈接]
跳轉到指定樓層
樓主
ID:263129 發表于 2018-1-8 13:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是我的程序,怎樣實現斷電繼續走?ds1302的時鐘芯片,有備用電源。

  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit rs=P2^5;          //定義1602液晶rs端
  5. sbit rw=P2^6;          //定義1602液晶rw端
  6. sbit lcden=P2^7;      //定義1602液晶lcden端
  7. sbit s2=P3^2;          //定義功能鍵
  8. sbit s3=P3^3;          //定義增大鍵
  9. sbit s4=P3^4;          //定義減小鍵
  10. uchar count,s1num;
  11. char miao,shi,fen;
  12. uchar code table[]="  2018-1-7MON ";       //定義初始上電時液晶默認顯示狀態
  13. uchar code table1[]="    00:00:00 ";
  14. //Read_BursRam(&Read_Flag,1);
  15. //if(Read_Flag!= 1)
  16. //{
  17. // Write_Data(0x90,0xaa);
  18. // Write_BurstClock(Cur_Time);
  19. // Write_BurstRam(&Clock_Flag,1);
  20. // Write_Data(0x8e,0x80);
  21. //}
  22. void delay(uint z)                        //延時函數
  23. {
  24.     uint x,y;
  25.     for(x=z;x>0;x--);
  26.         for(y=110;y>0;y--);
  27. }

  28. void write_com(uchar com)        //液晶寫命令函數
  29. {
  30.     rs=0;
  31.     lcden=0;
  32.     P0=com;
  33.     delay(20);
  34.     lcden=1;
  35.     delay(20);
  36.     lcden=0;   
  37. }

  38. void write_date(uchar date)           //液晶寫數據函數
  39. {
  40.     rs=1;
  41.     lcden=0;
  42.     P0=date;
  43.     delay(20);
  44.     lcden=1;
  45.     delay(20);
  46.     lcden=0;   
  47. }

  48. void init()                   //初始化函數
  49. {

  50.     uchar num;
  51.     lcden=0;      
  52.     rw=0;
  53.     write_com(0x38);             //初始化1602液晶
  54.     write_com(0x0c);
  55.     write_com(0x06);
  56.     write_com(0x01);
  57.     write_com(0x80);             //設置顯示初始坐標
  58.     for(num=0;num<15;num++)         
  59.         {
  60.             write_date(table[num]);
  61.             delay(20);
  62.         }
  63.     write_com(0x80+0x40);
  64.     for(num=0;num<12;num++)
  65.         {
  66.             write_date(table1[num]);
  67.             delay(20);
  68.         }
  69.     TMOD=0x01;            //設置定時器0工作模式1
  70.     TH0=(65536-50000)/256;         //定時器裝初值
  71.     TL0=(65536-50000)%256;
  72.     EA=1;                         //開總中斷
  73.     ET0=1;                        //開定時器0中斷
  74.     TR0=1;                        //啟動定時器0
  75. }

  76. void write_sfm(uchar add,uchar date)
  77. {
  78.     uchar shi,ge;
  79.     shi=date/10;
  80.     ge=date%10;
  81.     write_com(0x80+0x40+add);
  82.     write_date(0x30+shi);
  83.     write_date(0x30+ge);
  84. }

  85. void keyscan()          //按鍵掃描函數
  86. {
  87.     if(s2==0)   
  88.     {
  89.         delay(20);
  90.         if(s2==0)            //確認功能鍵被按下
  91.         {   
  92.            s1num++;        //功能鍵按下次數記錄
  93.             while(!s2);        //確認釋放
  94.             if(s1num==1)    //第一次被按下時
  95.             {
  96.                 TR0=0;        //關閉定時器
  97.                 write_com(0x80+0x40+10);      //功能鍵作用在秒
  98.                 write_com(0x0f);              //光標閃爍
  99.             }
  100.     }
  101.             if(s1num==2)             //第二次被按下時在分
  102.             {
  103.                 write_com(0x80+0x40+7);
  104.             }
  105.             if(s1num==3)              //第三次被按下時在時
  106.             {
  107.                 write_com(0x80+0x40+4);
  108.             }
  109.             if(s1num==4)              //第四次被按下,清零
  110.             {
  111.                 s1num=0;
  112.                 write_com(0x0c);
  113.                 TR0=1;                 //啟動定時器時鐘開始走
  114.             }

  115.                
  116.         }
  117.         if(s1num!=0)                  //當功能鍵被按下后增大鍵減小鍵才可以發揮作用
  118.         {
  119.             if(s3==0)
  120.             {
  121.                 delay(20);
  122.                 if(s3==0)              //增大鍵被按下
  123.                 {
  124.                     while(!s2);          //按鍵釋放
  125.                     if(s1num==1)      //若功能鍵第一次被按下
  126.                     {
  127.                         miao++;           //秒加一
  128.                         if(miao==60)   //秒滿60后清零
  129.                             miao=0;
  130.                         write_sfm(10,miao);      //每調節一次液晶顯示一次
  131.                         write_com(0x80+0x40+10);       //顯示位置重新回到調節處
  132.                         
  133.                         
  134.                     }
  135.                     if(s1num==2)         
  136.                     {
  137.                         fen++;
  138.                         if(fen==60)
  139.                             fen=0;
  140.                         write_sfm(7,fen);
  141.                         write_com(0x80+0x40+7);
  142.                     }
  143.                     if(s1num==3)
  144.                     {
  145.                         shi++;
  146.                         if(shi==24)
  147.                             shi=0;
  148.                         write_sfm(4,shi);
  149.                         write_com(0x80+0x40+4);
  150.                     }
  151.                 }
  152.             }
  153.             if(s4==0)
  154.             {
  155.                 delay(20);
  156.                 if(s4==0)
  157.                 {
  158.                     while(!s3);
  159.                     if(s1num==1)
  160.                     {
  161.                         miao--;              //調整秒減一
  162.                         if(miao==-1)      //減到負數則重新設置為59
  163.                             miao=59;
  164.                         write_sfm(10,miao);
  165.                         write_com(0x80+0x40+10);
  166.                     }
  167.                     if(s1num==2)
  168.                     {
  169.                         fen--;
  170.                         if(fen==-1)
  171.                             fen=59;
  172.                         write_sfm(7,fen);
  173.                         write_com(0x80+0x40+7);
  174.                     }
  175.                     if(s1num==3)
  176.                     {
  177.                         shi--;
  178.                         if(shi==-1)
  179.                             shi=23;
  180.                         write_sfm(4,shi);
  181.                         write_com(0x80+0x40+4);
  182.                     }
  183.                 }
  184.             }
  185.         }
  186. }
  187. void main()
  188. {
  189. //    Ds1302Init();
  190.     init();
  191.     while(1)
  192.     {
  193.         keyscan();
  194.         
  195.     }
  196.    }

  197. void timer0() interrupt 1        //定時器0中斷服務程序
  198. {
  199.     TH0=(65536-50000)/256;        //再次裝定時器初值
  200.     TL0=(65536-50000)%256;
  201.     count++;                   //中斷次數累加
  202. if(count==18)
  203.         {
  204.             count=0;
  205.             miao++;
  206.             if(miao==60)
  207.             {
  208.                 miao=0;
  209.                 fen++;
  210.                 if(fen==60)
  211.                 {
  212.                     fen=0;
  213.                     shi++;
  214.                     if(shi==24)
  215.                     {
  216.                         shi=0;
  217.                     }
  218.                     write_sfm(4,shi);
  219.                 }
  220.                 write_sfm(7,fen);
  221.             }
  222.             write_sfm(10,miao);
  223.             
  224.         }   
  225. }
復制代碼


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

使用道具 舉報

沙發
ID:97438 發表于 2018-1-8 14:09 | 只看該作者
你這個程序根本就沒看到DS1302的影子額~DS1302有電池供電的話,本來就是會斷電走時的。你單片機只讀它別寫它,你試試。
回復

使用道具 舉報

板凳
ID:7485 發表于 2018-1-8 15:31 | 只看該作者
如果有時鐘芯片,有后備電池,接法正確,斷電以后是可以正常走時的。只是一般不讓單片機工作不讓它顯示,上電以后單片機工作才正常顯示。除非你有很大的后備電池。
回復

使用道具 舉報

地板
ID:273264 發表于 2018-1-8 15:54 | 只看該作者
代碼是不是有誤?
回復

使用道具 舉報

5#
ID:273285 發表于 2018-1-8 16:01 | 只看該作者
時鐘芯片本身如果配有電池的話是一直繼續走的哦,跟單片機本身與他的操作沒有關系。
如果沒有后備電池的話,那么斷電了就沒法走了。
回復

使用道具 舉報

6#
ID:263129 發表于 2018-1-8 17:03 | 只看該作者
ahshmj 發表于 2018-1-8 15:31
如果有時鐘芯片,有后備電池,接法正確,斷電以后是可以正常走時的。只是一般不讓單片機工作不讓它顯示,上 ...

我有后備電池
回復

使用道具 舉報

7#
ID:263129 發表于 2018-1-8 17:04 | 只看該作者
6457321321 發表于 2018-1-8 15:54
代碼是不是有誤?

我也想知道有沒有錯
回復

使用道具 舉報

8#
ID:263129 發表于 2018-1-8 17:06 | 只看該作者
luoluoluo136 發表于 2018-1-8 14:09
你這個程序根本就沒看到DS1302的影子額~DS1302有電池供電的話,本來就是會斷電走時的。你單片機只讀它別寫 ...

我不懂什么意思,我就是不知道怎么吧ds1302加進去
回復

使用道具 舉報

9#
無效樓層,該帖已經被刪除
10#
無效樓層,該帖已經被刪除
11#
ID:263129 發表于 2018-1-9 14:16 | 只看該作者
麻煩哪位大神幫我寫一下這個程序
回復

使用道具 舉報

12#
ID:280151 發表于 2018-2-4 20:52 | 只看該作者
厲害 膜拜大神  感謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表