#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.)