极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14769|回复: 5

DS1307如何实现掉电自动走时

[复制链接]
发表于 2014-9-30 20:45:10 | 显示全部楼层 |阅读模式
用ds1307做了个小钟,可每次断电就成一开始设定的时间了,如何实现让它自己走时啊?

  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>
  3. #include <WProgram.h>
  4. #include <Wire.h>
  5. #include <DS1307.h>
  6. LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
  7. int rtc[7];
  8. int ledPin =  13;
  9. void setup()
  10. {
  11.   lcd.init();                      // initialize the lcd

  12.   // Print a message to the LCD.
  13.   DDRC|=_BV(2) |_BV(3);  // POWER:Vcc Gnd
  14.   PORTC |=_BV(3);  // VCC PINC3
  15.   pinMode(ledPin, OUTPUT);  
  16.   Serial.begin(9600);

  17.   RTC.stop();
  18.   RTC.set(DS1307_SEC,1);
  19.   RTC.set(DS1307_MIN,16);
  20.   RTC.set(DS1307_HR,20);
  21.   RTC.set(DS1307_DOW,2);
  22.   RTC.set(DS1307_DATE,30);
  23.   RTC.set(DS1307_MTH,9);
  24.   RTC.set(DS1307_YR,14);
  25.   RTC.start();
  26.   lcd.backlight();

  27. }

  28. void loop()
  29. {
  30.   RTC.get(rtc,true);

  31.   for(int i=0; i<7; i++)
  32.   {
  33.     Serial.print(rtc[i]);
  34.     Serial.print(" ");
  35.      lcd.setCursor(1,0);
  36.      lcd.print(rtc[6]);
  37.      lcd.setCursor(5, 0);
  38.      lcd.print("/");
  39.      lcd.setCursor(6, 0);
  40.      lcd.print(rtc[5]);
  41.    
  42.      lcd.print("/");
  43.   
  44.      lcd.print(rtc[4]);

  45.      lcd.setCursor(1, 1);
  46.      lcd.print(rtc[2]);
  47.      lcd.setCursor(3, 1);
  48.      lcd.print(":");
  49.      lcd.setCursor(4, 1);
  50.      lcd.print(rtc[1]);
  51.      lcd.setCursor(6, 1);
  52.      lcd.print(":");
  53.      lcd.setCursor(7, 1);
  54.      lcd.print(rtc[0]);
  55.   }
  56.   Serial.println();

  57.         //digitalWrite(ledPin, HIGH);
  58.         delay(500);
  59.         //digitalWrite(ledPin, LOW);
  60.         delay(500);

  61. }
复制代码
回复

使用道具 举报

发表于 2014-9-30 21:27:38 | 显示全部楼层
把设置分成2个程序一个是MAIN,一个专门用来设置DS1307时间,断电后认为DS1307有后备电源,时间也一直在走,在上电后因为没下面的这些程序,时间就不会从新更新了。

void setup()
{
  lcd.init();                      // initialize the lcd

  // Print a message to the LCD.
  DDRC|=_BV(2) |_BV(3);  // POWER:Vcc Gnd
  PORTC |=_BV(3);  // VCC PINC3
  pinMode(ledPin, OUTPUT);  
  Serial.begin(9600);

  RTC.stop();
  RTC.set(DS1307_SEC,1);
  RTC.set(DS1307_MIN,16);
  RTC.set(DS1307_HR,20);
  RTC.set(DS1307_DOW,2);
  RTC.set(DS1307_DATE,30);
  RTC.set(DS1307_MTH,9);
  RTC.set(DS1307_YR,14);
  RTC.start();
  lcd.backlight();

}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-1 12:04:44 | 显示全部楼层
504835618 发表于 2014-9-30 21:27
把设置分成2个程序一个是MAIN,一个专门用来设置DS1307时间,断电后认为DS1307有后备电源,时间也一直在走, ...

谢谢谢谢,意识到了
回复 支持 反对

使用道具 举报

发表于 2014-10-1 12:05:01 | 显示全部楼层
吧setup里的设置时间的代码干掉就行了。。。
回复 支持 反对

使用道具 举报

发表于 2014-10-1 17:15:43 | 显示全部楼层
加个纽扣电池作为备用电源
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-1 21:21:24 | 显示全部楼层
shihaipeng04 发表于 2014-10-1 12:05
吧setup里的设置时间的代码干掉就行了。。。

已经解决了,谢谢大家
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 15:20 , Processed in 0.035332 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表