如何通过避免if-else条件使我当前的代码有效?

时间:2016-02-08 20:52:59

标签: c microcontroller seven-segment-display

  • 编程语言: 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)。 SDS

    • 1将显示为7段的digit1。
    • 4将显示为7段的数字2。
    • 3将显示为7段的数字3。
    • 5将显示为7段的digit4。
  2. 要显示这些个别数字,请使用' ten' if-else条件如下:

    • 如果要显示的数字== 0 - >运行函数zero();其他
    • 如果要显示的数字== 1 - >运行函数one();其他
    • 如果要显示的数字== 2 - >运行函数two();
    • ...
    • ...
    • ...
  3. 因此,要打印的此实现(对于数字1435)将运行多个if-else检查。

    • 2检查显示数字1
    • 5检查显示数字4
    • 4检查显示数字3
    • 6检查显示数字5
    • 17次全面检查"定期和不必要地"在loop()函数中,即使数字未更改(这是问题编号1)

    问题2 :这个实现是低效的,因为当我需要增加/减少该数字时(1435到1436然后到1437等等),if-else检查的数量也是改变了所以数字的变化不顺利。这意味着,作为' 0' 0是if-else检查中的第一个,因此可以快速显示。另一方面' 9'是if-else检查中的最后一个,因此它必须在显示之前进行十次检查。这使得实现速度慢得多,因为要显示的数字从0增加到9.如何实现解决这两个问题?

    提前致谢。

1 个答案:

答案 0 :(得分:3)

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

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

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