Vladimir N. Shilov 2 лет назад
Родитель
Сommit
61e52449ec
3 измененных файлов с 64 добавлено и 2 удалено
  1. 1 0
      Inc/board.h
  2. 56 0
      Src/board.c
  3. 7 2
      Src/clock.c

+ 1 - 0
Inc/board.h

@@ -179,6 +179,7 @@ void Board_Init(void);
 void Blink_Start(void);
 void Blink_Stop(void);
 void showDigits(tube4_t dig);
+void slideDigits(tube4_t dig);
 void tube_PowerOn(tube_pos_t tube);
 void tube_PowerOff(tube_pos_t tube);
 void tube_BrightLevel(tube_pos_t tube, uint8_t bright);

+ 56 - 0
Src/board.c

@@ -130,6 +130,62 @@ void showDigits(tube4_t dig)
   } // End of if-else
 }
 
+void slideDigits(tube4_t dig) {
+  tube4_t buf;
+  const uint8_t pause = 100;;
+
+    buf.s8.tA = 0xf;
+    buf.s8.tB = 0xf;
+    buf.s8.tD = 0xf;
+    buf.s8.tE = 0xf;
+    _show_digits(buf.u32);
+    tdelay_ms(pause);
+
+    buf.s8.tE = dig.s8.tA;
+    _show_digits(buf.u32);
+    tdelay_ms(pause);
+
+    buf.s8.tD = dig.s8.tA;
+    buf.s8.tE = dig.s8.tB;
+    _show_digits(buf.u32);
+    tdelay_ms(pause);
+
+    buf.s8.tB = dig.s8.tA;
+    buf.s8.tD = dig.s8.tB;
+    buf.s8.tE = dig.s8.tD;
+    _show_digits(buf.u32);
+    tdelay_ms(pause);
+
+    buf.s8.tA = dig.s8.tA;
+    buf.s8.tB = dig.s8.tB;
+    buf.s8.tD = dig.s8.tD;
+    buf.s8.tE = dig.s8.tE;
+    _show_digits(buf.u32);
+    tdelay_ms(pause);
+
+    buf.s8.tA = dig.s8.tB;
+    buf.s8.tB = dig.s8.tD;
+    buf.s8.tD = dig.s8.tE;
+    buf.s8.tE = 0xf;
+    _show_digits(buf.u32);
+    tdelay_ms(pause);
+
+    buf.s8.tA = dig.s8.tD;
+    buf.s8.tB = dig.s8.tE;
+    buf.s8.tD = 0xf;
+    _show_digits(buf.u32);
+    tdelay_ms(pause);
+
+    buf.s8.tA = dig.s8.tE;
+    buf.s8.tB = 0xf;
+    _show_digits(buf.u32);
+    tdelay_ms(pause);
+
+    buf.s8.tA = 0xf;
+    _show_digits(buf.u32);
+    tdelay_ms(pause);
+}
+
 static void _show_digits(const uint32_t digits)
 {
   tube4_t dig;

+ 7 - 2
Src/clock.c

@@ -377,12 +377,13 @@ static void HSV2LED(const uint8_t hue, const uint8_t val) {
   * Show info on tubes.
   */
 void showTime(void) {
+  uint8_t hue;
   MinusFadeIn();
   RTOS_SetTask(MinusFadeOut, 500, 0);
 
   switch (LightingMode) {
   case light_Rainbow:
-    uint8_t hue = bcd2bin(Clock.Sec);
+    hue = bcd2bin(Clock.Sec);
     HSV2LED(hue, LightingBright);
     break;
 
@@ -400,7 +401,11 @@ void showTime(void) {
   buf.s8.tB = Clock.Hr & 0xf;
   buf.s8.tD = Clock.Min >> 4;
   buf.s8.tE = Clock.Min & 0xf;
-  showDigits(buf);
+  if (Clock.Min == 0) {
+    slideDigits(buf);
+  } else {
+    showDigits(buf);
+  }
 }
 
 void showMMSS(void) {