你能告诉我 convertLedNumberToBit 和 LedDriver_TurnOn 是做什么的吗?我不明白 1 << (num - 1)
和 |=
发生了什么
static uint16_t * ledsAddress;
static uint16_t convertLedNumberToBit(int ledNumber)
{
return 1 << (ledNumber - 1);
}
void LedDriver_TurnOn(int ledNumber)
{
*ledsAddress |= convertLedNumberToBit(ledNumber);
}
最佳答案
要在 I/O 端口 ledsAddress
处“打开”LED[ledNumber],必须将等效位设置为“1”。但是,在更改 I/O 端口值时,您必须保持所有其他 LED 的状态仍为“ON”。convertLedNumberToBit(int ledNumber)
使用掩码 b0000000000000001
(16 位)通过切换到 (ledNumber-1) 的左侧将 ledNumber 位设置为“1”{ledNumber 为 1 时不需要移位。
例如: (ledNumber = 4) => 返回值是 b0000000000001000
= 0x0008
。
然后调用 |= convertLedNumberToBit(ledNumber)
将仅将 ledNumber 位强制为“1”,而不会通过二进制或来更改其他位。
例如:(led1、led3 和 led7 为“ON”)
在 OR b0000000001000101
= 0x0045
之前。
LedDriver_TurnOn(4) => b0000000000001000
= 0x0008
在 OR b0000000001001101
= 0x004D
之后。
void LedDriver_TurnOff(int ledNumber)
{
*ledsAddress &= ~(convertLedNumberToBit(ledNumber));
}
关于C BitWise - "1 << (num - 1)"和 "|="有什么作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40551598/