Pic 显示循环在 5 和 0 之间

Pic Display cycle between 5 and 0

这是我们的代码。我们试图让显示周期在 5-0 之间,但它停留在 5。

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。

我们的 proteus 设计和其他东西都是真实的。唯一的问题是我们写的代码。

图片16F877A

您的 if 语句将计数从 5 减少到 4,但是 for 循环随后将值增加回 5。一旦 count 达到 5,这将永远重复。您需要重新设计逻辑以获得 up-ramp/down-ramp 行为(在 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 标志被反转。