2012-07-17 137 views
0

我正在写一个领导segement为一些代码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并停留在那里

我曾试图修复它,但是已经缩短了。

+1

“由于某种原因它从8变为42”它试图告诉你最终问题的答案。现在你需要做的就是写一个能够告诉你问题的程序。 – 2012-07-17 17:26:51

+0

@MarkByers:那让我的一天:) – Constantinius 2012-07-17 17:28:19

+0

昨天你不是很问这个问题吗编辑:你没有。这些答案有什么理由不起作用? http://stackoverflow.com/questions/11512918/is-there-a-way-you-can-decrement-an-array-in-a-periodic-fashion-in-c – Wug 2012-07-17 17:29:45

回答

0

你改变COUNT2的价值在这条线:

count2 = count2/10; 

我得到你所描述什么印象,COUNT2是什么是应该是从8将7 ... 0

+0

是的,它应该这样做 – user1175889 2012-07-17 17:48:39

0

你不仅仅是每5秒递减count2,你也会反复将它除以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; 
} 
+0

是的,我现在要试试这个 – user1175889 2012-07-17 17:35:22

+0

非常感谢你Chepner,它终于工作 – user1175889 2012-07-17 17:49:54

0

我会重写主循环是这样的:

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

只有一个循环,只有一个辅助以外的循环计数器(DIV10)。