极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: singz

用1602和DS3231搭建的可调时钟 ~~新人帖~~标题要长~~

[复制链接]
 楼主| 发表于 2017-10-12 09:37:31 | 显示全部楼层
galaxy 发表于 2017-10-11 13:13
0022的 IDE 組譯不過,
1.0 的 IDE 組譯ok
謝謝您,辛苦了~~讚

回复 支持 反对

使用道具 举报

发表于 2017-12-5 18:39:08 | 显示全部楼层
论坛里有朋友写了一个电波钟的解码程序。http://www.geek-workshop.com/thread-7797-1-1.html
可以加入电波校时,这样就可以减少外部的按键或者只添加一个手动校时按键。
回复 支持 反对

使用道具 举报

发表于 2017-12-5 20:00:43 | 显示全部楼层
suoma 发表于 2017-3-9 13:44
800行啊,我觉得这些功能实现100行就行了

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

使用道具 举报

 楼主| 发表于 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
回复 支持 反对

使用道具 举报

发表于 2017-12-11 18:41:42 | 显示全部楼层
singz 发表于 2017-12-11 09:17
电波的那个挺厉害,这还有个网络校时的:

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

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

使用道具 举报

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

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

使用道具 举报

发表于 2017-12-12 18:23:06 | 显示全部楼层
singz 发表于 2017-12-12 11:11
可以先搭个串口手动校时的普通钟,再学习网络自动校时钟,条件合适的话可以试试电波钟

好的,慢慢学。有什么问题还要请教你
回复 支持 反对

使用道具 举报

