void KeyCheck(void){ if ( BitIsSet(PrevKey, KEY_STEP_FLAG) //Нужно повторное считывание порта STEP && BitIsClear(KEY_PORTIN_STEP, KEY_STEP_PORT) ) SetBit(Key, KEY_STEP_FLAG); if ( BitIsSet(PrevKey, KEY_OK_FLAG) //Нужно повторное считывание порта OK && BitIsClear(KEY_PORTIN_OK, KEY_OK_PORT) ) SetBit(Key, KEY_OK_FLAG); PrevKey = 0; if (Key){ //Да, есть нажатие какой-то клавиши if (AlarmBeepIsSound()){ //Если сигнал будильника включен то выключить его SoundOff(); SetClockStatus(csClock, csNone); //Вернутся в нормальный режим Key = 0; BeginScakKeyRepeat(); return; //и выйти т.к. это нажатие выключения будильника } TimeoutReturnToClock(TIMEOUT_RET_CLOCK_MODE_MIN); //Установить интервал таймаута для возврата в основной режим SoundOn(SND_KEY_BEEP); //Пискнуть кнопкой } if BitIsSet(Key, KEY_STEP_FLAG){ //Шаг MenuStep(); } else if BitIsSet(Key, KEY_OK_FLAG){ //ОК MenuOK(); } Key = 0; //Все клавиши отработаны BeginScakKeyRepeat(); }
void KeyScan(void){ if BitIsClear(KEY_PORTIN_STEP, KEY_STEP_PORT) SetBit(PrevKey, KEY_STEP_FLAG); if BitIsClear(KEY_PORTIN_OK, KEY_OK_PORT) SetBit(PrevKey, KEY_OK_FLAG); if (PrevKey) //Какая-то клавиша нажата, запускаем функцию проверки через защитынй интервал SetTimerTask(KeyCheck, PROTECT_PRD_KEY); else //Ничего не нажато, продолжаем сканировать SetTimerTask(KeyScan, SCAN_PERIOD_KEY); }
void TaskAlarm (void) { if (PM_PinIsClear(ALARM_STATUS) && PM_PinIsClear(ALARM_PAGER))//fprintf(stdout, "Alarm in GuardMode"); { } else if (PM_PinIsClear(ALARM_STATUS) && PM_PinIsSet(ALARM_PAGER)) { //fprintf(stdout, "Alarm is CALLING"); if (BitIsClear(status, ST_ALARM)) { SetTask(TaskCall); } } else { /*if (PM_PinIsSet(ALARM_STATUS)) { fprintf(stdout, "STATUS is High\t"); } else { fprintf(stdout, "STATUS is low\t"); } if (PM_PinIsSet(ALARM_PAGER)) { fprintf(stdout, "PAGER is High\n"); } else { fprintf(stdout, "PAGER is low\n"); }*/ } SetTimerTask(TaskAlarm, 1000); }