用于4位LCD控制的PIC位屏蔽和移位

时间:2013-02-12 01:27:26

标签: bit-manipulation pic masking bit-shift lcd

我有关于屏蔽和位移的问题。

我有以下代码:

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?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在两种情况下,除了需要在移位之前将“字”转换为无符号短(16位)之外,看起来还不错,因此不会对char执行移位并丢失数据。例如:

LCD_D = (LCD & 0x0FFF) | ((unsigned short) word << 8);