فهرست منبع

Second Step to apdapt for six tubes. Added Calendar Set.

Vladimir Shilov 4 سال پیش
والد
کامیت
56a2224b09
5فایلهای تغییر یافته به همراه201 افزوده شده و 95 حذف شده
  1. 8 0
      ReadMe.txt
  2. 17 16
      inc/event-system.h
  3. 4 3
      inc/list_event.h
  4. 37 7
      src/event-system.c
  5. 135 69
      src/main.c

+ 8 - 0
ReadMe.txt

@@ -17,3 +17,11 @@ PWR: MAX771
 Поправил вывод под 6 индикаторов.
 Сделал "тест" отображения.
 Нужно править установку даты.
+---
+2020.12.11
+
+Убрал поддержку DHT.
+
+Пофиксил "меню" установки времени и даты под 6 ламп.
+
+Пока без регулировки яркости по времени.

+ 17 - 16
inc/event-system.h

@@ -43,22 +43,6 @@ void incBright(void);
 void decBright(void);
 #endif
 
-void incHH(void);
-void incMM(void);
-void incSS(void);
-void decHH(void);
-void decMM(void);
-void decSS(void);
-
-void incWDay(void);
-void incMDay(void);
-void incMonth(void);
-void incYear(void);
-void decWDay(void);
-void decMDay(void);
-void decMonth(void);
-void decYear(void);
-
 void setTimeShow(void);
 void setTimeBegin(void);
 void setHHBegin(void);
@@ -69,4 +53,21 @@ void setMMInc(void);
 void setMMDec(void);
 void setTimeEnd(void);
 
+void setDateBegin(void);
+void setDateEnd(void);
+void setWDMShow(void);
+void setYearShow(void);
+void setWDayBegin(void);
+void setMDayBegin(void);
+void setMonthBegin(void);
+void setYearBegin(void);
+void setIncWDay(void);
+void setIncMDay(void);
+void setIncMonth(void);
+void setIncYear(void);
+void setDecWDay(void);
+void setDecMDay(void);
+void setDecMonth(void);
+void setDecYear(void);
+
 #endif /* EVENT_SYSTEM_H */

+ 4 - 3
inc/list_event.h

@@ -21,15 +21,16 @@ typedef enum {
   stNoChange = 0x00,
   stShowTime,
   stShowWDM,
-  stShowWDay,
-  stShowMDay,
-  stShowMon,
   stShowYear,
 #ifdef USE_BRIGHT_CONTROL
   stShowBright,
 #endif // USE_BRIGHT_CONTROL
   stSetHH,
   stSetMM,
+  stSetWDay,
+  stSetMDay,
+  stSetMon,
+  stSetYear,
   /* end */
   stLastState
 } es_state_t;

+ 37 - 7
src/event-system.c

