Procházet zdrojové kódy

Фиксим баги :-(

Vladimir N. Shilov před 7 roky
rodič
revize
1328a45c86
2 změnil soubory, kde provedl 41 přidání a 15 odebrání
  1. 39 15
      main.c
  2. 2 0
      main.h

+ 39 - 15
main.c

@@ -74,6 +74,8 @@ __C_task void main(void)
 
     /* check buttons */
     if (1 == Flag.newBTN) {
+      uint8_t mm, hh;
+      
       Flag.newBTN = 0;
       
       btn_t btn = getBTN();
@@ -81,6 +83,8 @@ __C_task void main(void)
       case btn_1:
         // show HH:MM
         State = show_HHMM;
+        RTOS_SetTask(showTEMP,0,0);
+        RTOS_SetTask(showMMSS,0,0);
         RTOS_SetTask(showHHMM,0,500);
         break;
 
@@ -88,6 +92,8 @@ __C_task void main(void)
         // show MM SS
         State = show_MMSS;
         Flag.needDot = 0;
+        RTOS_SetTask(showHHMM,0,0);
+        RTOS_SetTask(showTEMP,0,0);
         RTOS_SetTask(showMMSS,0,500);
         break;
 
@@ -95,33 +101,43 @@ __C_task void main(void)
         // show temperature
         State = show_TEMP;
         Flag.needDot = 0;
+        RTOS_SetTask(showMMSS,0,0);
+        RTOS_SetTask(showHHMM,0,0);
         RTOS_SetTask(showTEMP,0,1000);
         break;
 
       case btn_4:
         // time --
-        if (Clock.minutes > 0) {
-          Clock.minutes --;
+        mm = bcd2bin(Clock.minutes);
+        hh = bcd2bin(Clock.hours);
+        if (mm > 0) {
+          mm --;
         } else {
-          Clock.minutes = 59;
-          if (Clock.hours > 0) {
-            Clock.hours --;
+          mm = 59;
+          if (hh > 0) {
+            hh --;
           } else {
-            Clock.hours = 23;
+            hh = 23;
           }
         }
+        Clock.minutes = bin2bcd(mm);
+        Clock.hours = bin2bcd(hh);
         break;
 
       case btn_5:
         // time ++
-        Clock.minutes ++;
-        if (Clock.minutes > 59) {
-          Clock.minutes = 0;
-          Clock.hours ++;
-          if (Clock.hours > 23) {
-            Clock.hours = 0;
+        mm = bcd2bin(Clock.minutes);
+        hh = bcd2bin(Clock.hours);
+        mm ++;
+        if (mm > 59) {
+          mm = 0;
+          hh ++;
+          if (hh > 23) {
+            hh = 0;
           }
         }
+        Clock.minutes = bin2bcd(mm);
+        Clock.hours = bin2bcd(hh);
         break;
 
       case btn_6:
@@ -150,6 +166,14 @@ __C_task void main(void)
 /**
  *  S u b r o u t i n e s
  */
+static uint8_t bcd2bin(uint8_t bcd) {
+  return (10*(bcd>>4)|(bcd&0x0f));
+}
+
+static uint8_t bin2bcd(uint8_t bin) {
+  return (((bin/10)<<4)|(bin%10));
+}
+
 static void showHHMM(void) {
   State = show_HHMM;
   Display[0] = IndctrNums[(0x0F & (Clock.hours>>4))];
@@ -169,14 +193,14 @@ static void showTEMP(void) {
   int8_t t = Temperature;
   
   if (t < 0) {
-    Display[0] = Sym_blank;
+    Display[0] = Sym_minus;
     t = -t;
   } else {
-    Display[0] = Sym_minus;
+    Display[0] = Sym_blank;
   }
 
   // convert to BCD
-  t = ((t/10)<<4)|(t%10);
+  t = bin2bcd(t);
 
   Display[1] = IndctrNums[(0x0F & (t>>4))];
   Display[2] = IndctrNums[(0x0F & t)];

+ 2 - 0
main.h

@@ -188,5 +188,7 @@ static void showTEMP(void);
 static void startADC(void);
 static btn_t getBTN(void);
 static void getTime(void);
+static uint8_t bcd2bin(uint8_t bcd);
+static uint8_t bin2bcd(uint8_t bin);
 
 #endif // __MAIN_H