ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
13 ноября
1083266 Топик полностью
IBAH (04.03.2021 21:46, просмотров: 406) ответил Cкpипaч на Можно и так. Но если в одно состояние можно попасть из нескольких других (и выполнить одинаковые действия) возникнет дублирование кода.
Не делайте из кодирования культа! Дублирование кода можно избежать просто добавив еще одно состояние. 
static Timer_t t1;
static int Sost;

void Svetofor(void)
  {
  if(Sost==0)
    {//ожидаем нажатия кнопки
    Red=!0;//горит красный
    if(Knop)//проверяем кнопку
      {
      StartTimer(&t1,5000);
      Yellow=!0;//зажигаем желтый
      Sost=10;
      }
    }
  if(Sost==10)
    {//Горит красный и желтый
    if(Timer(&t1))
      {
      Red=0;
      Yellow=0;
      Green=!0;
      StartTimer(&t1,5000);
      Sost=15;
      }
    }
  if(Sost==15)
    {//здесь код который не хочется дублировать
    Sost==20;
    }
  if(Sost==20)
    {//Горит зеленый
    if(Timer(&t1))
      {
      Red=0;
      Yellow=!0;
      Green=0;
      StartTimer(&t1,5000);
      Sost=30;
      }
    }
  if(Sost==30)
    {//Горит желтый
    if(Timer(&t1))
      {
      Red=!0;
      Yellow=0;
      Green=0;
      StartTimer(&t1,5000);
      Sost=0;
      }
    }
  }4