串行指令位不清晰

时间:2017-09-10 08:53:22

标签: c arduino bit-shift spi atmega

我买了一台便宜的Wingstar 144x32液晶显示器,因为将它插入我的NodeMCU以显示一些信息会很不错。

期待的是,在互联网上无处可寻找到该液晶显示器的工作库。所以我以为我自己写了。

我花了几个小时阅读datasheet,试图弄清楚SPI指令是如何传递给LCD的。然后我发现在其他一些site上有一个Arduino的示例代码(这个代码很长,无法正确理解)和一个用于ATMega的代码,它简短且易于理解。

我打开文件,看到接口非常简单",如果我可以这样说的话。它看起来像这样:

write_command(0x38); // function set -- 8 bit mode, basic instruction set
write_command(0x0F); // display control -- cursor on, blinking
write_command(0x01); // display clear
write_command(0x06); // entry mode -- cursor moves right, address counter increased by 1

write_command这里没什么重要的,因为它只通过SPI发送命令:

void write_command(unsigned char command) {
  SPI_WriteByte(0xF8); // send command header
  SPI_WriteByte(command&0xF0); // send high nibble
  _delay_us(250);
  SPI_WriteByte((command<<4)&0xF0); // send low nibble
  _delay_us(750);
}

尽管不了解&0xF0<<4)&0xF0做了什么,我继续前进。

我随机选择了&#34;功能集&#34;指示和converted it到二进制文本,看看它是否正在做我正在思考的事情。

0x38 = 0000 0000 0011 1000

排除前8个字符(对那些字符没有意义),我留下了00111000,这有意义将它放在那里:

enter image description here

因为: DL = 1 (选择了8位接口,就像ATMega代码中的注释 - 很棒)和 RE = 0 (基本指令,就像在在ATMega的代码中发表评论 - 太好了!)。

但现在真正的问题是:那些&#34; X&#34;在指令代码?我已经搜索了整个数据表,但没有发现那些&#34; X&#34; -es。为什么他们不一致?他们应该在那里做什么?

我希望我没有把它弄得太糟糕。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

他们'不关心'位。在阅读时,它们不包含有用的信息。在写作时,他们什么都不做。

相关问题