-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.
...

现在我有一个数字(比如 1435)要显示在 7 段显示器上。我目前的算法如下:

  1. 从数字 1435 中提取单个数字(将数字分隔为 1、4、3、5)。sds

    • 1 将显示到 7 段的 digit1。
    • 4 将显示到 7 段的 digit2。
    • 3 将显示到 7 段的 digit3。
    • 5 将显示到 7 段的 digit4。
  2. 为了显示这些单独的数字,我使用了 '10' if-else 条件,如下所示:

    • 如果要显示的数字 == 0 -> 运行函数 zero(); 别的
    • 如果要显示的数字 == 1 -> 运行函数 one(); 别的
    • 如果要显示的数字 == 2 -> 运行函数 two();
    • ...
    • ...
    • ...

因此,要打印的这个实现(对于数字 1435)会运行几个 if-else 检查。

  • 2 检查显示数字 1
  • 5 检查显示数字 4
  • 4 检查显示数字 3
  • 6 检查显示数字 5
  • 即使数量没有改变,也会在 loop() 函数中“定期且不必要地”运行 17 次检查(这是问题编号 1)

问题 2:此实现效率低下,因为当我需要增加/减少该数字(1435 到 1436 然后到 1437 等等)时,if-else 检查的数量也发生了变化,因此数字的变化并不平滑。这意味着 '0' 是 if-else 检查中的第一个,因此它显示得很快。另一方面,'9' 是 if-else 检查中的最后一个,因此它必须经过十次检查才能显示出来。当要显示的数字从 0 增长到 9 时,这使得实现变得更慢。如何实现来解决这两个问题?

提前致谢。

4

1 回答 1

3

您可以使用指向表中函数的指针:

typedef void (*func)(); // type for functions
func functions[] = { zero, one, two, three, ... }
functions[3](); // example, will call three()

您必须提取所需的数字并将其用作表中的索引....

于 2016-02-08T21:01:51.827 回答