Как выполнить несколько действий в цикле While ? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Подскажите как выполнить несколько действия в бесконечном цикле while (1). Нужно чтобы мигали два светодиода и считывалось состояние кнопки и от нажатия загорался третий светодиод. Запустил код, но в цикле выполняется только мигание светодиодов, а оператор if, в котором считывается состояние кнопки, не работает. Если например оставить один оператор if, то работает. Подскажите как нужно записывать, чтобы выполнилось несколько действий ?
while (1)
{
PORTB7=1;
_delay_ms(1000);
PORT7=0;
_delay_ms(1000);
PORTB6=1;
_delay_ms(1000);
PORT6=0;

{
        if (i=1)
        {
            PORTB3=1;
        }
        else
        {
            PORT3=0;
        }
}

Решение задачи: «Как выполнить несколько действий в цикле While ?»

textual
Листинг программы
while (1==1)
    {
        switch (PIND&(1<<PORTD))
        {
        case 1: PORTB=0b00000000;
        break;
        case 0: PORTB=0b00000100;
        break;
        }
    
    
    if (butstate==0)
    {PORTB =0b10000000;
        _delay_ms(1000);
        PORTB =0b00001000;
        _delay_ms(1000);
        }
    }
}

Объяснение кода листинга программы

  1. Проверяется условие 1==1, которое всегда истинно, поэтому цикл будет выполняться бесконечно.
  2. В каждой итерации цикла выполняется операция побитового И (AND) между PIND и 1<<PORTD, результат которой сохраняется в переменной PIND.
  3. В зависимости от значения PIND, выполняется соответствующий блок кода в блоке switch.
  4. Если butstate равно 0, то выполняется блок кода, который включает в себя три действия:
    • PORTB устанавливается в 0b10000000.
    • Выполняется задержка на 1000 миллисекунд с помощью функции _delay_ms.
    • PORTB устанавливается в 0b00001000.
    • Выполняется задержка на 1000 миллисекунд с помощью функции _delay_ms.

Оцени полезность:

5   голосов , оценка 4.4 из 5