|
@@ -1,5 +1,4 @@
|
|
|
#include "main.h"
|
|
|
-#include "digits.h"
|
|
|
#include "msg.h"
|
|
|
#include "xprintf.h"
|
|
|
|
|
@@ -57,9 +56,13 @@ static void switch_4_On(void);
|
|
|
static void switch_4_Off(void);
|
|
|
static void switch_5_On(void);
|
|
|
static void switch_5_Off(void);
|
|
|
+static void valIncrease(uint8_t * val, const uint8_t max);
|
|
|
+static void valDecrease(uint8_t * val, const uint8_t max);
|
|
|
+static void dvalIncrease(uint8_t * val, const uint8_t max);
|
|
|
+static void dvalDecrease(uint8_t * val, const uint8_t max);
|
|
|
|
|
|
/** Private variables */
|
|
|
-static rtc_t Clock;
|
|
|
+static rtc_t Clock, setClock;
|
|
|
static i2c_status_t i2c_status;
|
|
|
static btn_t Button[BTN_NUM] = {
|
|
|
{0, evBTN1Pressed, evBTN1Pressed, BTN1_PIN},
|
|
@@ -182,31 +185,13 @@ static void switchProcess(void) {
|
|
|
* @brief Show Time. Use 4x7 digits
|
|
|
*/
|
|
|
void show_Time(void) {
|
|
|
- display_Wait4Display();
|
|
|
-
|
|
|
if (Clock.Sec == 0x0) {
|
|
|
char buf[16] = {0};
|
|
|
- xsprintf(buf, "%x %s. %02x %s.\0", Clock.Hr, Msg_god, Clock.Min, Msg_hv);
|
|
|
- display_String(buf, 2);
|
|
|
+ xsprintf(buf, "%x %s. %x %s.\0", Clock.Hr, Msg_god, Clock.Min, Msg_hv);
|
|
|
+ display_String(buf, 1);
|
|
|
} else {
|
|
|
- uint8_t t;
|
|
|
- // dots blink
|
|
|
- display_WriteData(&digit_4x7[10][0], 10, 4);
|
|
|
RTOS_SetTask(dots_Off, 500, 0);
|
|
|
-
|
|
|
- t = Clock.Hr >> 4;
|
|
|
- display_WriteData(&digit_4x7[t][0], 1, 4);
|
|
|
-
|
|
|
- t = Clock.Hr & 0xf;
|
|
|
- display_WriteData(&digit_4x7[t][0], 6, 4);
|
|
|
-
|
|
|
- t = Clock.Min >> 4;
|
|
|
- display_WriteData(&digit_4x7[t][0], 14, 4);
|
|
|
-
|
|
|
- t = Clock.Min & 0xf;
|
|
|
- display_WriteData(&digit_4x7[t][0], 19, 4);
|
|
|
-
|
|
|
- display_WriteBuffer();
|
|
|
+ display_Digits(Clock.Hr, Clock.Min);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -215,25 +200,8 @@ void show_Time(void) {
|
|
|
*/
|
|
|
void show_MMSS(void) {
|
|
|
RTOS_DeleteTask(dots_Off);
|
|
|
- display_Wait4Display();
|
|
|
-
|
|
|
- uint8_t t;
|
|
|
- // dots on
|
|
|
- display_WriteData(&digit_4x7[10][0], 10, 4);
|
|
|
-
|
|
|
- t = Clock.Min >> 4;
|
|
|
- display_WriteData(&digit_4x7[t][0], 1, 4);
|
|
|
|
|
|
- t = Clock.Min & 0xf;
|
|
|
- display_WriteData(&digit_4x7[t][0], 6, 4);
|
|
|
-
|
|
|
- t = Clock.Sec >> 4;
|
|
|
- display_WriteData(&digit_4x7[t][0], 14, 4);
|
|
|
-
|
|
|
- t = Clock.Sec & 0xf;
|
|
|
- display_WriteData(&digit_4x7[t][0], 19, 4);
|
|
|
-
|
|
|
- display_WriteBuffer();
|
|
|
+ display_Digits(Clock.Min, Clock.Sec);
|
|
|
}
|
|
|
|
|
|
void show_Date(void) {
|
|
@@ -245,15 +213,98 @@ void show_Date(void) {
|
|
|
display_String(buf, 2);
|
|
|
}
|
|
|
|
|
|
-void setTimeShow(void) {}
|
|
|
-void setTimeBegin(void) {}
|
|
|
-void setHHBegin(void) {}
|
|
|
-void setHHInc(void) {}
|
|
|
-void setHHDec(void) {}
|
|
|
-void setMMBegin(void) {}
|
|
|
-void setMMInc(void) {}
|
|
|
-void setMMDec(void) {}
|
|
|
-void setTimeEnd(void) {}
|
|
|
+void blink_dig_HH(void) {
|
|
|
+ static int state = 0;
|
|
|
+
|
|
|
+ switch (state) {
|
|
|
+ case 0:
|
|
|
+ display_Digits(setClock.Hr, setClock.Min);
|
|
|
+ state = 1;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 1:
|
|
|
+ display_Digits(0xff, setClock.Min);
|
|
|
+ state = 0;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ state = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void blink_dig_MM(void) {
|
|
|
+ static int state = 0;
|
|
|
+
|
|
|
+ switch (state) {
|
|
|
+ case 0:
|
|
|
+ display_Digits(setClock.Hr, setClock.Min);
|
|
|
+ state = 1;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 1:
|
|
|
+ display_Digits(setClock.Hr, 0xff);
|
|
|
+ state = 0;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ state = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void setTimeCorrect(void) {
|
|
|
+ if (Clock.Sec > 30) {
|
|
|
+ valIncrease(&Clock.Min, 59);
|
|
|
+ if (Clock.Min == 0) {
|
|
|
+ valIncrease(&Clock.Hr, 23);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Clock.Sec = 0;
|
|
|
+ RTC_WriteTime(&Clock);
|
|
|
+}
|
|
|
+
|
|
|
+void setTimeShow(void) {
|
|
|
+ display_Digits(setClock.Hr, setClock.Min);
|
|
|
+}
|
|
|
+
|
|
|
+void setTimeBegin(void) {
|
|
|
+ RTOS_DeleteTask(dots_Off);
|
|
|
+ RTC_ReadAll(&setClock);
|
|
|
+}
|
|
|
+
|
|
|
+void setHHBegin(void) {
|
|
|
+ RTOS_DeleteTask(blink_dig_MM);
|
|
|
+ RTOS_SetTask(blink_dig_HH, 0, 250);
|
|
|
+}
|
|
|
+
|
|
|
+void setHHInc(void) {
|
|
|
+ valIncrease(&setClock.Hr, 23);
|
|
|
+}
|
|
|
+
|
|
|
+void setHHDec(void) {
|
|
|
+ valDecrease(&setClock.Hr, 23);
|
|
|
+}
|
|
|
+
|
|
|
+void setMMBegin(void) {
|
|
|
+ RTOS_DeleteTask(blink_dig_HH);
|
|
|
+ RTOS_SetTask(blink_dig_MM, 0, 250);
|
|
|
+}
|
|
|
+
|
|
|
+void setMMInc(void) {
|
|
|
+ valIncrease(&setClock.Min, 59);
|
|
|
+}
|
|
|
+
|
|
|
+void setMMDec(void) {
|
|
|
+ valDecrease(&setClock.Min, 59);
|
|
|
+}
|
|
|
+
|
|
|
+void setTimeEnd(void) {
|
|
|
+ RTOS_DeleteTask(blink_dig_HH);
|
|
|
+ RTOS_DeleteTask(blink_dig_MM);
|
|
|
+ setClock.Sec = 0;
|
|
|
+ RTC_WriteTime(&setClock);
|
|
|
+}
|
|
|
|
|
|
void setDateBegin(void) {}
|
|
|
void setDateEnd(void) {}
|
|
@@ -371,10 +422,12 @@ static void beep_Repeated(void) {
|
|
|
*/
|
|
|
static void switch_1_On(void) {
|
|
|
// Stop
|
|
|
+ ES_PlaceEvent(evSwitch1Off);
|
|
|
}
|
|
|
|
|
|
static void switch_1_Off(void) {
|
|
|
// Stop
|
|
|
+ ES_PlaceEvent(evSwitch1On);
|
|
|
}
|
|
|
|
|
|
static void switch_2_On(void) {
|
|
@@ -425,3 +478,55 @@ void EXTI4_15_IRQHandler(void)
|
|
|
RTOS_SetTask(new_Second, 0, 0);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+/**
|
|
|
+ * @brief Increase BCD value.
|
|
|
+ * @param : val, max
|
|
|
+ * @retval : None
|
|
|
+ */
|
|
|
+static void valIncrease(uint8_t * val, uint8_t max) {
|
|
|
+ uint8_t bin = 10 * (*val >> 4) + (*val & 0x0f);
|
|
|
+ if (bin < max) {
|
|
|
+ bin ++;
|
|
|
+ } else {
|
|
|
+ bin = 0;
|
|
|
+ }
|
|
|
+ *val = ((bin / 10 ) << 4) | (bin % 10);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * @brief Decrease BCD value.
|
|
|
+ * @param : value, max
|
|
|
+ * @retval : None
|
|
|
+ */
|
|
|
+static void valDecrease(uint8_t * val, uint8_t max) {
|
|
|
+ uint8_t bin = 10 * (*val >> 4) + (*val & 0x0f);
|
|
|
+ if (bin > 0) {
|
|
|
+ bin --;
|
|
|
+ } else {
|
|
|
+ bin = max;
|
|
|
+ }
|
|
|
+ *val = ((bin / 10 ) << 4) | (bin % 10);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * @brief Increase/Decrease decimal value.
|
|
|
+ * @param val
|
|
|
+ * @param max
|
|
|
+ * @retval : None, change value
|
|
|
+ */
|
|
|
+static void dvalIncrease(uint8_t * val, uint8_t max) {
|
|
|
+ if (*val < max) {
|
|
|
+ *val += 1;
|
|
|
+ } else {
|
|
|
+ *val = 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void dvalDecrease(uint8_t * val, uint8_t max) {
|
|
|
+ if (*val > 0) {
|
|
|
+ *val -= 1;
|
|
|
+ } else {
|
|
|
+ *val = max;
|
|
|
+ }
|
|
|
+}
|