左移试图了解下面的代码中给出的follwing线的含义是:想了解AVR代码
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/#
我们错过了PDO,PD1和PD2的定义,并且我们错过了您遇到的实际问题陈述。如果你不明白左移是如何工作的,那么我们已经有问题了。如果您可以大声叫嚷PORTD是什么定义(即从这里的数据表中粘贴适当的注册信息),然后给我们一个问题标题,它能够准确反映您要解决的问题,并给我们一个问题陈述对未来访问者有用,我们将能够提供帮助。 –
@GeorgeStocker对不起,但我不同意'离题'的名称。它不寻求“调试帮助”,它确实有一个“明确的问题陈述”:“*试图理解*的含义。相反,在我看来,操作系统(可理解地)对于赋值中多余的“(0 << rs)|(0 << rw)”感到困惑。简单的答案是,将它们留在(即使多余)使得代码更易读,因为当'0 '术语*不*省略。 – dxiv
@dxiv我做了一些嵌入式编程;我们错过了关键信息,以帮助OP了解为什么在那里。在非常基本的层面上,这些值代表设置的寄存器设置;并且明确设置它们是有原因的。这个问题被搁置,让OP有机会解决这些不足之处:你会期望这个问题标题能够帮助其他人吗?你希望任何人都能够解决问题中的'为什么'而不必去别的地方?我们缺少信息。这就是为什么它被搁置。 –