Как вернуться назад, когда нажата кнопка?

#c #microcontroller

Вопрос:

Когда я впервые нажимаю кнопку, она выполняет первую функцию, при втором нажатии она выполняет вторую задачу, когда при третьем нажатии я хочу вернуться и выполнить ту же первую функцию.

 void blinkcursor(void); int count = 0;  void blinkcursor(void) {   label:  if (button == 1) { //button pressed  if (count == 0) {  count  ;  set_cursor_position (1, 2);  lcd_cout(0x0f); //cursor blink  button = 0;  }  else if(count == 1) {  lcd_cout(0x0c); //blink off  button = 0;  }  goto label;  }  }  

Комментарии:

1. гото — это плохое использование. избегайте этого. просто переключайте значение туда и обратно между 1 и 0

Ответ №1:

Вы мало что сказали об общей структуре вашей программы, поэтому я просто предположу, что у вас запущен какой-то основной цикл, который регулярно проверяет состояние кнопки, выполняет все необходимые действия и устанавливает button значение 1 всякий раз, когда обнаруживает, что кнопка была нажата. Я также буду предполагать, что курсор по умолчанию не мигает и что кнопка используется только для переключения мигания курсора.

Теперь просто добавьте вызов следующей функции в свой основной цикл:

 bool blink_enabled = false;  void update_blink(void) {  if (button) {  // Button was pressed.  if (blink_enabled) {  // Turn off blinking.  lcd_cout(0x0c);  blink_enabled = false;  }  else {  // Turn on blinking.  set_cursor_position(1, 2);  lcd_cout(0x0f);  blink_enabled = true;  }  button = 0;  }  }  

(Возможно, вам потребуется добавить #include lt;stdbool.hgt; вверху, чтобы получить тип bool.)