|
@@ -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)];
|