发表于 2018-3-26 19:02:33 | 显示全部楼层
大神  第一个闹钟有用 连的led 可以亮
我尝试增加第二闹钟  但是第二个闹钟貌似没用   LCD 可以显示 也可以设置  但是第二个闹钟 LED 没反应
  1. #include <Wire.h>
  2. #include <DS3231.h>
  3. #include <LiquidCrystal.h>

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

  9. const byte Set=2;
  10. const byte New=3;

  11. byte button[2] = {Set, New};
  12. LiquidCrystal lcd(A0, A1, A2, A3, 7, 8);

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

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

  19.   pinMode(4,OUTPUT); // output
  20. }

  21. void loop()
  22. {
  23.   unsigned long Rt=millis()%1000;
  24.   if(Rt<500)  //  0.5s
  25.     {
  26.     Pritime();
  27.     }
  28.   SetTime();
  29.   Alarm1();
  30.   Alarm2();
  31. }

  32. /* ~~~~~~~~~~~~~~~~~~~~~~ Time display ~~~~~~~~~~~~~~~~~~~~~~~ */
  33. void Pritime()
  34. {
  35.   int second,minute,hour,date,month,year,dow,temperature;
  36.   second=Clock.getSecond();
  37.   minute=Clock.getMinute();
  38.   hour=Clock.getHour(h12, PM);
  39.   date=Clock.getDate();
  40.   month=Clock.getMonth(Century);
  41.   year=Clock.getYear();
  42.   dow=Clock.getDoW();

  43.   temperature=Clock.getTemperature();

  44.   lcd.setCursor(0, 0);
  45.   lcd.print("20");  // 20 Century
  46.     if (year>=10)  // print year
  47.       {
  48.       lcd.print(year,DEC);
  49.       }
  50.       else
  51.       {
  52.       lcd.print("0");
  53.       lcd.print(year,DEC);
  54.       }
  55.   lcd.print('-');

  56.   lcd.setCursor(5, 0);
  57.     if (month>=10)  // print month
  58.       {
  59.       lcd.print(month,DEC);
  60.       }
  61.       else
  62.       {
  63.       lcd.print("0");
  64.       lcd.print(month,DEC);
  65.       }
  66.   lcd.print('-');

  67.   lcd.setCursor(8, 0);
  68.     if (date>=10)  // print data
  69.       {
  70.       lcd.print(date,DEC);
  71.       }
  72.       else
  73.       {
  74.       lcd.print("0");
  75.       lcd.print(date,DEC);
  76.       }

  77.   lcd.setCursor(11, 0);
  78.     switch (dow)  // week
  79.       {
  80.       case 1:  // dow = 1
  81.         lcd.print("Mon");
  82.         break;
  83.       case 2:  // dow =2
  84.         lcd.print("Tue");
  85.         break;
  86.       case 3:
  87.         lcd.print("Wed");
  88.         break;
  89.       case 4:
  90.         lcd.print("Thu");
  91.         break;
  92.       case 5:
  93.         lcd.print("Fri");
  94.         break;
  95.       case 6:
  96.         lcd.print("Sat");
  97.         break;
  98.       case 7:
  99.         lcd.print("Sun");
  100.         break;
  101.       }

  102.   lcd.setCursor(0, 1);
  103.     if (hour>=10)  // print hour
  104.       {
  105.       lcd.print(hour,DEC);
  106.       }
  107.       else
  108.       {
  109.       lcd.print("0");
  110.       lcd.print(hour,DEC);
  111.       }
  112.   lcd.print(':');

  113.   lcd.setCursor(3, 1);
  114.     if (minute>=10)  // print minute
  115.       {
  116.       lcd.print(minute,DEC);
  117.       }
  118.       else
  119.       {
  120.       lcd.print("0");
  121.       lcd.print(minute,DEC);
  122.       }
  123.   lcd.print(':');

  124.   lcd.setCursor(6, 1);
  125.     if (second>=10)  // print second
  126.       {
  127.       lcd.print(second,DEC);
  128.       }
  129.       else
  130.       {
  131.       lcd.print("0");
  132.       lcd.print(second,DEC);
  133.       }

  134.   lcd.setCursor(9, 1);
  135.   if (Clock.checkAlarmEnabled(1))  // alarm enable
  136.     {
  137.     lcd.write("on");
  138.     }
  139.     else
  140.     {
  141.     lcd.print(' ');
  142.     }

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

  148. /* ~~~~~~~~~~~~~~~~~~~~~~Display set Data Week Time ~~~~~~~~~~~~~~~~~~~~~~~ */
  149. void PritimeSet(byte syear,byte smonth,byte sdate,byte sdow,byte shour,byte sminute,byte ssecond)
  150. {
  151.   lcd.setCursor(0, 0);
  152.   lcd.print("20");  // 20 Century
  153.     if (syear>=10)  // print year
  154.       {
  155.       lcd.print(syear,DEC);
  156.       }
  157.       else
  158.       {
  159.       lcd.print("0");
  160.       lcd.print(syear,DEC);
  161.       }
  162.   lcd.print('-');

  163.   lcd.setCursor(5, 0);
  164.     if (smonth>=10)  // print month
  165.       {
  166.       lcd.print(smonth,DEC);
  167.       }
  168.       else
  169.       {
  170.       lcd.print("0");
  171.       lcd.print(smonth,DEC);
  172.       }
  173.   lcd.print('-');

  174.   lcd.setCursor(8, 0);
  175.     if (sdate>=10)  // print date
  176.       {
  177.       lcd.print(sdate,DEC);
  178.       }
  179.       else
  180.       {
  181.       lcd.print("0");
  182.       lcd.print(sdate,DEC);
  183.       }

  184.   lcd.setCursor(11, 0);
  185.     switch (sdow)  // print week
  186.       {
  187.       case 1:  // dow = 1
  188.         lcd.print("Mon");
  189.         break;
  190.       case 2:  // dow = 2
  191.         lcd.print("Tue");
  192.         break;
  193.       case 3:
  194.         lcd.print("Wed");
  195.         break;
  196.       case 4:
  197.         lcd.print("Thu");
  198.         break;
  199.       case 5:
  200.         lcd.print("Fri");
  201.         break;
  202.       case 6:
  203.         lcd.print("Sat");
  204.         break;
  205.       case 7:
  206.         lcd.print("Sun");
  207.         break;
  208.       }

  209.   lcd.setCursor(0, 1);
  210.     if (shour>=10)  // print hour
  211.       {
  212.       lcd.print(shour,DEC);
  213.       }
  214.       else
  215.       {
  216.       lcd.print("0");
  217.       lcd.print(shour,DEC);
  218.       }
  219.   lcd.print(':');

  220.   lcd.setCursor(3, 1);
  221.     if (sminute>=10)  // print minute
  222.       {
  223.       lcd.print(sminute,DEC);
  224.       }
  225.       else
  226.       {
  227.       lcd.print("0");
  228.       lcd.print(sminute,DEC);
  229.       }
  230.   lcd.print(':');

  231.   lcd.setCursor(6, 1);
  232.     if (ssecond>=10)  // print second
  233.       {
  234.       lcd.print(ssecond,DEC);
  235.       }
  236.       else
  237.       {
  238.       lcd.print("0");
  239.       lcd.print(ssecond,DEC);
  240.       }
  241. }


  242. /* ~~~~~~~~~~~~~~~~~~~~~~ flash set location ~~~~~~~~~~~~~~~~~~~~~~~ */
  243. void TicSet(byte a,byte b)
  244. {
  245.   lcd.setCursor(a,b);
  246.   lcd.print("  ");
  247. }


  248. /* ~~~~~~~~~~~~~~~~~~~~~~ display alarm1 ~~~~~~~~~~~~~~~~~~~~~~~ */
  249. void PriA1()
  250. {
  251.   lcd.setCursor(0, 0);  
  252.   lcd.print("Alarm1 ");
  253.   if (Clock.checkAlarmEnabled(1))  // alarm status
  254.     {
  255.     lcd.print("On");
  256.     }
  257.     else
  258.     {
  259.     lcd.print("Off");
  260.     }

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

  262.   lcd.setCursor(0, 1); //second line on lcd
  263.   if (A1Hour>=10)  // print hour
  264.     {
  265.     lcd.print(A1Hour,DEC);
  266.     }
  267.     else
  268.     {
  269.     lcd.print("0");
  270.     lcd.print(A1Hour,DEC);
  271.     }
  272.   lcd.print(':');

  273.   lcd.setCursor(3, 1);
  274.   if (A1Minute>=10)  //print minute
  275.     {
  276.     lcd.print(A1Minute,DEC);
  277.     }
  278.     else
  279.     {
  280.     lcd.print("0");
  281.     lcd.print(A1Minute,DEC);
  282.     }
  283. }
  284. /*~~~~~~~~~~~~~~~~~~~~~~~display alarm2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  285. void PriA2()
  286. {
  287.   lcd.setCursor(0, 0);  
  288.   lcd.print("Alarm2 ");
  289.   if (Clock.checkAlarmEnabled(2))  // alarm status
  290.     {
  291.     lcd.print("On");
  292.     }
  293.     else
  294.     {
  295.     lcd.print("Off");
  296.     }

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

  298.   lcd.setCursor(0, 1); //second line on lcd
  299.   if (A2Hour>=10)  // print hour
  300.     {
  301.     lcd.print(A2Hour,DEC);
  302.     }
  303.     else
  304.     {
  305.     lcd.print("0");
  306.     lcd.print(A2Hour,DEC);
  307.     }
  308.   lcd.print(':');

  309.   lcd.setCursor(3, 1);
  310.   if (A2Minute>=10)  //print minute
  311.     {
  312.     lcd.print(A2Minute,DEC);
  313.     }
  314.     else
  315.     {
  316.     lcd.print("0");
  317.     lcd.print(A2Minute,DEC);
  318.     }
  319. }

  320. /* ~~~~~~~~~~~~~~~~~~~~~~ switch debounce~~~~~~~~~~~~~~~~~~~~~~~ */
  321. unsigned long LastP;
  322. boolean buttonPress(byte button)
  323. {
  324.   if(digitalRead(button)==HIGH) // button press?
  325.     {
  326.     unsigned long NowP = millis();
  327.     unsigned long buttonChange=NowP-LastP;  // debounce function
  328.     if (buttonChange>500)  
  329.       {
  330.       LastP = millis();
  331.       return true;
  332.       }
  333.       else
  334.       {
  335.       return false;
  336.       }
  337.     }
  338.     else
  339.     {
  340.     return false;
  341.     }
  342. }

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

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

  354. /* ~~~~~~~~~~~~~~~~~~~~~~ Enter year set ~~~~~~~~~~~~~~~~~~~~~~~ */
  355.   while(SetY)
  356.     {
  357.     unsigned long Rt=millis()%1000;
  358.     if(Rt<500)  // flash every 0.5s
  359.       {
  360.       PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
  361.       }
  362.       else
  363.       {
  364.       lcd.setCursor(0,0);
  365.       lcd.print("    ");
  366.       }

  367. /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set year ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  368.       if(buttonPress(New))
  369.         {
  370.         syear=syear+1;
  371.         if(syear>50)
  372.          {
  373.            syear = 0;
  374.          }
  375.         }

  376. /* ~~~~~~~~~~~~~~~~~~~~~~ Enter month set ~~~~~~~~~~~~~~~~~~~~~ */
  377.   if(buttonPress(Set))
  378.     {
  379.     lcd.clear();
  380.     bool SetMon=true;
  381.     while(SetMon)
  382.       {
  383.       unsigned long Rt=millis()%1000;
  384.       if(Rt<500)
  385.         {
  386.         PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
  387.         }
  388.         else
  389.         {
  390.         TicSet(5,0);
  391.         }
  392.         
  393. /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set month ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  394.       if(buttonPress(New))
  395.         {
  396.         smonth=smonth+1;
  397.         if(smonth>12)
  398.           {
  399.           smonth=1;
  400.           }
  401.         }

  402. /* ~~~~~~~~~~~~~~~~~~~~~~ Enter data set ~~~~~~~~~~~~~~~~~~~~~ */
  403.   if(buttonPress(Set))
  404.     {
  405.     lcd.clear();
  406.     bool SetD=true;
  407.     while(SetD)
  408.       {
  409.       unsigned long Rt=millis()%1000;
  410.       if(Rt<500)
  411.         {
  412.         PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
  413.         }
  414.         else
  415.         {
  416.         TicSet(8,0);
  417.         }

  418. /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set data ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  419.       if(buttonPress(New))
  420.         {
  421.         sdate=sdate+1;
  422.         if(sdate>31)
  423.           {
  424.           sdate=1;
  425.           }
  426.         }
  427.                   
  428. /* ~~~~~~~~~~~~~~~~~~~~~~ Enter week set ~~~~~~~~~~~~~~~~~~~~~ */
  429.   if(buttonPress(Set))
  430.     {
  431.     lcd.clear();
  432.     bool SetW=true;
  433.     while(SetW)
  434.       {
  435.       unsigned long Rt=millis()%1000;
  436.       if(Rt<500)
  437.         {
  438.         PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
  439.         }
  440.         else
  441.         {
  442.         lcd.setCursor(11,0);
  443.         lcd.print("   ");
  444.         }

  445. /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set week ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  446.       if(buttonPress(New))
  447.         {
  448.         sdow=sdow+1;
  449.         if(sdow>7)
  450.           {
  451.           sdow=1;
  452.           }
  453.         }

  454. /* ~~~~~~~~~~~~~~~~~~~~~~ Enter hour set ~~~~~~~~~~~~~~~~~~~~~ */
  455.   if(buttonPress(Set))
  456.     {
  457.     lcd.clear();
  458.     long NewP=0;
  459.     bool SetH=true;
  460.     while(SetH)
  461.       {
  462.       unsigned long Rt=millis()%1000;
  463.       if(Rt<500)
  464.         {
  465.         PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
  466.         }
  467.         else
  468.         {
  469.         TicSet(0,1);
  470.         }

  471. /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set hour ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  472.       if(buttonPress(New))
  473.         {
  474.         NewP=NewP+1;
  475.         shour=shour+1;
  476.         if(shour>23)
  477.           {
  478.           shour=0;
  479.           }
  480.         }

  481. /* ~~~~~~~~~~~~~~~~~~~~~~ Enter minute set ~~~~~~~~~~~~~~~~~~~~~ */
  482.   if(buttonPress(Set))
  483.     {
  484.     lcd.clear();
  485.     bool SetMin=true;
  486.     while(SetMin)
  487.       {
  488.       unsigned long Rt=millis()%1000;
  489.       if(Rt<500)
  490.         {
  491.         PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
  492.         }
  493.         else
  494.         {
  495.         TicSet(3,1);
  496.         }

  497. /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set minute ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  498.       if(buttonPress(New))
  499.         {
  500.         NewP=NewP+1;
  501.         sminute=sminute+1;
  502.         if(sminute>59)
  503.           {
  504.           sminute=0;
  505.           }
  506.         }

  507. /* ~~~~~~~~~~~~~~~~~~~~~~ Enter second set ~~~~~~~~~~~~~~~~~~~~~ */
  508.   if(buttonPress(Set))
  509.     {
  510.     lcd.clear();
  511.     bool SetS=true;
  512.     while(SetS)
  513.       {
  514.       unsigned long Rt=millis()%1000;
  515.       if(Rt<500)
  516.         {
  517.         PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
  518.         }
  519.         else
  520.         {
  521.         TicSet(6,1);
  522.         }

  523. /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set second ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  524.       if(buttonPress(New))
  525.         {
  526.         NewP=NewP+1;
  527.         ssecond=ssecond+1;
  528.         if(ssecond>59)
  529.           {
  530.           ssecond=0;
  531.           }
  532.         }

  533. /* ~~~~~~~~~~~~~~~~~~~~~~~~~ exit and save ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  534.   if(buttonPress(Set))
  535.     {
  536.     Clock.setYear(syear);
  537.     Clock.setMonth(smonth);
  538.     Clock.setDate(sdate);
  539.     Clock.setDoW(sdow);
  540.     if (NewP>0)
  541.       {
  542.       Clock.setHour(shour);
  543.       Clock.setMinute(sminute);
  544.       Clock.setSecond(ssecond);
  545.       }

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

  549.     bool SetA1H=true;
  550.     while(SetA1H)
  551.       {
  552.       unsigned long RA1=millis()%1000;
  553.       if(RA1<500)  // flash every 0.5s
  554.         {
  555.         PriA1();
  556.         }
  557.         else
  558.         {
  559.         TicSet(0,1);
  560.         }

  561. /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set hour ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  562.     if(buttonPress(New))
  563.       {
  564.       Clock.getA1Time(A1Day, A1Hour, A1Minute, A1Second, ABits, A1Dy, A1h12, A1pm);
  565.       A1Hour=A1Hour+1;
  566.       if(A1Hour<24)
  567.         {
  568.         Clock.setA1Time(A1Day, A1Hour, A1Minute, A1Second, B1000, A1Dy, false, A1pm);  // set alarm for every day
  569.         }
  570.         else
  571.         {
  572.         A1Hour=0;
  573.         Clock.setA1Time(A1Day, A1Hour, A1Minute, A1Second, B1000, A1Dy, false, A1pm);
  574.         }
  575.       }

  576. /* ~~~~~~~~~~~~~~~~~~~~~~ Enter alarm1 minute set ~~~~~~~~~~~~~~~~~~~~~ */
  577.     if(buttonPress(Set))
  578.       {
  579.       lcd.clear();
  580.       bool SetA1M=true;
  581.       while(SetA1M)
  582.         {
  583.         unsigned long RA1=millis()%1000;
  584.         if(RA1<500)
  585.           {
  586.           PriA1();
  587.           }
  588.           else
  589.           {
  590.           TicSet(3,1);
  591.           }

  592. /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set minute ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  593.       if(buttonPress(New))
  594.         {
  595.         Clock.getA1Time(A1Day, A1Hour, A1Minute, A1Second, ABits, A1Dy, A1h12, A1pm);
  596.         A1Minute=A1Minute+1;
  597.         if(A1Minute<60)
  598.           {
  599.           Clock.setA1Time(A1Day, A1Hour, A1Minute, A1Second, B1000, A1Dy, false, A1pm);
  600.           }
  601.           else
  602.           {
  603.           A1Minute=0;
  604.           Clock.setA1Time(A1Day, A1Hour, A1Minute, A1Second, B1000, A1Dy, false, A1pm);
  605.           }
  606.         }

  607. /* ~~~~~~~~~~~~~~~~~~~~~~ Alarm1 on or off ~~~~~~~~~~~~~~~~~~~~~ */
  608.       if(buttonPress(Set))
  609.         {
  610.         lcd.clear();
  611.         bool SetA1R=true;
  612.         while(SetA1R)
  613.           {
  614.           unsigned long RA1=millis()%1000;
  615.           if(RA1<500)
  616.             {
  617.             lcd.setCursor(0, 0);
  618.             PriA1();
  619.             }
  620.             else
  621.             {
  622.             lcd.setCursor(7, 0);
  623.             lcd.print("   ");
  624.             }

  625. /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set alarm on or off ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  626.           if(buttonPress(New))
  627.             {
  628.             digitalWrite(New,LOW);
  629.             
  630.             if(Clock.checkAlarmEnabled(1))
  631.               {
  632.               Clock.turnOffAlarm(1);
  633.               }
  634.               else
  635.               {
  636.               Clock.turnOnAlarm(1);
  637.               }
  638.             }

  639. /* ~~~~~~~~~~~~~~~~~~~~~~ Enter alarm2 hour set ~~~~~~~~~~~~~~~~~~~~~~~ */
  640.   if(buttonPress(Set))
  641.     {
  642.     lcd.clear();
  643.     delay(200);

  644.     bool SetA2H=true;
  645.     while(SetA2H)
  646.       {
  647.       unsigned long RA2=millis()%1000;
  648.       if(RA2<500)  // flash every 0.5s
  649.         {
  650.         PriA2();
  651.         }
  652.         else
  653.         {
  654.         TicSet(0,1);
  655.         }

  656. /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set hour ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  657.     if(buttonPress(New))
  658.       {
  659.       Clock.getA2Time(A2Day, A2Hour, A2Minute, ABits, A2Dy, A2h12, A2pm);
  660.       A2Hour=A2Hour+1;
  661.       if(A2Hour<24)
  662.         {
  663.         Clock.setA2Time(A2Day, A2Hour, A2Minute, B100, A2Dy, false, A2pm);  // set alarm for every day
  664.         }
  665.         else
  666.         {
  667.         A2Hour=0;
  668.         Clock.setA2Time(A2Day, A2Hour, A2Minute, B100, A2Dy, false, A2pm);
  669.         }
  670.       }

  671. /* ~~~~~~~~~~~~~~~~~~~~~~ Enter alarm minute set ~~~~~~~~~~~~~~~~~~~~~ */
  672.     if(buttonPress(Set))
  673.       {
  674.       lcd.clear();
  675.       bool SetA2M=true;
  676.       while(SetA2M)
  677.         {
  678.         unsigned long RA2=millis()%1000;
  679.         if(RA2<500)
  680.           {
  681.           PriA2();
  682.           }
  683.           else
  684.           {
  685.           TicSet(3,1);
  686.           }

  687. /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set minute ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  688.       if(buttonPress(New))
  689.         {
  690.         Clock.getA2Time(A2Day, A2Hour, A2Minute, ABits, A2Dy, A2h12, A2pm);
  691.         A2Minute=A2Minute+1;
  692.         if(A2Minute<60)
  693.           {
  694.           Clock.setA2Time(A2Day, A2Hour, A2Minute, B100, A2Dy, false, A2pm);
  695.           }
  696.           else
  697.           {
  698.           A2Minute=0;
  699.           Clock.setA2Time(A2Day, A2Hour, A2Minute, B100, A2Dy, false, A2pm);
  700.           }
  701.         }

  702. /* ~~~~~~~~~~~~~~~~~~~~~~ Alarm1 on or off ~~~~~~~~~~~~~~~~~~~~~ */
  703.       if(buttonPress(Set))
  704.         {
  705.         lcd.clear();
  706.         bool SetA2R=true;
  707.         while(SetA2R)
  708.           {
  709.           unsigned long RA2=millis()%1000;
  710.           if(RA2<500)
  711.             {
  712.             lcd.setCursor(0, 0);
  713.             PriA2();
  714.             }
  715.             else
  716.             {
  717.             lcd.setCursor(7, 0);
  718.             lcd.print("   ");
  719.             }

  720. /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set alarm on or off ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  721.           if(buttonPress(New))
  722.             {
  723.             digitalWrite(New,LOW);
  724.             
  725.             if(Clock.checkAlarmEnabled(2))
  726.               {
  727.               Clock.turnOffAlarm(2);
  728.               }
  729.               else
  730.               {
  731.               Clock.turnOnAlarm(2);
  732.               }
  733.             }

  734. /* ~~~~~~~~~~~~~~~~~~~~~~~~~ exit ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  735.           if(buttonPress(Set))
  736.             {
  737.             lcd.clear();
  738.             delay(200);
  739.             goto exit;
  740.             }
  741.         }
  742.         }
  743.         }
  744.         }
  745.         }
  746.         }
  747.         }
  748.         }
  749.         }
  750.         }
  751.       }
  752.       }
  753.     }
  754.   }
  755.   }
  756.   }
  757.   }
  758.   }
  759.   }
  760.   }
  761.   }
  762.   }
  763.   }
  764.   }
  765.   }
  766.   }
  767.   exit:  ;
  768. }


  769. /* ~~~~~~~~~~~~~~~~~~~~~~ Alarm1 on ~~~~~~~~~~~~~~~~~~~~~ */
  770. void Alarm1()
  771. {
  772.   if(Clock.checkIfAlarm(1))
  773.     {
  774.     long Rdt;
  775.     do
  776.       {
  777.       unsigned long Rt=millis()%1000;
  778.       if(Rt<500)  // flash every 0.5s
  779.         {
  780.         Pritime();
  781.         delay(100);  
  782.         digitalWrite(4,HIGH);
  783.         }
  784.       Clock.getA1Time(A1Day, A1Hour, A1Minute, A1Second, ABits, A1Dy, A1h12, A1pm);
  785.       Clock.getTime(year, month, date, DoW, hour, minute, second);
  786.       if (hour==0)
  787.         {
  788.         hour=24;
  789.         }
  790.       Rdt=hour*60+minute*1-A1Hour*60-A1Minute*1;
  791.       }
  792.     while(Rdt>=0&&Rdt<1);  // continu 30s
  793.     }
  794.     else
  795.     {
  796.     digitalWrite(4,LOW);
  797.     }
  798. }

  799. void Alarm2()
  800. {
  801.   if(Clock.checkIfAlarm(2))
  802.     {
  803.     long Rdt;
  804.     do
  805.       {
  806.       unsigned long Rt=millis()%1000;
  807.       if(Rt<500)  // flash every 0.5s
  808.         {
  809.         Pritime();
  810.         delay(100);
  811.         digitalWrite(4,HIGH);   
  812.         }
  813.       Clock.getA2Time(A2Day, A2Hour, A2Minute, ABits, A2Dy, A2h12, A2pm);
  814.       Clock.getTime(year, month, date, DoW, hour, minute, second);
  815.       if (hour==0)
  816.         {
  817.         hour=24;
  818.         }
  819.       Rdt=hour*60+minute*1-A2Hour*60-A2Minute*1;
  820.       }
  821.     while(Rdt>=0&&Rdt<1);  // continu 30s
  822.     }
  823.     else
  824.     {
  825.     digitalWrite(4,LOW);
  826.     }
  827. }
复制代码

回复 支持 反对

使用道具 举报

发表于 2019-7-4 07:07:18 来自手机 | 显示全部楼层
楼主您好,很抱歉打扰您。在使用您的这篇代码时,在闹钟响的那部分,如果闹钟开关是关闭状态,但是闹钟时间到还是响了,请问楼主这个怎么解?
回复 支持 反对

使用道具 举报

发表于 2020-3-7 20:43:51 | 显示全部楼层
楼主大神,到设置时间的时候就会出现乱码,把前面两个地址都试了可是没什么效果,这是为什么啊?
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 08:34 , Processed in 0.046646 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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