0

我正在为 LED 段上的数字编写代码,每五秒减少 1

我现在的实际代码是这个

FiveSecDelay+=1;
if (FiveSecDelay ==100)
{
    count2--; //decrement count2

    for (uint32_t x = 0; x < 4; x++) //split count to to individual digits
    {
        new_value[x] = count2 % 10;
        count2 = count2 / 10;
    }

    for (uint32_t i = 0; i < 4; i++)
    {
        Segment_Write(Digit[i],new_value[i]); assign  value to segments
    }
    FiveSecDelay =0;
}

我正在使用调度程序每毫秒调用一次函数,理论上这应该可以工作,因为我使用相同的技术为段分配值,发生的情况是我的起始值为 8,它应该得到 7 ,6,5,4 依此类推直到 0,但由于某种原因,它从 8 变为 42 并停留在那里

我曾试图修复它,但没有完成。

4

3 回答 3

0

You alter the value of count2 in this line:

count2 = count2 / 10;

And I get the impression from what you've described that count2 is what is supposed to be going from 8 to 7 to ... to 0.

于 2012-07-17T17:27:56.027 回答
0

我会像这样重写主循环:

for(uint32_t div10=1,i=0;i<4;i++,div10*=10)
   Segment_Write(Digit[i],(count2%(10*div10))/div10);

除循环计数器 (div10) 外,只有一个循环和一个辅助。

于 2012-07-17T17:44:46.373 回答
0

您不仅count2每 5 秒递减一次,而且还重复将其除以 10。您需要一个临时变量:

int temp_count = count2;   // Or whatever type count2 is
for (unit32_t x = 0; x < 4; x++)
{
    new_value[x] = temp_count % 10;
    temp_count /= 10;
}
于 2012-07-17T17:28:42.250 回答