C LED段上的递减值

C LED段上的递减值,c,segment,led,C,Segment,Led,我在写一个代码,让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 = cou

我在写一个代码,让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;
}
FiveSecDelay+=1;
如果(FiveSecDelay==100)
{
count2--;//递减计数2
对于(uint32_t x=0;x<4;x++)//将计数拆分为单个数字
{
新的_值[x]=count2%10;
count2=count2/10;
}
对于(uint32_t i=0;i<4;i++)
{
段写入(数字[i],新值[i]);为段赋值
}
FiveSecDelay=0;
}

我用一个调度程序每毫秒调用一个函数,理论上这应该是可行的,因为我用同样的技术给这些段赋值,结果是我的起始值是8,它应该得到7,6,5,4等等,直到0,但由于某种原因,它从8到42,并保持不变


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

您更改了此行中count2的值:


我从你描述的情况中得到的印象是count2应该是从8到7到。。。到0。

您不仅仅是每5秒递减计数2,您还重复将其除以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;
}
int temp\u count=count2;//或者不管count2是什么类型的
对于(unit32_t x=0;x<4;x++)
{
新值[x]=临时计数%10;
温度计数/=10;
}

我会像这样重写主循环:

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

for(uint32\u t div10=1,i=0;i“出于某种原因,它从8变为42”它试图告诉你最终问题的答案。现在你所需要做的就是编写一个程序来告诉你这个问题。@MarkByers:这让我很高兴:)你昨天不是问了一个非常像这样的问题吗编辑:你问了。这些答案不起作用有什么原因吗?是的,我明白你说的话。干杯,不,那些答案不起作用,我不知道为什么
for(uint32_t div10=1,i=0;i<4;i++,div10*=10)
   Segment_Write(Digit[i],(count2%(10*div10))/div10);