//============================================================================= int main(void) { LIGHT_init(); LCD_init(); LIGHT_on(); LCD_clear(); BEEP_init(); RTC_init(); RTOS_init(); RC5_Init(); RC5_Reset(); ENC_init(); KBD_init(); bmp180Init(); dht22Init(); rda5807Init(); rda5807PowerOn(); rda5807SetMute(1); ds18x20SearchDevices(); LCD_goto(0, 0); LCD_puts("POGODNAY STATION"); LCD_goto(0, 1); LCD_puts(" VERSION 1.0 "); _delay_ms(1000); LCD_clear(); LCD_load_bignum(); ds18x20Process(); if (bmp180HaveSensor()) bmp180Convert(); dht22Read(); #if (DEBUG == 1) if ((BUT_1_PINX & (1<<(BUT_1_PIN))) == 0) { _delay_ms(100); if ((BUT_1_PINX & (1<<(BUT_1_PIN))) == 0) { RTOS_setTask(EVENT_SET_STATE_OPTION, 0, 0); BEEP_beep(); while (((BUT_1_PINX & (1<<(BUT_1_PIN))) == 0)) { } BEEP_beep(); } } #else RTOS_setTask(EVENT_SET_STATE_OPTION, 0, 0); BEEP_beep(); #endif RTOS_setTaskFunc(set_blink, 0, 1000); // моргание RTOS_setTaskFunc(KBD_scan, 0, 5); // запускаем опрос кнопок RTOS_setTaskFunc(ENC_poll, 0, 1); // запускаем опрос енкодера RTOS_setTaskFunc(RC5_scan, 0, 5); // запускаем опрос RC5 RTOS_setTask(EVENT_SET_SHOW, 0, 0); // запуск шоу sei(); // Разрешили прерывания while(1) { RTOS_dispatchTask(); // Вызываем диспетчер в цикле. } }
//============================================================================= void show_bigpressure(void) { uint8_t display[4]; int16_t p; if (bmp180HaveSensor()) { bmp180Convert(); p = bmp180GetPressure(); display[0] = (p / 1000) % 10; display[1] = (p / 100) % 10; display[2] = (p / 10) % 10; display[3] = (p / 1) % 10; lcd_bigchar(0, display[0]); lcd_bigchar(4, display[1]); lcd_bigchar(8, display[2]); LCD_goto(13, 0); LCD_puts("MM"); LCD_goto(13, 1); LCD_puts("RS"); } }
int main(void) { uint8_t cmd; uint8_t dispMode = MODE_MAIN; static int8_t direction = PARAM_UP; hwInit(); showTimeMasked(); ds18x20Process(); sensTimer = TEMP_MEASURE_TIME; while(1) { // Update sensors with SENSOR_POLL_INTERVAL period if (!sensTimer == 0) { sensTimer = SENSOR_POLL_INTERVAL; ds18x20Process(); if (bmp180HaveSensor()) bmp180Convert(); dht22Read(); } // Check alarm checkAlarm(); // Update brightness only when not in brightness setup if (dispMode != MODE_BRIGHTNESS) calcBrightness(); // Get command from buttons cmd = getBtnCmd(); // Beep on button pressed if (cmd != BTN_STATE_0) { if (cmd < BTN_0_LONG) startBeeper(BEEP_SHORT); else startBeeper(BEEP_LONG); } // Stop scrolling on any button pressed if (cmd != BTN_STATE_0) matrixHwScroll(MATRIX_SCROLL_STOP); // Handle command switch (cmd) { case BTN_0: direction = PARAM_UP; switch (dispMode) { case MODE_EDIT_TIME: rtcNextEditParam(); break; case MODE_EDIT_ALARM: alarmNextEditParam(); break; } break; case BTN_1: direction = PARAM_UP; case BTN_2: if (cmd == BTN_2) direction = PARAM_DOWN; switch (dispMode) { case MODE_MAIN: startScroll(cmd - BTN_1); break; case MODE_EDIT_TIME: rtcChangeTime(direction); break; case MODE_EDIT_ALARM: alarmChange(direction); break; case MODE_BRIGHTNESS: changeBrightness(direction); break; case MODE_TEST: displayChangeRotate(direction); break; } break; case BTN_0_LONG: if (dispMode == MODE_MAIN) { dispMode = MODE_EDIT_TIME; rtcNextEditParam(); } else { rtc.etm = RTC_NOEDIT; alarmSave(); alarm.eam = ALARM_NOEDIT; dispMode = MODE_MAIN; showTimeMasked(); } break; case BTN_1_LONG: if (dispMode == MODE_MAIN) { dispMode = MODE_EDIT_ALARM; alarmNextEditParam(); } break; case BTN_2_LONG: if (dispMode == MODE_MAIN) { dispMode = MODE_BRIGHTNESS; showBrightness(direction, MASK_ALL); } break; case BTN_0_LONG | BTN_1_LONG: displaySwitchHourZero(); dispMode = MODE_MAIN; showTimeMasked(); break; case BTN_1_LONG | BTN_2_LONG: displaySwitchBigNum(); dispMode = MODE_MAIN; showTimeMasked(); break; case BTN_0_LONG | BTN_2_LONG: displaySwitchHourSignal(); dispMode = MODE_MAIN; showTimeMasked(); break; case BTN_0_LONG | BTN_1_LONG | BTN_2_LONG: dispMode = MODE_TEST; break; } // Show things switch (dispMode) { case MODE_MAIN: showMainScreen(); break; case MODE_EDIT_TIME: showTimeEdit(direction); break; case MODE_EDIT_ALARM: showAlarmEdit(direction); break; case MODE_BRIGHTNESS: showBrightness(direction, MASK_NONE); break; case MODE_TEST: showTest(); break; } } return 0; }