niepan 发表于 2014-3-6 10:55:25

求助"((data & LCD_DATA_MARK)>> LCD_DATA_SHIFT)" 如何理解

#if defined __AVR_ATmega32__
    #define LCD_DATA_PORTPORTB
    #define LCD_DATA_DDR   DDRB
    #define LCD_DATA_MARK0xF0
    #define LCD_DATA_SHIFTPB4

    #define LCD_WR_PORTPORTB
    #define LCD_WR_DDR   DDRB
    #define LCD_WR       PB6

    #define LCD_RS_PORTPORTB
    #define LCD_RS_DDR   DDRB
    #define LCD_RS       PB7

    #define LCD_EN_PORTPORTB
    #define LCD_EN_DDR   DDRB
    #define LCD_EN       PB5

#elif defined(__AVR_ATmega48__)|| defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__)
    #define LCD_DATA_PORTPORTB
    #define LCD_DATA_DDR   DDRB
    #define LCD_DATA_MARK0x3C
    #define LCD_DATA_SHIFTPB2


    #define LCD_RS_PORTPORTC
    #define LCD_RS_DDR   DDRC
    #define LCD_RS       PC3

    #define LCD_EN_PORTPORTD
    #define LCD_EN_DDR   DDRD
    #define LCD_EN       PD5
#endif

#if defined __AVR_ATmega32__
    LCD_DATA_PORT = (LCD_DATA_PORT & LCD_DATA_MARK) | ((data & LCD_DATA_MARK)>> LCD_DATA_SHIFT);
#elif defined(__AVR_ATmega48__)|| defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__)
    LCD_DATA_PORT = (LCD_DATA_PORT & ~(LCD_DATA_MARK)) | ((data >> LCD_DATA_SHIFT) & LCD_DATA_MARK);
#endif

"((data & LCD_DATA_MARK)>> LCD_DATA_SHIFT)" 如何理解

waterghost 发表于 2014-3-6 11:14:42

#define LCD_DATA_SHIFTPB4   去看看PB4的定义应该是“4”.把data 高4位数据移到低4位去。
页: [1]
查看完整版本: 求助"((data & LCD_DATA_MARK)>> LCD_DATA_SHIFT)" 如何理解