蘇杰仁
(廣州番禺職業(yè)技術(shù)學(xué)院 廣東廣州 511483)
字符型LCD1602 是單片機課程常用的顯示屏之一,網(wǎng)絡(luò)上有很多相關(guān)的驅(qū)動代碼,用戶可以直接下載修改使用,但這樣用戶只是知道在LCD1602 顯示出字符,無法理解LCD1602 的工作原理及顯示過程。該文介紹字符型LCD1602的寫命令的時序分析及其代碼編寫,讓讀者更深入地理解LCD1602的顯示步驟及原理。
字符型LCD1602 是一種專門用于顯示字母、數(shù)字、符號等點陣式LCD,它采用標(biāo)準(zhǔn)的16 腳(帶背光)接口,各引腳接口說明如表1所示。
表1 LCD1602引腳接口說明
LCD1602顯示字符過程分三步:第一步,LCD1602初始化;第二步,寫入顯示的地址;第三步,寫入顯示的內(nèi)容。
向LCD1602 寫入內(nèi)容,需要對它進(jìn)行寫操作,寫操作時須滿足要求的建立時間、保持時間和E 脈寬。時序圖如圖1所示。
圖1 LCD1602寫命令時序圖
對于時序[1],采用折點分析法完成寫操作的代碼編寫。在寫時序圖的各個轉(zhuǎn)折點處繪制分割線,并做標(biāo)記A、B、C、D、E、K、M、N、O、P,分析如下。
RS:在AB、BN、NQ 階段,RS 可高可低,取寫命令RS為低電平,即RS=0。
R/W:在AB、NQ 階段,R/W 可高可低,在BN 階段R/W為低,取R/W為低電平,即R/W=0。
對于E與DB0~DB7則結(jié)合分析。
A點:使能拉低,即E=0;
B點:數(shù)據(jù)準(zhǔn)備,P2=0x00|0x80;
C點:數(shù)據(jù)準(zhǔn)備完畢,完成轉(zhuǎn)換,此時數(shù)據(jù)無效;延時CD;
D點:使能拉高,即E=1;延時DE;
E點:數(shù)據(jù)起效,E=1;延時EK;
K 點:使能拉低,即E=0;延時KM,有效數(shù)據(jù)傳輸完畢;
M點:準(zhǔn)備下一個周期的數(shù)據(jù)傳輸。
其中每段延時時間間隔,在LCD1602 的datasheet中均有著嚴(yán)格的說明,如表2所示。
表2 LCD1602寫模式延時間隔表
如表2 中tPW時間間隔不能小于450 ns,取單片機晶振為12 MHz,即得一個機器周期為1 μs[2],故延時_nop_();即可,其他時間間隔采用類似的方法處理。
根據(jù)以上思路分析得寫命令C語言代碼如下。
若寫數(shù)據(jù),取RS=1;若讀數(shù)據(jù),則取RW=1。
單片機[3]對LCD1602 的讀寫、屏幕和光標(biāo)的操作都是通過控制命令編程來實現(xiàn)的,共有11 條,如表3所示。
表3 LCD1602控制命令表
注意,指令9 中的BF 為忙標(biāo)志位,高電平時表示忙,此時LCD1602不能接收命令或者數(shù)據(jù),低電平時表示不忙,此時LCD1602 可以接收命令或者數(shù)據(jù)。每次寫指令、讀/寫數(shù)據(jù)操作均需要對LCD1602進(jìn)行忙信號檢測。
而LCD1602 的初始化在模塊設(shè)計時已經(jīng)規(guī)定好,只需要單片機向LCD 模塊發(fā)送相關(guān)的指令即可完成,過程如下。
延時5ms;//延時5ms
寫指令38H;//顯示模式設(shè)置
延時5ms;//延時5ms
寫指令08H;//顯示關(guān)閉
延時5ms;//延時5ms
寫指令01H;//顯示清屏
延時5ms;//延時5ms
寫指令06H;//顯示光標(biāo)移動設(shè)置
延時5ms;//延時5ms
寫指令0CH;//顯示開及光標(biāo)設(shè)置
延時5ms;//延時5ms
要顯示字符,首先需要向LCD1602 寫入顯示字符地址,也就是告訴LCD1602在哪個位置顯示字符,圖2是LCD1602的內(nèi)部顯示地址。
圖2 LCD1602內(nèi)部顯示地址
例如:第一行第一個字符的地址是00H,根據(jù)表2控制命令8,寫入顯示地址時要求最高位D7 恒定為高電平1,所以實際寫入的地址應(yīng)該是00000000B(00H|10000000B(80H)=10000000B(80H)),代碼語句為LCD_Wcmd(0x00|0x80)。如需寫入其他顯示地址,則用該顯示地址替換語句中的0x00即可。
LCD1602 液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)存儲了160 個不同的點陣字符圖形,如圖3所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號和日文假名等,每一個字符都有一個固定的地址代碼,這些地址代碼大部分跟字符的ASSIC 碼一致,比如大寫的英文字母“H”在字符發(fā)生存儲器的地址代碼是0100 1000B(48H)(“H”的ASSIC 碼亦為48H),顯示時模塊把地址48H中的點陣字符圖形顯示出來,我們就能看到字母“H”。
圖3 字符代碼與圖形對應(yīng)圖
把LCD1602的RS、RW、EN、DB0~DB7引腳分別接到單片機的P05、P06、P07、P20~P27 引腳,具體仿真[4]電路連接原理圖如圖4所示。
圖4 1602LCD硬件原理圖
圖5 1602LCD字符顯示仿真圖
按照2分析要求,完成1602LCD初始化、寫入顯示地址、寫入顯示的內(nèi)容代碼[5]編寫,即可顯示字符。具體主程序如下。
以上思路分析,使得字符型LCD1602 顯示字符的操作變得簡單易懂。代碼編譯后在Proteus 軟件上仿真[6]顯示結(jié)果見圖5。
如需顯示漢字,一個漢字占用兩個字節(jié),即16×16=256 個像素,而LCD1602 的每個字符像素大小為5×8=40,因此只能顯示一些如“一”“丁”等簡單的漢字[7],并且需要在LCD1602字符轉(zhuǎn)換軟件上描寫字,把字轉(zhuǎn)換成代碼之后方可在顯示屏上顯示,這便是漢字顯示以及圖形顯示LCD的基礎(chǔ)。