3

さて、これが私がCでプログラムしようとしているものです。

ATmega32のADCからの8ビットバイナリ信号があります。

次に、その信号を、入力値が高くなるほど増加する15LEDのバーに変換したいと思います。したがって、基本的には、8ビット信号を4ビット信号にカットし、10進数に変換して、増加するバーに表示したいと思います。

私は最初、入力が特定の範囲(常に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 に答える