1. 程式人生 > >故障集錦--st7920無法顯示中文和設定游標位置

故障集錦--st7920無法顯示中文和設定游標位置

故事的起因很簡單,一塊以前做完的顯示電路現在需要裝到測試盒裡面,供人測試晶片,用的是51的晶片,12864M的顯示屏,內建的是st7920的控制驅動器。但是呢,在裝盒的過程中,發現顯示屏壞掉了,無法顯示東西,就去買了一個新的顯示屏,好了,故事就從現在起發生了。

st7920簡介

要說故障解決,就要先介紹一下st7920,方便後面的說明。
st7920是一個控制驅動器,用於中文圖形液晶模組,比如我買的那個LCD顯示屏就是用的這個模組。
它的介面如下:
在這裡插入圖片描述
它的指令集如下:
在這裡插入圖片描述
知道指令集和介面,基本上就可以寫程式了。

問題說明

插上顯示屏之後,看到螢幕上沒有字而是一些亂碼。第一反應就是程式的中文輸出的格式和顯示屏的不一樣,所以就開始了我的除錯之路。

故障除錯

  1. 文字格式
    st7920的漢字編碼方式GB,所以亂碼很有可能是編碼問題,為了安全起見,我直接輸入GB的編碼,下面是GB編碼表節選:

在這裡插入圖片描述
於是我直接輸入一個0xB1F0是一個“別”字,但是,卻輸出不了這個漢字。所以不是文字格式問題。

  1. 接線問題

既然不是格式問題,那很有可能是哪根線接錯了,因為程式錯的概率很小,畢竟以前還是可以正常顯示的。
於是開始找線的問題,這個很好排除,萬能表一側,發現都通著呢,所以接線問題排除。

  1. 顯示器問題

輸出格式沒有錯,接線沒有錯,很容易想到會不會是顯示的問題,為了探究是不是顯示器的問題,我先輸入了一段英文字元和數字,發現可以顯示,說明顯示沒問題和接線沒問題,但是輸入漢字顯示不出來,同時,輸入英文後,還發現個問題,不能設定游標位置,因為我曾想直接顯示英文也行。我懷疑可能是裡面的漢字模組壞掉了。
於是我就找到商家,要求測試顯示器,其中有一些波折就不提了,直接說結果,就是那個顯示器在他們那是可以正常顯示漢字的,那個技術員說我這能顯示英文就說明板子和顯示器都沒問題,要我在自己的程式上找。

  1. 程式問題

好吧,找就找,雖然以前可以用,但現在用不了,只能逐個排查,要來了他的測試程式,回來仔細看,發現寫入命令和資料和我的都一樣。其他不展示了,就說下初始化,因為讀寫要是有問題的話不可能輸出英文。

  Lcd1602_Write_Cmd(0x38);    
    Lcd1602_Write_Cmd(0x0c);	
    Lcd1602_Write_Cmd(0x06);
    Lcd1602_Write_Cmd(0x01);    

和他給的程式做了對比,發現沒有任何區別。那麼就有意思了,同樣的初始化,正常的輸入輸出,完好的顯示屏,板子也能用,問題究竟出在了哪裡呢?

名偵探破案時間

大家好,我是身體萎縮頭腦依舊靈活的名偵探,此時應該想起BGM。
首先問題是無法顯示中文和設定游標位置,同時出現兩個問題,那麼這兩個問題肯定有關聯。
首先,寫入的游標位置命令起始位為80H,即首位置1,二進位制位1000 0000,寫入的漢字起始為0xB0A0,換成二進位制位1011 0000 1010 0000,所以可以看到,都是首位為1,也就說,D0~D7中的D7資料有問題,為了驗證,拿來電壓表,一測,發現果然這個引腳輸出長為低,問題找到了,解決也就方便了,手邊沒有其他晶片,直接將另一個引腳接到D0,就解決了。

問題總結

首先,我開始的時候是拿電壓表測試過引腳的,但是,測試的時候沒太走心,因為其他引腳都正常,可能直接忽略到那個引腳了。
另外,為什麼一個引腳不正常還能正常輸出英文?因為判斷是否繁忙的是後用的是D7那個腳,當D7位1是表忙,為0時表示閒,所以繁忙判斷就直接過去了,不影響,而其首位置1的只有遊標設定,但是也不影響顯示,所以能正常顯示英文。
最後,這個問題我覺得很難有人會和我一樣,但是,還是想寫下來,萬一呢?