3

好的,这就是我正在尝试用 C 编程的内容。

我有一个来自 ATmega32 上的 ADC 的 8 位二进制信号。

现在我想将该信号转换为一个带有 15 个 LED 的条形,输入值越高,该条形越多。所以基本上我想将我的 8 位信号缩减为 4 位信号,将其转换为十进制并以递增的条形显示。

我首先想到检查我的输入是否在特定范围内(始终是 255/15 的范围),但我就是不知道怎么做。

仅检查输入是否高于特定值是行不通的,因为这样一次可能有多个条件为真。

你知道我怎么能解决这个问题吗?非常感谢任何帮助。;) 谢谢!

4

1 回答 1

2

用这个:

uint8_t adc = GET_ADC_VALUE();

// Say LED is a 16-bit register

LED = (adc ? (1U << ((adc >> 4) + 1)) - 1 : 0x000);

所以只有 ADC 值0使所有 LED 熄灭,所有其他 ADC 值打开 1 到 16 个 LED。这样做的好处是不使用任何除法(ATmega 没有除数指令)。

编辑:上面的代码实际上假设有 16 个 LED,如果你有 15 个 LED 就这样做:

LED= (1U << (adc >> 4)) - 1;
于 2012-11-01T21:16:41.817 回答