singz 发表于 2017-10-12 09:37:31

galaxy 发表于 2017-10-11 13:13
0022的 IDE 組譯不過,
1.0 的 IDE 組譯ok
謝謝您,辛苦了~~讚


:):):):):):):):)

off-ice 发表于 2017-12-5 18:39:08

论坛里有朋友写了一个电波钟的解码程序。http://www.geek-workshop.com/thread-7797-1-1.html
可以加入电波校时,这样就可以减少外部的按键或者只添加一个手动校时按键。

off-ice 发表于 2017-12-5 20:00:43

suoma 发表于 2017-3-9 13:44
800行啊,我觉得这些功能实现100行就行了

你使用DS1302制作的时钟完成了吗?能写个详细的帖子吗?小白向你学习一下。谢谢了。

singz 发表于 2017-12-11 09:17:58

off-ice 发表于 2017-12-5 18:39
论坛里有朋友写了一个电波钟的解码程序。http://www.geek-workshop.com/thread-7797-1-1.html
可以加入电 ...

电波的那个挺厉害,这还有个网络校时的:

http://blog.csdn.net/wiznet2012/article/details/38274587

off-ice 发表于 2017-12-11 18:41:42

singz 发表于 2017-12-11 09:17
电波的那个挺厉害,这还有个网络校时的:

http://blog.csdn.net/wiznet2012/article/details/38274587

想自己做个时钟,手边有DS1302和1602显示屏。看到电波功能就心动了。但是本人是个小白,不知道从何入手。

singz 发表于 2017-12-12 11:11:41

off-ice 发表于 2017-12-11 18:41
想自己做个时钟,手边有DS1302和1602显示屏。看到电波功能就心动了。但是本人是个小白,不知道从何入手。

可以先搭个串口手动校时的普通钟,再学习网络自动校时钟,条件合适的话可以试试电波钟

off-ice 发表于 2017-12-12 18:23:06

singz 发表于 2017-12-12 11:11
可以先搭个串口手动校时的普通钟,再学习网络自动校时钟,条件合适的话可以试试电波钟

好的,慢慢学。有什么问题还要请教你

taoqi803 发表于 2018-3-26 19:02:33

大神第一个闹钟有用 连的led 可以亮
我尝试增加第二闹钟但是第二个闹钟貌似没用   LCD 可以显示 也可以设置但是第二个闹钟 LED 没反应#include <Wire.h>
#include <DS3231.h>
#include <LiquidCrystal.h>

DS3231 Clock;
bool h12, PM, Century=false;
byte year, month, date, DoW, hour, minute, second;
bool A1Dy, A1h12, A1pm, A2Dy, A2h12, A2pm;
byte A1Day, A1Hour, A1Minute, A1Second, ABits, A2Day, A2Hour, A2Minute, A2Second;

const byte Set=2;
const byte New=3;

byte button = {Set, New};
LiquidCrystal lcd(A0, A1, A2, A3, 7, 8);

void setup()
{
Wire.begin();
lcd.begin(16, 2);

pinMode(Set,INPUT);// button for set
pinMode(New,INPUT);

pinMode(4,OUTPUT); // output
}

void loop()
{
unsigned long Rt=millis()%1000;
if(Rt<500)//0.5s
    {
    Pritime();
    }
SetTime();
Alarm1();
Alarm2();
}