@@ -46,23 +46,53 @@ const table_state_t stateTable[] PROGMEM = {
 #ifdef USE_BRIGHT_CONTROL
   {stShowBright, evDisplayWDT, stShowTime, showTime, NULL},
 #endif
+
   /* refresh output */
-  {stShowTime, evNewSecond,  stNoChange, showTime,  NULL},
-  {stShowWDM,  evRefreshCal, stNoChange, showWDM, NULL},
-  {stShowYear, evRefreshCal, stNoChange, showYear,  NULL},
+  {stShowTime, evNewSecond,  stNoChange, showTime, NULL},
+  {stShowWDM,  evRefreshCal, stNoChange, showWDM,  NULL},
+  {stShowYear, evRefreshCal, stNoChange, showYear, NULL},
+
   /* set time */
   {stShowTime, evBTN1Holded,  stSetHH,    setTimeBegin, setHHBegin},
-  {stSetHH,    evBTN1Pressed, stSetMM,    setMMBegin,   NULL},
-  {stSetMM,    evBTN1Pressed, stSetHH,    setHHBegin,   NULL},
-  {stSetHH,    evNewSecond,   stNoChange, setTimeShow,  NULL},
-  {stSetMM,    evNewSecond,   stNoChange, setTimeShow,  NULL},
   {stSetHH,    evBTN1Holded,  stShowTime, setTimeEnd,   showTime},
   {stSetMM,    evBTN1Holded,  stShowTime, setTimeEnd,   showTime},
+  {stSetHH,    evBTN1Pressed, stSetMM,    setMMBegin,   NULL},
+  {stSetMM,    evBTN1Pressed, stSetHH,    setHHBegin,   NULL},
   {stSetHH,    evBTN3Pressed, stNoChange, setHHInc,     setTimeShow},
   {stSetHH,    evBTN2Pressed, stNoChange, setHHDec,     setTimeShow},
   {stSetMM,    evBTN3Pressed, stNoChange, setMMInc,     setTimeShow},
   {stSetMM,    evBTN2Pressed, stNoChange, setMMDec,     setTimeShow},
+
+  {stSetHH,    evNewSecond,   stNoChange, setTimeShow,  NULL},
+  {stSetMM,    evNewSecond,   stNoChange, setTimeShow,  NULL},
+
+  {stSetHH,    evDisplayWDT,  stShowTime, showTime,     NULL},
+  {stSetMM,    evDisplayWDT,  stShowTime, showTime,     NULL},
+
   /* set calendar */
+  {stShowWDM, evBTN1Holded,  stSetWDay, setDateBegin, setWDayBegin},
+  {stSetWDay, evBTN1Holded,  stShowWDM, setDateEnd,   showWDM},
+  {stSetMDay, evBTN1Holded,  stShowWDM, setDateEnd,   showWDM},
+  {stSetMon,  evBTN1Holded,  stShowWDM, setDateEnd,   showWDM},
+  {stSetWDay, evBTN1Pressed, stSetMDay, setMDayBegin, NULL},
+  {stSetMDay, evBTN1Pressed, stSetMon,  setMonthBegin, NULL},
+  {stSetMon,  evBTN1Pressed, stSetWDay, setWDayBegin, NULL},
+  {stSetWDay, evBTN2Pressed, stNoChange, setDecWDay,  setWDMShow},
+  {stSetWDay, evBTN3Pressed, stNoChange, setIncWDay,  setWDMShow},
+  {stSetMDay, evBTN2Pressed, stNoChange, setDecMDay,  setWDMShow},
+  {stSetMDay, evBTN3Pressed, stNoChange, setIncMDay,  setWDMShow},
+  {stSetMon,  evBTN2Pressed, stNoChange, setDecMonth, setWDMShow},
+  {stSetMon,  evBTN3Pressed, stNoChange, setIncMonth, setWDMShow},
+
+  {stShowYear, evBTN1Holded,  stSetYear,  setDateBegin, setYearBegin},
+  {stSetYear,  evBTN1Holded,  stShowYear, setDateEnd,   showYear},
+  {stSetYear,  evBTN2Pressed, stNoChange, setDecYear,   setYearShow},
+  {stSetYear,  evBTN3Pressed, stNoChange, setIncYear,   setYearShow},
+
+  {stSetWDay, evDisplayWDT, stShowTime, showTime, NULL},
+  {stSetMDay, evDisplayWDT, stShowTime, showTime, NULL},
+  {stSetMon,  evDisplayWDT, stShowTime, showTime, NULL},
+  {stSetYear, evDisplayWDT, stShowTime, showTime, NULL},
   /*
   {stShowWDay, evBTN3Pressed, stNoChange, incWDay,  showWDM},
   {stShowMDay, evBTN3Pressed, stNoChange, incMDay,  showWDM},

+ 135 - 69
src/main.c

@@ -56,13 +56,12 @@ static volatile uint8_t Digit[LAMP_NUM] = {1, 2, 3, 4, 5, 6};
 static rtc_t RTC, setRTC;
 static volatile struct {
   uint8_t RTC_Int:  1;
-  uint8_t saveCal:  1;
   uint8_t blinkC:   1; // флаг задающий ритм мигания
   uint8_t blink0:   1; // мигать разрядами 1-2
   uint8_t blink1:   1; // мигать разрядами 3-4
   uint8_t blink2:   1; // мигать разрядами 5-6
-  uint8_t rezerv:   1;
   uint8_t saveEEP:  1;
+  uint8_t rezerv:   2;
 } Flag;
 static btn_t Button[BTN_NUM] = {
   {0, evBTN1Pressed, evBTN1Holded, BUTTON1_PIN},
@@ -95,7 +94,6 @@ void main(void) {
    */
   uint8_t event = 0;
   Flag.RTC_Int = 0;
-  Flag.saveCal = 0;
   Flag.blink0 = 0;
   Flag.blink1 = 0;
   Flag.blink2 = 0;
@@ -166,11 +164,6 @@ void main(void) {
         if (DISP_WDT == 0) {
           ES_PlaceEvent(evDisplayWDT);
 
-          if (Flag.saveCal != 0) {
-            Flag.saveCal = 0;
-            RTC_WriteCalendar(&RTC);
-          }
-
           if (Flag.saveEEP != 0) {
             Flag.saveEEP = 0;
             eeprom_update_byte(&EEP_BrightIdx, brightIdx);
@@ -278,7 +271,7 @@ void dotOff(void) {
 
 void dotOnPersistent(void) {
   RTOS_DeleteTask(dotOff);
-  PORTD |= DOT_PIN;
+  dotOn();
 }
 
 
@@ -353,69 +346,10 @@ void showYear(void) {
   Digit[5] = RTC.Year & 0x0F;
 }
 
-void incWDay(void) {
-  if (RTC.WD < 7) {
-    RTC.WD ++;
-  } else {
-    RTC.WD = 1;
-  }
-  Flag.saveCal = 1;
-}
-
-void decWDay(void) {
-  if (RTC.WD > 1) {
-    RTC.WD --;
-  } else {
-    RTC.WD = 7;
-  }
-  Flag.saveCal = 1;
-}
-
-void incMDay(void) {
-  valIncrease(&RTC.Day, 31);
-  if (RTC.Day == 0) {
-    RTC.Day = 1;
-  }
-  Flag.saveCal = 1;
-}
-
-void decMDay(void) {
-  valDecrease(&RTC.Day, 31);
-  if (RTC.Day == 0) {
-    RTC.Day = 0x31;
-  }
-  Flag.saveCal = 1;
-}
-
-void incMonth(void) {
-  valIncrease(&RTC.Mon, 12);
-  if (RTC.Mon == 0) {
-    RTC.Mon = 1;
-  }
-  Flag.saveCal = 1;
-}
-
-void decMonth(void) {
-  valDecrease(&RTC.Mon, 12);
-  if (RTC.Mon == 0) {
-    RTC.Mon = 0x12;
-  }
-  Flag.saveCal = 1;
-}
-
-void incYear(void) {
-  valIncrease(&RTC.Year, 99);
-  Flag.saveCal = 1;
-}
-
-void decYear(void) {
-  valDecrease(&RTC.Year, 99);
-  Flag.saveCal = 1;
-}
-
 #ifdef USE_BRIGHT_CONTROL
 void showBright(void) {
   DISP_WDT = DISP_WDT_TIME;
+
   Digit[0] = DIGIT_BLANK;
   Digit[1] = DIGIT_BLANK;
   Digit[2] = brightIdx;
@@ -460,6 +394,7 @@ static void blink(void) {
 }
 
 void setTimeShow(void) {
+  DISP_WDT = DISP_WDT_TIME;
   dotOn();
   RTOS_SetTask(dotOff, 500, 0);
 
@@ -523,6 +458,137 @@ void setTimeEnd(void) {
   RTC_ReadTime(&RTC);
 }
 
+/**
+  * Setup Calendar functions
+  */
+void setDateBegin(void) {
+  RTC_ReadCalendar(&setRTC);
+  RTOS_SetTask(btnProcess, 500, BTN_SCAN_PERIOD);
+}
+
+void setDateEnd(void) {
+  RTOS_SetTask(btnProcess, 500, BTN_SCAN_PERIOD);
+
+  RTC_WriteCalendar(&setRTC);
+
+  Flag.blink0 = 0;
+  Flag.blink1 = 0;
+  Flag.blink2 = 0;
+  Flag.blinkC = 0;
+
+  RTC_ReadCalendar(&RTC);
+  dotOff();
+}
+
+void setWDMShow(void) {
+  DISP_WDT = DISP_WDT_TIME;
+  dotOnPersistent();
+
+  Digit[0] = setRTC.WD & 0x0F;
+  Digit[1] = DIGIT_BLANK;
+  Digit[2] = setRTC.Day >> 4;
+  Digit[3] = setRTC.Day & 0x0F;
+  Digit[4] = setRTC.Mon >> 4;
+  Digit[5] = setRTC.Mon & 0x0F;
+  Digit[5] = 0x0;
+}
+
+void setYearShow(void) {
+  DISP_WDT = DISP_WDT_TIME;
+  dotOff();
+
+  Digit[0] = DIGIT_BLANK;
+  Digit[1] = DIGIT_BLANK;
+  Digit[2] = 0x02;
+  Digit[3] = 0x00;
+  Digit[4] = setRTC.Year >> 4;
+  Digit[5] = setRTC.Year & 0x0F;
+}
+
+void setWDayBegin(void) {
+  Flag.blink0 = 1;
+  Flag.blink1 = 0;
+  Flag.blink2 = 0;
+  RTOS_SetTask(blink, 0, 0);
+  setWDMShow();
+}
+
+void setMDayBegin(void) {
+  Flag.blink0 = 0;
+  Flag.blink1 = 1;
+  Flag.blink2 = 0;
+  RTOS_SetTask(blink, 0, 0);
+  setWDMShow();
+}
+
+void setMonthBegin(void) {
+  Flag.blink0 = 0;
+  Flag.blink1 = 0;
+  Flag.blink2 = 1;
+  RTOS_SetTask(blink, 0, 0);
+  setWDMShow();
+}
+
+void setYearBegin(void) {
+  Flag.blink0 = 0;
+  Flag.blink1 = 0;
+  Flag.blink2 = 1;
+  RTOS_SetTask(blink, 0, 0);
+  setYearShow();
+}
+
+void setIncWDay(void) {
+  if (setRTC.WD < 7) {
+    setRTC.WD ++;
+  } else {
+    setRTC.WD = 1;
+  }
+}
+
+void setDecWDay(void) {
+  if (setRTC.WD > 1) {
+    RTC.WD --;
+  } else {
+    RTC.WD = 7;
+  }
+}
+
+void setIncMDay(void) {
+  valIncrease(&setRTC.Day, 31);
+  if (setRTC.Day == 0) {
+    setRTC.Day = 1;
+  }
+}
+
+void setDecMDay(void) {
+  valDecrease(&setRTC.Day, 31);
+  if (setRTC.Day == 0) {
+    setRTC.Day = 0x31;
+  }
+}
+
+void setIncMonth(void) {
+  valIncrease(&setRTC.Mon, 12);
+  if (setRTC.Mon == 0) {
+    setRTC.Mon = 1;
+  }
+}
+
+void setDecMonth(void) {
+  valDecrease(&setRTC.Mon, 12);
+  if (setRTC.Mon == 0) {
+    setRTC.Mon = 0x12;
+  }
+}
+
+void setIncYear(void) {
+  valIncrease(&setRTC.Year, 99);
+}
+
+void setDecYear(void) {
+  valDecrease(&setRTC.Year, 99);
+}
+
 /**
   * @brief  Increase BCD value.
   * @param  : val, max