带C代码的4位LCD

带C代码的4位LCD,c,microcontroller,microprocessors,lcd,C,Microcontroller,Microprocessors,Lcd,我正在使用Winstar显示LCD(WH2004A-YYK-CP)和STM32处理器,代码是用C编写的。我需要以4位模式运行它。我运行它并写下我想要的 正如您所知,4位模式将8位数据发送为4位的2倍。问题是,当我在两个半字节之间重置时,它会打印奇怪的字符,无论我重置多少,它都不能正常工作。我想出的唯一解决办法是多次重置它 为了弄清楚发生了什么,我在两个半字节(每个4位)之间增加了2秒的延迟,并打印了一个长句子。所以每当我重置它时,处理器就会等待发送第二个半字节 我正在重置它,它打印一些奇怪的东西

我正在使用Winstar显示LCD(WH2004A-YYK-CP)和STM32处理器,代码是用C编写的。我需要以4位模式运行它。我运行它并写下我想要的

正如您所知,4位模式将8位数据发送为4位的2倍。问题是,当我在两个半字节之间重置时,它会打印奇怪的字符,无论我重置多少,它都不能正常工作。我想出的唯一解决办法是多次重置它

为了弄清楚发生了什么,我在两个半字节(每个4位)之间增加了2秒的延迟,并打印了一个长句子。所以每当我重置它时,处理器就会等待发送第二个半字节

我正在重置它,它打印一些奇怪的东西,第二次重置后它什么也不打印,第三次重置后它再次正确打印。第四次重置会再次打印奇怪的东西,第五次重置不会打印任何东西,第六次重置会再次正确打印。。。就这样继续下去。 因此,我现在确信问题在于这些被分割的字节

类似的代码在8位模式下工作得非常好

我想问的是: 如何使用C代码确保“当我重置STM32处理器时,LCD没有等待某些数据的第二个半字节,而这些数据的第一个半字节是在前一个会话中发送的”

更新:

我也将我的代码发送到这里:


LCD命令也在这里:

通常,有一种方法可以重置LCD设备,这是处理器启动的一部分

这样,处理器复位也会使LCD处于已知状态

您需要掌握数据表(或其他编程规范),并了解如何完成它。几乎可以肯定的是,有一种方法可以使LCD恢复到已知的初始状态


否则,您可能需要将复位开关同时连接到处理器和LCD控制器。

以下是流程图,详细说明了在4位模式下初始化LCD控制器所需的所有步骤


看看我是如何接近4位模式的(尽管处理器不同——我是AVR的人):@tuğrulbüyükı351; k我添加了代码@h2co3当您卸下部件时会发生什么变化:
/*将8位模式设置3次(!)*/
,您是否尝试过,或者您能为我尝试一下?我将尝试实现类似的一个。这正是我所想的。我有数据表,我搜索关键字“重置”和“开始”等,但甚至没有匹配。我意识到,即使有一个命令,它也不会工作,因为同样的原因:LCD会把它一分为二。现在我想我们需要对它进行一些修改。你现在在4位模式下正确地初始化LCD了吗?是的,现在完全好了!