/* ~~~~~~~~~~~~~~~~~~~~~~ Time display ~~~~~~~~~~~~~~~~~~~~~~~ */
void Pritime()
{
int second,minute,hour,date,month,year,dow,temperature;
second=Clock.getSecond();
minute=Clock.getMinute();
hour=Clock.getHour(h12, PM);
date=Clock.getDate();
month=Clock.getMonth(Century);
year=Clock.getYear();
dow=Clock.getDoW();

temperature=Clock.getTemperature();

lcd.setCursor(0, 0);
lcd.print("20");// 20 Century
    if (year>=10)// print year
      {
      lcd.print(year,DEC);
      }
      else
      {
      lcd.print("0");
      lcd.print(year,DEC);
      }
lcd.print('-');

lcd.setCursor(5, 0);
    if (month>=10)// print month
      {
      lcd.print(month,DEC);
      }
      else
      {
      lcd.print("0");
      lcd.print(month,DEC);
      }
lcd.print('-');

lcd.setCursor(8, 0);
    if (date>=10)// print data
      {
      lcd.print(date,DEC);
      }
      else
      {
      lcd.print("0");
      lcd.print(date,DEC);
      }

lcd.setCursor(11, 0);
    switch (dow)// week
      {
      case 1:// dow = 1
      lcd.print("Mon");
      break;
      case 2:// dow =2
      lcd.print("Tue");
      break;
      case 3:
      lcd.print("Wed");
      break;
      case 4:
      lcd.print("Thu");
      break;
      case 5:
      lcd.print("Fri");
      break;
      case 6:
      lcd.print("Sat");
      break;
      case 7:
      lcd.print("Sun");
      break;
      }

lcd.setCursor(0, 1);
    if (hour>=10)// print hour
      {
      lcd.print(hour,DEC);
      }
      else
      {
      lcd.print("0");
      lcd.print(hour,DEC);
      }
lcd.print(':');

lcd.setCursor(3, 1);
    if (minute>=10)// print minute
      {
      lcd.print(minute,DEC);
      }
      else
      {
      lcd.print("0");
      lcd.print(minute,DEC);
      }
lcd.print(':');

lcd.setCursor(6, 1);
    if (second>=10)// print second
      {
      lcd.print(second,DEC);
      }
      else
      {
      lcd.print("0");
      lcd.print(second,DEC);
      }

lcd.setCursor(9, 1);
if (Clock.checkAlarmEnabled(1))// alarm enable
    {
    lcd.write("on");
    }
    else
    {
    lcd.print(' ');
    }

lcd.setCursor(12, 1);
lcd.print(temperature);// show temperature
lcd.write(0xdf);// symbol
lcd.print("C");
}

/* ~~~~~~~~~~~~~~~~~~~~~~Display set Data Week Time ~~~~~~~~~~~~~~~~~~~~~~~ */
void PritimeSet(byte syear,byte smonth,byte sdate,byte sdow,byte shour,byte sminute,byte ssecond)
{
lcd.setCursor(0, 0);
lcd.print("20");// 20 Century
    if (syear>=10)// print year
      {
      lcd.print(syear,DEC);
      }
      else
      {
      lcd.print("0");
      lcd.print(syear,DEC);
      }
lcd.print('-');

lcd.setCursor(5, 0);
    if (smonth>=10)// print month
      {
      lcd.print(smonth,DEC);
      }
      else
      {
      lcd.print("0");
      lcd.print(smonth,DEC);
      }
lcd.print('-');

lcd.setCursor(8, 0);
    if (sdate>=10)// print date
      {
      lcd.print(sdate,DEC);
      }
      else
      {
      lcd.print("0");
      lcd.print(sdate,DEC);
      }

lcd.setCursor(11, 0);
    switch (sdow)// print week
      {
      case 1:// dow = 1
      lcd.print("Mon");
      break;
      case 2:// dow = 2
      lcd.print("Tue");
      break;
      case 3:
      lcd.print("Wed");
      break;
      case 4:
      lcd.print("Thu");
      break;
      case 5:
      lcd.print("Fri");
      break;
      case 6:
      lcd.print("Sat");
      break;
      case 7:
      lcd.print("Sun");
      break;
      }

lcd.setCursor(0, 1);
    if (shour>=10)// print hour
      {
      lcd.print(shour,DEC);
      }
      else
      {
      lcd.print("0");
      lcd.print(shour,DEC);
      }
lcd.print(':');

lcd.setCursor(3, 1);
    if (sminute>=10)// print minute
      {
      lcd.print(sminute,DEC);
      }
      else
      {
      lcd.print("0");
      lcd.print(sminute,DEC);
      }
lcd.print(':');

lcd.setCursor(6, 1);
    if (ssecond>=10)// print second
      {
      lcd.print(ssecond,DEC);
      }
      else
      {
      lcd.print("0");
      lcd.print(ssecond,DEC);
      }
}


/* ~~~~~~~~~~~~~~~~~~~~~~ flash set location ~~~~~~~~~~~~~~~~~~~~~~~ */
void TicSet(byte a,byte b)
{
lcd.setCursor(a,b);
lcd.print("");
}


