【发布时间】:2012-08-14 11:50:15
【问题描述】:
我正在使用 Winstar Display LCD (WH2004A-YYK-CP) 和 STM32 处理器,代码是用 C 语言编写的。我需要以 4 位模式运行它。我运行它并写了我想要的。
如您所知,4 位模式以 2 倍 4 位发送 8 位数据。问题是,当我在 2 个半字节之间重置时,它会打印出奇怪的字符,无论我重置多少,它都无法正常工作。我想出的唯一解决方案是多次重置。
为了弄清楚发生了什么,我在 2 个半字节(每个 4 位)之间添加了 2 秒延迟,并打印了一个长句子。因此,每当我重置它时,处理器都会等待发送第二个半字节。
我正在重置它,它打印出一些奇怪的东西,第二次重置后它什么也没打印,第三次重置后它再次正确打印。第 4 次重置它再次打印一些奇怪的东西,第 5 次没有打印,第 6 次再次正确打印......并像这样继续。 因此,我现在确定问题出在这些分割字节上。
类似的代码在 8 位模式下也能正常工作。
我要问的是: 我如何确定“当我重置 STM32 处理器时,LCD 不会等待在前一个会话中发送第一个半字节的某些数据的第二个半字节。”使用 C 代码?
更新:
我也在这里发送我的代码:http://pastebin.com/kHQQEqjx
LCD 命令也在这里:http://imgur.com/mfDlj
【问题讨论】:
-
看看我是如何接近 4 位模式的(虽然不同的处理器 - 我是 AVR 人):github.com/H2CO3/libavrutil/blob/master/src/lcd.c
-
@tuğrulbüyükışık 我添加了我的代码。 @h2co3 当你移除部件时会发生什么变化:
/* Set 8-bit mode 3 times (!) */,你有没有试过或者你可以帮我试试吗?我会尝试实现类似的。
标签: c microcontroller microprocessors lcd