尝试在下面给出的代码中理解以下行的含义:
ctrl =(0<<rs)|(0<<rw)|(1<<en);
请让我理解这一点。
#define LCD_DATA PORTB //LCD data port
#define ctrl PORTD
#define en PD2 // enable signal
#define rw PD1 // read/write signal
#define rs PD0 // register select signal
,
,
void LCD_cmd(unsigned char cmd)
{
LCD_DATA=cmd;
ctrl =(0<<rs)|(0<<rw)|(1<<en);
_delay_ms(1);
ctrl =(0<<rs)|(0<<rw)|(0<<en);
_delay_ms(50);
return;
}
来源:http://www.electronicshub.org/interfacing-16x2-lcd-avr-microcontroller/#
答案 0 :(得分:1)
ctrl =(0<<rs)|(0<<rw)|(1<<en);
相当于ctrl = (1<<en);
,这意味着向左移动1'en'次。
答案 1 :(得分:0)
看起来它将ctrl(PORTD)的使能位设置为1,等待1 ms然后将其设置为0.
代码没有显示它对硬件有何影响,但我的猜测是其中一个头文件中的某个地方是一些代码,它将PORTD转换为设备的寄存器级对象。
ctrl =(0<<rs)|(0<<rw)|(1<<en);
移位的要点是根据硬件的期望将正确的位值(在这种情况下为0,0和1)移动到寄存器中的正确位位置。