HD44780 LCD模块的上电初始化


10

我正在使用HD44780克隆LCD模块KS0066U。除非我快速重启设备电源(开->关->开),否则一切正常。由于某种原因,电源中断时间非常短,导致显示模块无法正确初始化为1行LCD而不是2行LCD显示器。什么会导致这种行为?有什么办法可以防止它在软件中?

编辑:我在4位模式而不是8位模式下使用显示控制器。


似乎没有人认为您的问题值得投票,这很奇怪。
Kortuk

一些HD44780克隆的数据表编写得很差。我的目标是就如何初始化它们的正确方式进行对话。也许我是唯一在4位模式下使用它们时遇到问题的人。
mjh2007

不,我现在正以4位模式运行时遇到同样的麻烦。自从我上一次编写一个简单的字符LCD以来已经有15年了,我记得在学校时调试它确实很痛苦。不过,我与您的距离并不远-我什至无法正确初始化,因为我现在还不能显示单个字符。:)
戴夫

Answers:


4

我更改了初始化代码,以便它两次发送了函数设置命令的高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;


2

我的猜测是您在初始化序列中缺少必要的延迟。如果您在尝试发送命令时显示繁忙,则该命令将被忽略。如果开始执行过程时,显示屏处于四位模式并且刚刚将“ 0000”作为命令的前半部分显示,那么当您输入“ 0011”时,显示将整个命令显示为“ 00000011” ,这将导致显示屏忙达1.6ms。

顺便说一句,如果可能的话,最好以如下方式连接来自显示器的低位数据线:当向显示器发送“ 0011”命令时,显示器看到的全部8位将形成一个模式设置命令这对于您使用的显示类型是正确的。这将有助于避免在重置已使用的显示器时出现任何显示器故障(如果可以无故障地进行重置,则定期重置显示器是个好主意,因为它将确保显示器以某种方式进入不良模式时可以修复)本身)。


1

我找到了解决该问题的方法:

在初始化/配置LCD控制器之前,我在启动时添加了1000毫秒的延迟。对我来说效果很好。

较低的延迟(100、200ms)效果不佳。只需注意:它仅发生在4位数据总线中。

祝好运!


0

在代码中插入延迟,以便在打开代码时使LCD足够长的时间可以在启动时进行初始化。最多几百毫秒。

您也可以尝试在启动后将LCD电源连接到微控制器并关闭LCD电源一秒钟。


启动时已经有100毫秒的延迟
mjh2007

然后尝试我的其他建议。您甚至可以直接通过引脚控制LCD电源。它消耗的电流不应超过几个mA。
Thomas O

真的有最大允许延迟吗?我认为这些LCD的主要目的是等待最少的时间,但是如果您无法正确设定时间,则可以放心地等待更长的时间。
戴夫

@Dave,您可能误解了“最大延迟”,这只是我建议的明智延迟。例如,等待几个小时会有些极端……
Thomas O

大声笑!好吧,我想这就是您的意思,但是我想确保自己没有遗漏任何东西,因为我还没有初始化LCD。我想知道我是否应该去拿锅,以确保不是把对比度搞砸了。:)
Dave

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.