2013-02-12 41 views
0

我對掩碼和位移都有疑問。4位LCD控制的PIC位掩碼和移位

我有以下代碼:

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

在兩種情況下,除了在轉換之前需要將「word」轉換爲無符號短符號(16位)以外,看起來沒有問題,因此不會在char上執行轉換並丟失數據。例如:

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

感謝您的幫助!演員做到了。 – 2013-02-14 02:55:33