0

LED セグメントの数値が 5 秒ごとに 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

メインループを次のように書き直します。

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

ループカウンター(div10)以外のループと補助は1つだけです。

于 2012-07-17T17:44:46.373 に答える
0

次の行で count2 の値を変更します。

count2 = count2 / 10;

そして、あなたが説明したことから、count2 は 8 から 7 へ、そして ... から 0 へと進むべきものであるという印象を受けます。

于 2012-07-17T17:27:56.027 に答える
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;
}
于 2012-07-17T17:28:42.250 に答える