串行指令位不清楚
Serial Instruction bit not clear
我买了一个便宜的 Wingstar 144x32 LCD,因为如果能把它插到我的 NodeMCU 上显示一些信息就好了。
我没有预料到的是,在 Internet 上的任何地方我都找不到适用于该 LCD 的工作库。所以我想我会自己写。
我花了几个小时通读 datasheet, trying to figure out how the SPI instructions were passed to the LCD. I then discovered that on some other site 有一个用于 Arduino 的示例代码(太长以至于无法正确理解)和一个用于 ATMega 的示例代码,它很短并且更容易理解。
我打开了文件,看到界面相当 "simple",如果我可以这么说的话。看起来像这样:
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
的作用,但我继续前进。
我随机选择了 "function set" 指令和 converted it 二进制文本,看看它是否按照我的想法去做。
0x38 = 0000 0000 0011 1000
不包括前 8 个字符(这些字符没有意义),我剩下 00111000
,将它放在那里是有意义的:
因为:DL=1(选择了 8 位接口,就像 ATMega 代码中的注释一样 - 很棒)和 RE=0(基本说明,如 ATMega 代码中的注释 - 太棒了!)。
但现在真正的问题是:指令代码中的 "X" 是什么?我已经搜索了整个数据表,但没有找到任何有关 "X"-es 的信息。他们为什么不一致?他们应该在那里做什么?
希望我没有把事情搞砸。
非常感谢任何帮助。
它们是“无关紧要”的位。阅读时,它们不包含任何有用的信息。在写入时,它们什么也不做。
我买了一个便宜的 Wingstar 144x32 LCD,因为如果能把它插到我的 NodeMCU 上显示一些信息就好了。
我没有预料到的是,在 Internet 上的任何地方我都找不到适用于该 LCD 的工作库。所以我想我会自己写。
我花了几个小时通读 datasheet, trying to figure out how the SPI instructions were passed to the LCD. I then discovered that on some other site 有一个用于 Arduino 的示例代码(太长以至于无法正确理解)和一个用于 ATMega 的示例代码,它很短并且更容易理解。
我打开了文件,看到界面相当 "simple",如果我可以这么说的话。看起来像这样:
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
的作用,但我继续前进。
我随机选择了 "function set" 指令和 converted it 二进制文本,看看它是否按照我的想法去做。
0x38 = 0000 0000 0011 1000
不包括前 8 个字符(这些字符没有意义),我剩下 00111000
,将它放在那里是有意义的:
因为:DL=1(选择了 8 位接口,就像 ATMega 代码中的注释一样 - 很棒)和 RE=0(基本说明,如 ATMega 代码中的注释 - 太棒了!)。
但现在真正的问题是:指令代码中的 "X" 是什么?我已经搜索了整个数据表,但没有找到任何有关 "X"-es 的信息。他们为什么不一致?他们应该在那里做什么?
希望我没有把事情搞砸。
非常感谢任何帮助。
它们是“无关紧要”的位。阅读时,它们不包含任何有用的信息。在写入时,它们什么也不做。