2012-08-14 55 views
2

我正在使用Winstar顯示器LCD(WH2004A-YYK-CP)和STM32處理器,代碼是用C編寫的。我需要用4位模式運行它。我運行它並寫下了我想要的東西。帶C代碼的4位LCD

如你所知,4位模式發送2位4位的8位數據。問題是,當我在兩個半字節之間重置時,會打印出奇怪的字符,無論我重置了多少字符,它都無法正常工作。我提出的唯一解決方案是多次重置它。

爲了弄清楚發生了什麼,我在2個半字節(每個4位)之間添加了2秒延遲,並打印出一個長句。因此無論何時我重置它,處理器等待發送第二個半字節。

我正在重置它,它會打印一些奇怪的東西,第二次重置後不會打印任何內容,第三次後它會再次正確打印。第四次重置它再次打印一些奇怪的東西,第五次打印什麼都沒有,第六次再次打印正確......並繼續這樣。 因此,我現在確定問題是這些分割的字節。

類似的代碼在8位模式下工作得很好。

我在問: 我怎麼能確定:「當我重置STM32處理器時,LCD不會等待第一個半字節在前一個會話中發送的一些數據的第二個半字節。通過使用C代碼?

UPDATE:

我也把我的代碼在這裏:http://pastebin.com/kHQQEqjx

LCD命令也正在於此:http://imgur.com/mfDlj

+1

任何示例代碼? – 2012-08-14 11:54:10

+0

看我如何接近4位模式(不同的處理器 - 雖然我是AVR的傢伙):https://github.com/H2CO3/libavrutil/blob/master/src/lcd.c – 2012-08-14 11:57:02

+0

@tuğrulbüyükışık我添加了我的代碼。 @ h2co3當你移除零件時會發生什麼變化:'/ *設置8位模式3次(!)* /',你有沒有試過,或者你可以試試嗎?我會嘗試實施類似的。 – aemre 2012-08-15 08:55:35

回答

15

下面是詳細說明以4位模式初始化LCD控制器所需的所有步驟的流程圖。

enter image description here

+0

您是否已經正確地在4位模式下初始化LCD? – Chimera 2012-09-01 19:34:37

+0

是的,現在完全沒問題! – aemre 2012-09-06 20:10:12

1

通常情況下,會有重置LCD器件的一種方式,你將作爲處理器啓動的一部分。

這樣,處理器的重置也會使LCD處於已知狀態。

你需要掌握數據表(或其他編程規範),看看它是如何完成的。幾乎肯定有一種方法可以讓LCD回到已知的初始狀態。

否則,您可能需要將復位開關連接到處理器的LCD控制器。

+0

這正是我的想法。我有數據表,我搜索關鍵字「重置」和「開始」等,但沒有一個匹配。我意識到,即使有一個命令,它也不會工作,或者是因爲相同的原因:** LCD將它分成兩個**。現在我正在想,我們需要在某種程度上破解它。 – aemre 2012-08-15 08:11:53