/* ~~~~~~~~~~~~~~~~~~~~~~ display alarm1 ~~~~~~~~~~~~~~~~~~~~~~~ */
void PriA1()
{
lcd.setCursor(0, 0);
lcd.print("Alarm1 ");
if (Clock.checkAlarmEnabled(1))// alarm status
    {
    lcd.print("On");
    }
    else
    {
    lcd.print("Off");
    }

Clock.getA1Time(A1Day, A1Hour, A1Minute, A1Second, ABits, A1Dy, A1h12, A1pm);

lcd.setCursor(0, 1); //second line on lcd
if (A1Hour>=10)// print hour
    {
    lcd.print(A1Hour,DEC);
    }
    else
    {
    lcd.print("0");
    lcd.print(A1Hour,DEC);
    }
lcd.print(':');

lcd.setCursor(3, 1);
if (A1Minute>=10)//print minute
    {
    lcd.print(A1Minute,DEC);
    }
    else
    {
    lcd.print("0");
    lcd.print(A1Minute,DEC);
    }
}
/*~~~~~~~~~~~~~~~~~~~~~~~display alarm2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
void PriA2()
{
lcd.setCursor(0, 0);
lcd.print("Alarm2 ");
if (Clock.checkAlarmEnabled(2))// alarm status
    {
    lcd.print("On");
    }
    else
    {
    lcd.print("Off");
    }

Clock.getA2Time(A2Day, A2Hour, A2Minute, ABits, A2Dy, A2h12, A2pm);

lcd.setCursor(0, 1); //second line on lcd
if (A2Hour>=10)// print hour
    {
    lcd.print(A2Hour,DEC);
    }
    else
    {
    lcd.print("0");
    lcd.print(A2Hour,DEC);
    }
lcd.print(':');

lcd.setCursor(3, 1);
if (A2Minute>=10)//print minute
    {
    lcd.print(A2Minute,DEC);
    }
    else
    {
    lcd.print("0");
    lcd.print(A2Minute,DEC);
    }
}

/* ~~~~~~~~~~~~~~~~~~~~~~ switch debounce~~~~~~~~~~~~~~~~~~~~~~~ */
unsigned long LastP;
boolean buttonPress(byte button)
{
if(digitalRead(button)==HIGH) // button press?
    {
    unsigned long NowP = millis();
    unsigned long buttonChange=NowP-LastP;// debounce function
    if (buttonChange>500)
      {
      LastP = millis();
      return true;
      }
      else
      {
      return false;
      }
    }
    else
    {
    return false;
    }
}

