|
@@ -18,6 +18,7 @@ __C_task void main(void)
|
|
|
INDCTR_COMMON_PORT = ~INDCTR_COMMON_ALL; // off all indikators
|
|
|
|
|
|
Flag2.needDot = 0;
|
|
|
+ Flag2.blinkIndktr = 0;
|
|
|
|
|
|
/* Timer0 every 4 ms switch showing LED */
|
|
|
TCCR0 = TIM0_PRESCALER;
|
|
@@ -65,8 +66,8 @@ __C_task void main(void)
|
|
|
switch (State) {
|
|
|
case show_HHMM:
|
|
|
// every 25 and 55 seconds shoe temperature for 5 seconds
|
|
|
- if ((25 == Clock.seconds) || (55 == Clock.seconds)) {
|
|
|
- State = show_TEMPt;
|
|
|
+ if ((0x25 == Clock.seconds) || (0x55 == Clock.seconds)) {
|
|
|
+ State = show_TEMP;
|
|
|
counterShowTemp = PERIOD_SHT;
|
|
|
showTEMP();
|
|
|
} else {
|
|
@@ -77,6 +78,10 @@ __C_task void main(void)
|
|
|
case show_MMSS:
|
|
|
showMMSS();
|
|
|
break;
|
|
|
+
|
|
|
+ case set_TIME:
|
|
|
+ showHHMM();
|
|
|
+ break;
|
|
|
|
|
|
default:
|
|
|
break;
|
|
@@ -96,7 +101,7 @@ __C_task void main(void)
|
|
|
|
|
|
if (1 == Flag.newTemp) {
|
|
|
Flag.newTemp = 0;
|
|
|
- if ((show_TEMPt == State) || (show_TEMPp == State)) {
|
|
|
+ if (show_TEMP == State) {
|
|
|
showTEMP();
|
|
|
}
|
|
|
} // end of Flag.newTemp
|
|
@@ -111,50 +116,55 @@ __C_task void main(void)
|
|
|
switch (btn) {
|
|
|
case btn_1:
|
|
|
// show HH:MM
|
|
|
- State = show_HHMM;
|
|
|
- counterShowTemp = 0;
|
|
|
- showHHMM();
|
|
|
+ if (State != set_TIME) {
|
|
|
+ State = show_HHMM;
|
|
|
+ counterShowTemp = 0;
|
|
|
+ showHHMM();
|
|
|
+ }
|
|
|
break;
|
|
|
|
|
|
case btn_2:
|
|
|
// show MM SS
|
|
|
- State = show_MMSS;
|
|
|
- Flag2.needDot = 1;
|
|
|
- counterShowTemp = 0;
|
|
|
- showMMSS();
|
|
|
+ if (State != set_TIME) {
|
|
|
+ State = show_MMSS;
|
|
|
+ Flag2.needDot = 1;
|
|
|
+ counterShowTemp = 0;
|
|
|
+ showMMSS();
|
|
|
+ }
|
|
|
break;
|
|
|
|
|
|
case btn_3:
|
|
|
// show temperature
|
|
|
- State = show_TEMPp;
|
|
|
- Flag2.needDot = 0;
|
|
|
- counterShowTemp = 0;
|
|
|
- showTEMP();
|
|
|
+ if (State != set_TIME) {
|
|
|
+ State = show_TEMP;
|
|
|
+ Flag2.needDot = 0;
|
|
|
+ counterShowTemp = 0;
|
|
|
+ showTEMP();
|
|
|
+ }
|
|
|
break;
|
|
|
|
|
|
case btn_4:
|
|
|
// time --
|
|
|
- if (Flag.setTime == 1) {
|
|
|
+ if (set_TIME == State) {
|
|
|
mm = bcd2bin(Clock.minutes);
|
|
|
hh = bcd2bin(Clock.hours);
|
|
|
- if (mm > 0) {
|
|
|
- mm --;
|
|
|
- } else {
|
|
|
+ mm --;
|
|
|
+ if (mm > 59) {
|
|
|
mm = 59;
|
|
|
- if (hh > 0) {
|
|
|
- hh --;
|
|
|
- } else {
|
|
|
+ hh --;
|
|
|
+ if (hh >23 ) {
|
|
|
hh = 23;
|
|
|
}
|
|
|
}
|
|
|
Clock.minutes = bin2bcd(mm);
|
|
|
Clock.hours = bin2bcd(hh);
|
|
|
+ Flag.newTime = 1;
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case btn_5:
|
|
|
// time ++
|
|
|
- if (Flag.setTime == 1) {
|
|
|
+ if (set_TIME == State) {
|
|
|
mm = bcd2bin(Clock.minutes);
|
|
|
hh = bcd2bin(Clock.hours);
|
|
|
mm ++;
|
|
@@ -167,24 +177,29 @@ __C_task void main(void)
|
|
|
}
|
|
|
Clock.minutes = bin2bcd(mm);
|
|
|
Clock.hours = bin2bcd(hh);
|
|
|
+ Flag.newTime = 1;
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case btn_6:
|
|
|
// save new time
|
|
|
- if (Flag.setTime == 1) {
|
|
|
- Flag.setTime = 0;
|
|
|
- Flag2.blankIndktr = 0;
|
|
|
+ if (set_TIME == State) {
|
|
|
+ State = show_HHMM;
|
|
|
+ Flag2.blinkIndktr = 0;
|
|
|
setTime();
|
|
|
counterTWI = PERIOD_TWI;
|
|
|
+ Flag.newTime = 1;
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case btn_7:
|
|
|
// time set
|
|
|
- Flag.setTime = 1;
|
|
|
- Flag2.blankIndktr = 1;
|
|
|
- counterTWI = 0;
|
|
|
+ if (show_HHMM == State) {
|
|
|
+ State = set_TIME;
|
|
|
+ Flag2.blinkIndktr = 1;
|
|
|
+ Flag2.needDot = 1;
|
|
|
+ counterTWI = 0;
|
|
|
+ }
|
|
|
break;
|
|
|
|
|
|
default:
|
|
@@ -205,16 +220,33 @@ __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));
|
|
|
+// return ((10*(bcd>>4))|(bcd&0x0f));
|
|
|
+ uint8_t Temp = bcd & 0x0F;
|
|
|
+ while (bcd>=0x10)
|
|
|
+ {
|
|
|
+ Temp += 10;
|
|
|
+ bcd -= 0x10;
|
|
|
+ }
|
|
|
+ return Temp;
|
|
|
}
|
|
|
|
|
|
static uint8_t bin2bcd(uint8_t bin) {
|
|
|
- return (((bin/10)<<4)|(bin%10));
|
|
|
+// return (((bin/10)<<4)|(bin%10));
|
|
|
+ uint8_t Temp = 0;
|
|
|
+ while(bin>9)
|
|
|
+ {
|
|
|
+ Temp += 0x10;
|
|
|
+ bin-=10;
|
|
|
+ }
|
|
|
+ return Temp+bin;
|
|
|
}
|
|
|
|
|
|
static void showHHMM(void) {
|
|
|
- State = show_HHMM;
|
|
|
- Indicator1 = IndctrNums[(0x0F & (Clock.hours>>4))];
|
|
|
+ if (Clock.hours > 9) {
|
|
|
+ Indicator1 = IndctrNums[(0x0F & (Clock.hours>>4))];
|
|
|
+ } else {
|
|
|
+ Indicator1 = Sym_blank;
|
|
|
+ }
|
|
|
Indicator2 = IndctrNums[(0x0F & Clock.hours)];
|
|
|
Indicator3 = IndctrNums[(0x0F & (Clock.minutes>>4))];
|
|
|
Indicator4 = IndctrNums[(0x0F & Clock.minutes)];
|
|
@@ -294,12 +326,12 @@ static void getTime(void) {
|
|
|
if (show_HHMM == State) {
|
|
|
if (old_sec != Clock.seconds) {
|
|
|
Flag2.needDot = 1;
|
|
|
+ old_sec = Clock.seconds;
|
|
|
} else {
|
|
|
Flag2.needDot = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- old_sec = Clock.seconds;
|
|
|
Flag.newTime = 1;
|
|
|
}
|
|
|
|
|
@@ -495,10 +527,11 @@ __interrupt void TIMER0_OVF_ISR(void) {
|
|
|
TCNT0 = TIM0_CNT; // reload timer
|
|
|
|
|
|
INDCTR_COMMON_PORT &= ~INDCTR_COMMON_ALL; // off all indikators
|
|
|
+ INDCTR_SEGMENT_PORT = 0;
|
|
|
|
|
|
Flag2.waitIndktr = 0;
|
|
|
|
|
|
- if (1 == Flag2.blankIndktr) {
|
|
|
+ if (1 == Flag2.blinkIndktr) {
|
|
|
if (blank_time <= 150) {
|
|
|
flag = 1;
|
|
|
blank_time ++;
|