[uquote="Dimon456",url="/forum/viewtopic.php?p=4164331#p4164331"]В конечных автоматах точно будет сильно заумно, слишком много событий и операции.
Самое главное, событий, а операций там столько же будет.
Один вопрос: за чем две совершенно одинаковых переменные?
если их объединить, то код примет вид
Спойлер
Код: Выделить всё
while (1) {
ScanButtons();
if (flag_IDR5) {
if(++nastroyki.menu_btn > 4) nastroyki.menu_btn = 0;
}
switch (nastroyki.menu_btn) {
case 0:
LCD_SetPos(0, 0);
LCD_String("Bobr_stm32");
break;
case 1:
if(flag_IDR4) if(danie.a < 4095) danie.a++;
if(flag_IDR8) if(danie.a) danie.a--;
sprintf(nastroyki.buf, "a=%2d ", danie.a);
LCD_SetPos(0, 0);
LCD_String(nastroyki.buf);
break;
case 2:
if(flag_IDR4) if(danie.b < 4095) danie.b++;
if(flag_IDR8) if(danie.b) danie.b--;
sprintf(nastroyki.buf2, "b=%2d ", danie.b);
LCD_SetPos(0, 0);
LCD_String(nastroyki.buf2);
break;
case 3:
if(flag_IDR4) if(danie.c < 4095) danie.c++;
if(flag_IDR8) if(danie.c) danie.c--;
sprintf(nastroyki.buf4, "c=%2d ", danie.c);
LCD_SetPos(0, 0);
LCD_String(nastroyki.buf4);
break;
case 4:
if(flag_IDR4) if(danie.d < 1023) danie.d++;
if(flag_IDR8) if(danie.d) danie.d--;
sprintf(nastroyki.buf6, "d=%2d ", danie.d);
LCD_SetPos(0, 0);
LCD_String(nastroyki.buf6);
break;
default: break;
}
}
ScanButtons() можно объявить как inline функцию.[/uquote]
Меня заинтересовал ваш код у вас флаги в качестве кнопок?И меня заинтерисовала функция ScanButtons()? Что это ? И с чем его едят.Код ваш похож на мой единственное что переход на ноль при ++ и переход с нуля на 1023 при --.И замедление показаний.Ну а так ваш код лучше.Правда я использовал число 4095 дискретность ацп.1023 у avr.Да и ещё при переключении меню сначала нажимаем кнопку я выставляю флаг потом при ожатии флаг сбрасываю и срабатывает меню.
Добавлено after 2 minutes 23 seconds:
[uquote="AlanDrakes",url="/forum/viewtopic.php?p=4164036#p4164036"][uquote="ivan dimir",url="/forum/viewtopic.php?p=4163989#p4163989"][А чем писать код?[/uquote]
Не знаю, как кто, но я пишу руками. =]
[uquote="ivan dimir",url="/forum/viewtopic.php?p=4163989#p4163989"]И чем вас смущает эта строка.Нажимаю кнопку выставляется флаг.Когда выставляется флаг в обработчике прерываний по таймеру начинает счёт переменная.[/uquote]
Скорее всего компилятор должен жаловаться на логичнское И, между частью операндов в строке. И что он МОЖЕТ ошибиться, если нет скобок.
Жалоба на неоднозначную трактовку сравнений.
[uquote="ivan dimir",url="/forum/viewtopic.php?p=4163989#p4163989"]Покажите хоть пример.Кусочек кода моего .Так как нужно писать .[/uquote]
Хойку.
Извините, не сдержался.[/uquote]
Да код написан не правильно.Но работает.Исправлю.Спасибо за замечания.