/* ~~~~~~~~~~~~~~~~~~~~~~ set time ~~~~~~~~~~~~~~~~~~~~~~~ */
void SetTime()
{
bool h12, PM, Century=false;
byte syear, smonth, sdate, sdow, shour, sminute, ssecond;

if(buttonPress(Set))
    {
    lcd.clear();
    delay(200);
    Clock.getTime(syear, smonth, sdate, sdow, shour, sminute, ssecond);
    bool SetY=true;

/* ~~~~~~~~~~~~~~~~~~~~~~ Enter year set ~~~~~~~~~~~~~~~~~~~~~~~ */
while(SetY)
    {
    unsigned long Rt=millis()%1000;
    if(Rt<500)// flash every 0.5s
      {
      PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
      }
      else
      {
      lcd.setCursor(0,0);
      lcd.print("    ");
      }

/* ~~~~~~~~~~~~~~~~~~~~~~~~~ set year ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
      if(buttonPress(New))
      {
      syear=syear+1;
      if(syear>50)
         {
         syear = 0;
         }
      }

/* ~~~~~~~~~~~~~~~~~~~~~~ Enter month set ~~~~~~~~~~~~~~~~~~~~~ */
if(buttonPress(Set))
    {
    lcd.clear();
    bool SetMon=true;
    while(SetMon)
      {
      unsigned long Rt=millis()%1000;
      if(Rt<500)
      {
      PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
      }
      else
      {
      TicSet(5,0);
      }
      
/* ~~~~~~~~~~~~~~~~~~~~~~~~~ set month ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
      if(buttonPress(New))
      {
      smonth=smonth+1;
      if(smonth>12)
          {
          smonth=1;
          }
      }

/* ~~~~~~~~~~~~~~~~~~~~~~ Enter data set ~~~~~~~~~~~~~~~~~~~~~ */
if(buttonPress(Set))
    {
    lcd.clear();
    bool SetD=true;
    while(SetD)
      {
      unsigned long Rt=millis()%1000;
      if(Rt<500)
      {
      PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
      }
      else
      {
      TicSet(8,0);
      }

/* ~~~~~~~~~~~~~~~~~~~~~~~~~ set data ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
      if(buttonPress(New))
      {
      sdate=sdate+1;
      if(sdate>31)
          {
          sdate=1;
          }
      }
                  
/* ~~~~~~~~~~~~~~~~~~~~~~ Enter week set ~~~~~~~~~~~~~~~~~~~~~ */
if(buttonPress(Set))
    {
    lcd.clear();
    bool SetW=true;
    while(SetW)
      {
      unsigned long Rt=millis()%1000;
      if(Rt<500)
      {
      PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
      }
      else
      {
      lcd.setCursor(11,0);
      lcd.print("   ");
      }

/* ~~~~~~~~~~~~~~~~~~~~~~~~~ set week ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
      if(buttonPress(New))
      {
      sdow=sdow+1;
      if(sdow>7)
          {
          sdow=1;
          }
      }

/* ~~~~~~~~~~~~~~~~~~~~~~ Enter hour set ~~~~~~~~~~~~~~~~~~~~~ */
if(buttonPress(Set))
    {
    lcd.clear();
    long NewP=0;
    bool SetH=true;
    while(SetH)
      {
      unsigned long Rt=millis()%1000;
      if(Rt<500)
      {
      PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
      }
      else
      {
      TicSet(0,1);
      }

/* ~~~~~~~~~~~~~~~~~~~~~~~~~ set hour ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
      if(buttonPress(New))
      {
      NewP=NewP+1;
      shour=shour+1;
      if(shour>23)
          {
          shour=0;
          }
      }

/* ~~~~~~~~~~~~~~~~~~~~~~ Enter minute set ~~~~~~~~~~~~~~~~~~~~~ */
if(buttonPress(Set))
    {
    lcd.clear();
    bool SetMin=true;
    while(SetMin)
      {
      unsigned long Rt=millis()%1000;
      if(Rt<500)
      {
      PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
      }
      else
      {
      TicSet(3,1);
      }

/* ~~~~~~~~~~~~~~~~~~~~~~~~~ set minute ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
      if(buttonPress(New))
      {
      NewP=NewP+1;
      sminute=sminute+1;
      if(sminute>59)
          {
          sminute=0;
          }
      }

/* ~~~~~~~~~~~~~~~~~~~~~~ Enter second set ~~~~~~~~~~~~~~~~~~~~~ */
if(buttonPress(Set))
    {
    lcd.clear();
    bool SetS=true;
    while(SetS)
      {
      unsigned long Rt=millis()%1000;
      if(Rt<500)
      {
      PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
      }
      else
      {
      TicSet(6,1);
      }

/* ~~~~~~~~~~~~~~~~~~~~~~~~~ set second ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
      if(buttonPress(New))
      {
      NewP=NewP+1;
      ssecond=ssecond+1;
      if(ssecond>59)
          {
          ssecond=0;
          }
      }

/* ~~~~~~~~~~~~~~~~~~~~~~~~~ exit and save ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
if(buttonPress(Set))
    {
    Clock.setYear(syear);
    Clock.setMonth(smonth);
    Clock.setDate(sdate);
    Clock.setDoW(sdow);
    if (NewP>0)
      {
      Clock.setHour(shour);
      Clock.setMinute(sminute);
      Clock.setSecond(ssecond);
      }

/* ~~~~~~~~~~~~~~~~~~~~~~ Enter alarm1 hour set ~~~~~~~~~~~~~~~~~~~~~~~ */
    lcd.clear();
    delay(200);

    bool SetA1H=true;
    while(SetA1H)
      {
      unsigned long RA1=millis()%1000;
      if(RA1<500)// flash every 0.5s
      {
      PriA1();
      }
      else
      {
      TicSet(0,1);
      }

/* ~~~~~~~~~~~~~~~~~~~~~~~~~ set hour ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
    if(buttonPress(New))
      {
      Clock.getA1Time(A1Day, A1Hour, A1Minute, A1Second, ABits, A1Dy, A1h12, A1pm);
      A1Hour=A1Hour+1;
      if(A1Hour<24)
      {
      Clock.setA1Time(A1Day, A1Hour, A1Minute, A1Second, B1000, A1Dy, false, A1pm);// set alarm for every day
      }
      else
      {
      A1Hour=0;
      Clock.setA1Time(A1Day, A1Hour, A1Minute, A1Second, B1000, A1Dy, false, A1pm);
      }
      }

/* ~~~~~~~~~~~~~~~~~~~~~~ Enter alarm1 minute set ~~~~~~~~~~~~~~~~~~~~~ */
    if(buttonPress(Set))
      {
      lcd.clear();
      bool SetA1M=true;
      while(SetA1M)
      {
      unsigned long RA1=millis()%1000;
      if(RA1<500)
          {
          PriA1();
          }
          else
          {
          TicSet(3,1);
          }

/* ~~~~~~~~~~~~~~~~~~~~~~~~~ set minute ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
      if(buttonPress(New))
      {
      Clock.getA1Time(A1Day, A1Hour, A1Minute, A1Second, ABits, A1Dy, A1h12, A1pm);
      A1Minute=A1Minute+1;
      if(A1Minute<60)
          {
          Clock.setA1Time(A1Day, A1Hour, A1Minute, A1Second, B1000, A1Dy, false, A1pm);
          }
          else
          {
          A1Minute=0;
          Clock.setA1Time(A1Day, A1Hour, A1Minute, A1Second, B1000, A1Dy, false, A1pm);
          }
      }

/* ~~~~~~~~~~~~~~~~~~~~~~ Alarm1 on or off ~~~~~~~~~~~~~~~~~~~~~ */
      if(buttonPress(Set))
      {
      lcd.clear();
      bool SetA1R=true;
      while(SetA1R)
          {
          unsigned long RA1=millis()%1000;
          if(RA1<500)
            {
            lcd.setCursor(0, 0);
            PriA1();
            }
            else
            {
            lcd.setCursor(7, 0);
            lcd.print("   ");
            }

/* ~~~~~~~~~~~~~~~~~~~~~~~~~ set alarm on or off ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
          if(buttonPress(New))
            {
            digitalWrite(New,LOW);
            
            if(Clock.checkAlarmEnabled(1))
            {
            Clock.turnOffAlarm(1);
            }
            else
            {
            Clock.turnOnAlarm(1);
            }
            }

/* ~~~~~~~~~~~~~~~~~~~~~~ Enter alarm2 hour set ~~~~~~~~~~~~~~~~~~~~~~~ */
if(buttonPress(Set))
    {
    lcd.clear();
    delay(200);

    bool SetA2H=true;
    while(SetA2H)
      {
      unsigned long RA2=millis()%1000;
      if(RA2<500)// flash every 0.5s
      {
      PriA2();
      }
      else
      {
      TicSet(0,1);
      }

/* ~~~~~~~~~~~~~~~~~~~~~~~~~ set hour ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
    if(buttonPress(New))
      {
      Clock.getA2Time(A2Day, A2Hour, A2Minute, ABits, A2Dy, A2h12, A2pm);
      A2Hour=A2Hour+1;
      if(A2Hour<24)
      {
      Clock.setA2Time(A2Day, A2Hour, A2Minute, B100, A2Dy, false, A2pm);// set alarm for every day
      }
      else
      {
      A2Hour=0;
      Clock.setA2Time(A2Day, A2Hour, A2Minute, B100, A2Dy, false, A2pm);
      }
      }

/* ~~~~~~~~~~~~~~~~~~~~~~ Enter alarm minute set ~~~~~~~~~~~~~~~~~~~~~ */
    if(buttonPress(Set))
      {
      lcd.clear();
      bool SetA2M=true;
      while(SetA2M)
      {
      unsigned long RA2=millis()%1000;
      if(RA2<500)
          {
          PriA2();
          }
          else
          {
          TicSet(3,1);
          }

/* ~~~~~~~~~~~~~~~~~~~~~~~~~ set minute ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
      if(buttonPress(New))
      {
      Clock.getA2Time(A2Day, A2Hour, A2Minute, ABits, A2Dy, A2h12, A2pm);
      A2Minute=A2Minute+1;
      if(A2Minute<60)
          {
          Clock.setA2Time(A2Day, A2Hour, A2Minute, B100, A2Dy, false, A2pm);
          }
          else
          {
          A2Minute=0;
          Clock.setA2Time(A2Day, A2Hour, A2Minute, B100, A2Dy, false, A2pm);
          }
      }

/* ~~~~~~~~~~~~~~~~~~~~~~ Alarm1 on or off ~~~~~~~~~~~~~~~~~~~~~ */
      if(buttonPress(Set))
      {
      lcd.clear();
      bool SetA2R=true;
      while(SetA2R)
          {
          unsigned long RA2=millis()%1000;
          if(RA2<500)
            {
            lcd.setCursor(0, 0);
            PriA2();
            }
            else
            {
            lcd.setCursor(7, 0);
            lcd.print("   ");
            }

/* ~~~~~~~~~~~~~~~~~~~~~~~~~ set alarm on or off ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
          if(buttonPress(New))
            {
            digitalWrite(New,LOW);
            
            if(Clock.checkAlarmEnabled(2))
            {
            Clock.turnOffAlarm(2);
            }
            else
            {
            Clock.turnOnAlarm(2);
            }
            }

/* ~~~~~~~~~~~~~~~~~~~~~~~~~ exit ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
          if(buttonPress(Set))
            {
            lcd.clear();
            delay(200);
            goto exit;
            }
      }
      }
      }
      }
      }
      }
      }
      }
      }
      }
      }
      }
    }
}
}
}
}
}
}
}
}
}
}
}
}
}
exit:;
}


/* ~~~~~~~~~~~~~~~~~~~~~~ Alarm1 on ~~~~~~~~~~~~~~~~~~~~~ */
void Alarm1()
{
if(Clock.checkIfAlarm(1))
    {
    long Rdt;
    do
      {
      unsigned long Rt=millis()%1000;
      if(Rt<500)// flash every 0.5s
      {
      Pritime();
      delay(100);
      digitalWrite(4,HIGH);
      }
      Clock.getA1Time(A1Day, A1Hour, A1Minute, A1Second, ABits, A1Dy, A1h12, A1pm);
      Clock.getTime(year, month, date, DoW, hour, minute, second);
      if (hour==0)
      {
      hour=24;
      }
      Rdt=hour*60+minute*1-A1Hour*60-A1Minute*1;
      }
    while(Rdt>=0&&Rdt<1);// continu 30s
    }
    else
    {
    digitalWrite(4,LOW);
    }
}

void Alarm2()
{
if(Clock.checkIfAlarm(2))
    {
    long Rdt;
    do
      {
      unsigned long Rt=millis()%1000;
      if(Rt<500)// flash every 0.5s
      {
      Pritime();
      delay(100);
      digitalWrite(4,HIGH);   
      }
      Clock.getA2Time(A2Day, A2Hour, A2Minute, ABits, A2Dy, A2h12, A2pm);
      Clock.getTime(year, month, date, DoW, hour, minute, second);
      if (hour==0)
      {
      hour=24;
      }
      Rdt=hour*60+minute*1-A2Hour*60-A2Minute*1;
      }
    while(Rdt>=0&&Rdt<1);// continu 30s
    }
    else
    {
    digitalWrite(4,LOW);
    }
}

无言创客 发表于 2019-7-4 07:07:18

楼主您好,很抱歉打扰您。在使用您的这篇代码时,在闹钟响的那部分,如果闹钟开关是关闭状态,但是闹钟时间到还是响了,请问楼主这个怎么解?

一个小小小小白 发表于 2020-3-7 20:43:51

楼主大神,到设置时间的时候就会出现乱码,把前面两个地址都试了可是没什么效果,这是为什么啊?
页: 1 2 3 4 5 6 7 8 [9]
查看完整版本: 用1602和DS3231搭建的可调时钟 ~~新人帖~~标题要长~~