Pic Отображение цикла от 5 до 0 - PullRequest
1 голос
/ 10 ноября 2019

Вот наш код. Мы попытались сделать цикл отображения между 5-0, но он застрял на 5 *. 1001 *

void main()
{
    unsigned char count=0;
    unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
    TRISC=0;

    while(1) {

        for(count=0;count<6;count++) {
            PORTC=table[count];
            delay_ms(59);
            if(count==5 && count>=0)
            {
               count -= count;
            }
        }
    }
}

Идет к 5, но не возвращается к 0.

Наш дизайн протея идругие вещи это правда. Единственная проблема заключается в написанном нами коде.

Pic 16F877A

1 Ответ

2 голосов
/ 10 ноября 2019

Ваш оператор if уменьшает число с 5 до 4, но цикл for затем увеличивает значение обратно до 5. Как только count достигает 5, это будет повторяться вечно. Вам нужно будет перестроить логику, чтобы получить поведение с повышением / понижением (с циклом от 0 до 5). Попробуйте что-то вроде этого:

void main()
{
    unsigned char count=0;
    unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
    TRISC=0;

    bool increment = true;
    while(1) {

       PORTC=table[count];
       delay_ms(59);

       // Increment or decrement.
       count += increment ? 1 : -1;
       // Switch from incrementing to decrementing (or vice versa).
       if (count >= 5 || count <= 0) {
            increment = !increment;
       }
   }
}

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

...