蘇杰仁
(廣州番禺職業(yè)技術(shù)學(xué)院 廣東廣州 511483)
字符型LCD1602 是單片機(jī)課程常用的顯示屏之一,網(wǎng)絡(luò)上有很多相關(guān)的驅(qū)動(dòng)代碼,用戶可以直接下載修改使用,但這樣用戶只是知道在LCD1602 顯示出字符,無(wú)法理解LCD1602 的工作原理及顯示過(guò)程。該文介紹字符型LCD1602的寫(xiě)命令的時(shí)序分析及其代碼編寫(xiě),讓讀者更深入地理解LCD1602的顯示步驟及原理。
字符型LCD1602 是一種專門用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,它采用標(biāo)準(zhǔn)的16 腳(帶背光)接口,各引腳接口說(shuō)明如表1所示。

表1 LCD1602引腳接口說(shuō)明
LCD1602顯示字符過(guò)程分三步:第一步,LCD1602初始化;第二步,寫(xiě)入顯示的地址;第三步,寫(xiě)入顯示的內(nèi)容。
向LCD1602 寫(xiě)入內(nèi)容,需要對(duì)它進(jìn)行寫(xiě)操作,寫(xiě)操作時(shí)須滿足要求的建立時(shí)間、保持時(shí)間和E 脈寬。時(shí)序圖如圖1所示。

圖1 LCD1602寫(xiě)命令時(shí)序圖
對(duì)于時(shí)序[1],采用折點(diǎn)分析法完成寫(xiě)操作的代碼編寫(xiě)。在寫(xiě)時(shí)序圖的各個(gè)轉(zhuǎn)折點(diǎn)處繪制分割線,并做標(biāo)記A、B、C、D、E、K、M、N、O、P,分析如下。
RS:在AB、BN、NQ 階段,RS 可高可低,取寫(xiě)命令RS為低電平,即RS=0。
R/W:在AB、NQ 階段,R/W 可高可低,在BN 階段R/W為低,取R/W為低電平,即R/W=0。
對(duì)于E與DB0~DB7則結(jié)合分析。
A點(diǎn):使能拉低,即E=0;
B點(diǎn):數(shù)據(jù)準(zhǔn)備,P2=0x00|0x80;
C點(diǎn):數(shù)據(jù)準(zhǔn)備完畢,完成轉(zhuǎn)換,此時(shí)數(shù)據(jù)無(wú)效;延時(shí)CD;
D點(diǎn):使能拉高,即E=1;延時(shí)DE;
E點(diǎn):數(shù)據(jù)起效,E=1;延時(shí)EK;
K 點(diǎn):使能拉低,即E=0;延時(shí)KM,有效數(shù)據(jù)傳輸完畢;
M點(diǎn):準(zhǔn)備下一個(gè)周期的數(shù)據(jù)傳輸。
其中每段延時(shí)時(shí)間間隔,在LCD1602 的datasheet中均有著嚴(yán)格的說(shuō)明,如表2所示。

表2 LCD1602寫(xiě)模式延時(shí)間隔表
如表2 中tPW時(shí)間間隔不能小于450 ns,取單片機(jī)晶振為12 MHz,即得一個(gè)機(jī)器周期為1 μs[2],故延時(shí)_nop_();即可,其他時(shí)間間隔采用類似的方法處理。
根據(jù)以上思路分析得寫(xiě)命令C語(yǔ)言代碼如下。


若寫(xiě)數(shù)據(jù),取RS=1;若讀數(shù)據(jù),則取RW=1。
單片機(jī)[3]對(duì)LCD1602 的讀寫(xiě)、屏幕和光標(biāo)的操作都是通過(guò)控制命令編程來(lái)實(shí)現(xiàn)的,共有11 條,如表3所示。

