我正在使用HD44780克隆LCD模块KS0066U。除非我快速重启设备电源(开->关->开),否则一切正常。由于某种原因,电源中断时间非常短,导致显示模块无法正确初始化为1行LCD而不是2行LCD显示器。什么会导致这种行为?有什么办法可以防止它在软件中?
编辑:我在4位模式而不是8位模式下使用显示控制器。
我正在使用HD44780克隆LCD模块KS0066U。除非我快速重启设备电源(开->关->开),否则一切正常。由于某种原因,电源中断时间非常短,导致显示模块无法正确初始化为1行LCD而不是2行LCD显示器。什么会导致这种行为?有什么办法可以防止它在软件中?
编辑:我在4位模式而不是8位模式下使用显示控制器。
Answers:
我更改了初始化代码,以便它两次发送了函数设置命令的高4位半字节。接下来,我怨恨高4位半字节,然后是低4位半字节。这与数据表不匹配,该数据表似乎表明您可以发送高4位半字节然后发送功能设置命令高4位,然后发送低4位。
//有时可以使用伪代码
port = 0x20;
e = 1; e = 0;
端口= 0x20;
e = 1; e = 0;
端口= 0xC0;
e = 1; e = 0;
//一直工作伪代码
port = 0x20;
e = 1; e = 0;
e = 1; e = 0;
端口= 0x20;
e = 1; e = 0;
端口= 0xC0;
e = 1; e = 0;
我的猜测是您在初始化序列中缺少必要的延迟。如果您在尝试发送命令时显示繁忙,则该命令将被忽略。如果开始执行过程时,显示屏处于四位模式并且刚刚将“ 0000”作为命令的前半部分显示,那么当您输入“ 0011”时,显示将整个命令显示为“ 00000011” ,这将导致显示屏忙达1.6ms。
顺便说一句,如果可能的话,最好以如下方式连接来自显示器的低位数据线:当向显示器发送“ 0011”命令时,显示器看到的全部8位将形成一个模式设置命令这对于您使用的显示类型是正确的。这将有助于避免在重置已使用的显示器时出现任何显示器故障(如果可以无故障地进行重置,则定期重置显示器是个好主意,因为它将确保显示器以某种方式进入不良模式时可以修复)本身)。
我找到了解决该问题的方法:
在初始化/配置LCD控制器之前,我在启动时添加了1000毫秒的延迟。对我来说效果很好。
较低的延迟(100、200ms)效果不佳。只需注意:它仅发生在4位数据总线中。
祝好运!
在代码中插入延迟,以便在打开代码时使LCD足够长的时间可以在启动时进行初始化。最多几百毫秒。
您也可以尝试在启动后将LCD电源连接到微控制器并关闭LCD电源一秒钟。
不确定这是否对您有帮助,但是我弄混了Arduino项目上的KS0066U。这是链接。