0

我有一个关于掩码和位移的问题。

我有以下代码:

void WriteLCD(unsigned char word, unsigned commandType, unsigned usDelay)
{
    // Most Significant Bits
    // Need to do bit masking for upper nibble, and shift left by 8.
    LCD_D = (LCD & 0x0FFF) | (word << 8);
    EnableLCD(commandType, usDelay); // Send Data

    // Least Significant Bits
    // Need to do bit masking for lower nibble, and shift left by 12.
    LCD_D = (LCD & 0x0FFF) | (word << 12);
    EnableLCD(commandType, usDelay); // Send Data
}

“字”为 8 位,通过 4 位 LCD 接口输入。这意味着我必须在发送数据之前将最高有效位和最低有效位分开。

LCD_D 是一个 16 位数字,其中只有我传递给它的最重要的位我想要真正“做”一些事情。我希望保留之前的 12 位,以防他们在做其他事情。

在将上下半字节适当地传递给 LCD_D 方面,我的位屏蔽和移动“字”的逻辑是否正确?

谢谢您的帮助!

4

1 回答 1

1

在这两种情况下,除了需要在移位之前将“word”转换为无符号短(16 位)之外,看起来还可以,这样移位就不会在 char 上执行并丢失数据。例如:

LCD_D = (LCD & 0x0FFF) | ((unsigned short) word << 8);
于 2013-02-12T08:38:15.433 回答