c - 串行指令位不清楚

标签 c arduino bit-shift spi atmega

我买了一个便宜的 Wingstar 144x32 LCD,因为将它插入我的 NodeMCU 以显示一些信息会很好。

没有期待的是,我在互联网上的任何地方都找不到适用于该 LCD 的工作库。所以我想我应该自己写。

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

我打开了文件,发现接口(interface)相当“简单”,如果我可以这么说的话。它看起来像这样:

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做,我继续前进。

我随机选择了“函数集”指令和 converted it到二进制文本,看看它是否按照我的想法进行。

0x38 = 0000 0000 0011 1000

排除前 8 个字符(这对那些没有意义),我剩下 00111000 ,把它放在那里是有意义的:

enter image description here

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

但现在真正的问题是:指令代码中的那些“X”是什么?我已经搜索了整个数据表,但没有发现任何关于这些“X”的信息。他们为什么不一致?他们应该在那里做什么?

我希望我没有把事情搞得太糟。

非常感谢任何帮助。

最佳答案

它们是“无关紧要”的位。阅读时,它们不包含任何有用的信息。在写入时,它们什么都不做。

关于c - 串行指令位不清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46138927/

相关文章:

c - C 中 SWITCH CASE 中的多个字符

c - 如何循环打印特殊字符?

arduino - 使 ESP32 WiFi/蓝牙协同工作

c - Bitshift 在不应该的时候导致溢出

C shift right 在我的程序中对 int 类型无法正常工作

c - 如何获取负数的最后 16 位二进制数字并将它们连接起来?

c++ - 以下方式调用函数有什么区别?

c - C中十进制到二进制的转换

c++ - 如何在 Arduino 上将时间设置为中央时区?

c++ - 使用 sprintf 进行字符串连接