-3
  • プログラミング言語: C
  • プラットフォーム: PIC マイクロコントローラ 8 ビット
  • 問題数: 2

数字表示には4桁の7セグメントディスプレイを使用しています。次のような7セグメントに文字/数字を表示する関数がいくつかあります。

zero() // displays 0 on the 7-segment.
one() // displays 1 on the 7-segment.
two() // displays 2 on the 7-segment.
...

これで、7 セグメント ディスプレイに表示する数字 (1435 など) ができました。私の現在のアルゴリズムは次のとおりです。

  1. 数値 1435 から個々の数字を抽出します (数字を 1、4、3、5 に分けます)。SDDS

    • 7セグのdigit1に1が表示されます。
    • 7 セグの digit2 に 4 が表示されます。
    • 7 セグの digit3 に 3 が表示されます。
    • 7セグの4桁目に5が表示されます。
  2. これらの個々の数字を表示するために、次のように「10」の if-else 条件を使用しています。

    • 表示する桁 == 0 の場合 -> 関数 zero() を実行します。そうしないと
    • 表示する桁 == 1 の場合 -> 関数 one() を実行します。そうしないと
    • 表示する桁 == 2 の場合 -> 関数 two() を実行します。
    • ...
    • ...
    • ...

したがって、この実装 (番号 1435 の場合) を出力すると、いくつかの if-else チェックが実行されます。

  • 数字1を表示するための2つのチェック
  • 数字 4 を表示するための 5 つのチェック
  • 数字 3 を表示するための 4 つのチェック
  • 数字 5 を表示するための 6 つのチェック
  • 数が変更されていなくても、 loop() 関数で「定期的かつ不必要に」実行される合計17のチェック(これが問題番号1です)

問題番号 2 : この実装は、その数値をインクリメント/デクリメントする必要がある場合 (1435 から 1436、次に 1437 など)、if-else チェックの数も変更されるため、非効率的です。数値の変化は滑らかではありません。これは、「0」が if-else チェックの最初であるため、すばやく表示されることを意味します。一方、'9' は if-else チェックの最後なので、表示されるまでに 10 回のチェックを行う必要があります。これにより、表示される桁が 0 から 9 に向かって増加するにつれて、実装が大幅に遅くなります。2 つの問題を解決するには、どのように実装すればよいでしょうか?

前もって感謝します。

4

1 に答える 1