C LED段上的递减值
我在写一个代码,让led上的数字每五秒减少1 我目前的实际代码是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
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);