表3 LCD1602控制命令表
注意,指令9 中的BF 為忙標(biāo)志位,高電平時(shí)表示忙,此時(shí)LCD1602不能接收命令或者數(shù)據(jù),低電平時(shí)表示不忙,此時(shí)LCD1602 可以接收命令或者數(shù)據(jù)。每次寫(xiě)指令、讀/寫(xiě)數(shù)據(jù)操作均需要對(duì)LCD1602進(jìn)行忙信號(hào)檢測(cè)。
而LCD1602 的初始化在模塊設(shè)計(jì)時(shí)已經(jīng)規(guī)定好,只需要單片機(jī)向LCD 模塊發(fā)送相關(guān)的指令即可完成,過(guò)程如下。
延時(shí)5ms;//延時(shí)5ms
寫(xiě)指令38H;//顯示模式設(shè)置
延時(shí)5ms;//延時(shí)5ms
寫(xiě)指令08H;//顯示關(guān)閉
延時(shí)5ms;//延時(shí)5ms
寫(xiě)指令01H;//顯示清屏
延時(shí)5ms;//延時(shí)5ms
寫(xiě)指令06H;//顯示光標(biāo)移動(dòng)設(shè)置
延時(shí)5ms;//延時(shí)5ms
寫(xiě)指令0CH;//顯示開(kāi)及光標(biāo)設(shè)置
延時(shí)5ms;//延時(shí)5ms
要顯示字符,首先需要向LCD1602 寫(xiě)入顯示字符地址,也就是告訴LCD1602在哪個(gè)位置顯示字符,圖2是LCD1602的內(nèi)部顯示地址。

圖2 LCD1602內(nèi)部顯示地址
例如:第一行第一個(gè)字符的地址是00H,根據(jù)表2控制命令8,寫(xiě)入顯示地址時(shí)要求最高位D7 恒定為高電平1,所以實(shí)際寫(xiě)入的地址應(yīng)該是00000000B(00H|10000000B(80H)=10000000B(80H)),代碼語(yǔ)句為L(zhǎng)CD_Wcmd(0x00|0x80)。如需寫(xiě)入其他顯示地址,則用該顯示地址替換語(yǔ)句中的0x00即可。
LCD1602 液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)存儲(chǔ)了160 個(gè)不同的點(diǎn)陣字符圖形,如圖3所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫(xiě)、常用的符號(hào)和日文假名等,每一個(gè)字符都有一個(gè)固定的地址代碼,這些地址代碼大部分跟字符的ASSIC 碼一致,比如大寫(xiě)的英文字母“H”在字符發(fā)生存儲(chǔ)器的地址代碼是0100 1000B(48H)(“H”的ASSIC 碼亦為48H),顯示時(shí)模塊把地址48H中的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母“H”。

圖3 字符代碼與圖形對(duì)應(yīng)圖
把LCD1602的RS、RW、EN、DB0~DB7引腳分別接到單片機(jī)的P05、P06、P07、P20~P27 引腳,具體仿真[4]電路連接原理圖如圖4所示。

圖4 1602LCD硬件原理圖

圖5 1602LCD字符顯示仿真圖
按照2分析要求,完成1602LCD初始化、寫(xiě)入顯示地址、寫(xiě)入顯示的內(nèi)容代碼[5]編寫(xiě),即可顯示字符。具體主程序如下。


以上思路分析,使得字符型LCD1602 顯示字符的操作變得簡(jiǎn)單易懂。代碼編譯后在Proteus 軟件上仿真[6]顯示結(jié)果見(jiàn)圖5。
如需顯示漢字,一個(gè)漢字占用兩個(gè)字節(jié),即16×16=256 個(gè)像素,而LCD1602 的每個(gè)字符像素大小為5×8=40,因此只能顯示一些如“一”“丁”等簡(jiǎn)單的漢字[7],并且需要在LCD1602字符轉(zhuǎn)換軟件上描寫(xiě)字,把字轉(zhuǎn)換成代碼之后方可在顯示屏上顯示,這便是漢字顯示以及圖形顯示LCD的基礎(chǔ)。