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

標題: ds1302時鐘怎樣實現斷電繼續走? [打印本頁]

作者: 18856764172    時間: 2018-1-8 13:31
標題: ds1302時鐘怎樣實現斷電繼續走?
這是我的程序,怎樣實現斷電繼續走?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. }
復制代碼



作者: luoluoluo136    時間: 2018-1-8 14:09
你這個程序根本就沒看到DS1302的影子額~DS1302有電池供電的話,本來就是會斷電走時的。你單片機只讀它別寫它,你試試。
作者: ahshmj    時間: 2018-1-8 15:31
如果有時鐘芯片,有后備電池,接法正確,斷電以后是可以正常走時的。只是一般不讓單片機工作不讓它顯示,上電以后單片機工作才正常顯示。除非你有很大的后備電池。
作者: 6457321321    時間: 2018-1-8 15:54
代碼是不是有誤?
作者: candura    時間: 2018-1-8 16:01
時鐘芯片本身如果配有電池的話是一直繼續走的哦,跟單片機本身與他的操作沒有關系。
如果沒有后備電池的話,那么斷電了就沒法走了。
作者: 18856764172    時間: 2018-1-8 17:03
ahshmj 發表于 2018-1-8 15:31
如果有時鐘芯片,有后備電池,接法正確,斷電以后是可以正常走時的。只是一般不讓單片機工作不讓它顯示,上 ...

我有后備電池

作者: 18856764172    時間: 2018-1-8 17:04
6457321321 發表于 2018-1-8 15:54
代碼是不是有誤?

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

我不懂什么意思,我就是不知道怎么吧ds1302加進去
作者: 18856764172    時間: 2018-1-9 14:16
麻煩哪位大神幫我寫一下這個程序
作者: morning。。。    時間: 2018-2-4 20:52
厲害 膜拜大神  感謝




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产一区91精品张津瑜 | 一区二区三区久久 | 毛片综合| 欧美人妇做爰xxxⅹ性高电影 | 日韩电影一区 | 天天摸天天干 | 美女黄色在线观看 | 亚洲精品免费观看 | 国产成人免费视频 | 国产精品波多野结衣 | 视频一区二区三区四区五区 | 免费v片| 小h片免费观看久久久久 | 日韩精品欧美精品 | 免费在线播放黄色 | 福利电影在线 | 久久亚洲一区 | 国产精品欧美精品日韩精品 | 国产黄色大片网站 | 精品视频免费 | 欧美爱爱视频 | 午夜影院在线观看 | 精品久久香蕉国产线看观看亚洲 | 国产午夜精品一区二区三区在线观看 | 国产精品亚洲一区二区三区在线观看 | 中文字幕亚洲一区二区三区 | 91亚洲国产成人精品一区二三 | 在线午夜 | 天天看天天操 | 日日操夜夜干 | 亚洲精品www| 欧美在线a| 中文字幕av在线播放 | 懂色av蜜桃av | 99综合| 美日韩精品| 国产aa| 国产精品亚洲一区二区三区在线 | 羞羞视频在线免费 | 欧美中文字幕在线 | 欧美日韩高清一区 |