液晶顯示器(LiquidCrystal Display,簡稱LCD)可以顯示數(shù)字、字母、漢字、以及圖形圖像等豐富的內(nèi)容,應用非常廣泛。液晶顯示器由液晶顯示部分和控制器兩部分組成,控制器通過控制液晶顯示區(qū)的電壓,實現(xiàn)字符的顯示。LCD可分為段型、字符型和點陣型三種。其中1602字符型液晶是應用最廣泛的液晶顯示器之一。
一、LCD簡介
1602液晶的控制器是采用日立公司的HD44780集成電路,只需將待顯字符的ASCII碼放入其數(shù)據(jù)存儲器,字符就會自動在液晶顯示器上顯示。該顯示器每屏最多可顯示2行,每行16個字符,共32個字符。
1602型LCD分有背光(16個引腳)和無背光(14個引腳)兩種。14腳1602型LCD引腳共分成三類:
1、電源引腳: 引腳1和引腳2 分別是電源正極(VDD)和負極(VSS)。
2、數(shù)據(jù)引腳: 引腳7到引腳14共8個引腳是雙向數(shù)據(jù)總線的第0位到第8位。由于P0口無上拉電阻,因此如果需要接到P0口,則必須接上拉電阻。而接到其他并口,可不接上拉電阻。
二、控制介紹
控制引腳:
引腳3(VL)是反視度調(diào)整引腳,通常接地。
引腳4(RS)是寄存器選擇引腳,當RS=1時選擇數(shù)據(jù)寄存器,當RS=0時,選擇指令寄存器。
引腳5(R/W)是讀寫選擇引腳,當R/W=1時讀,當R/W=0時寫。
引腳6(E)是模塊使能信號,當E上為高電平時,可以讀出數(shù)據(jù)或指令;當E上電平正跳變時,開始寫入數(shù)據(jù)或指令;當E上電平負跳變時,開始執(zhí)行指令。
三、LCD初始化
關于這一點,LCD1602說明手冊上已經(jīng)明確告訴我們了,想都不要去想,管你這些什么意思,照做即可。
延時15ms
寫指令38H
延時5ms
寫指令38H
寫指令08H
寫指令01H
寫指令06H
寫指令0CH
以上為初始化過程,延時部分好解決,前面講過了。這里就看如何“寫指令”了。問題來了,液晶模塊怎么知道單片機給我的是命令還是數(shù)據(jù)。(叁議電子www.ppptalk.com)LCD1602看到RS為高時,就明白了,哦,你要給我傳送數(shù)據(jù)了;看到RS為低時,就知道你要給我指令了。這個只是選擇“命令”還是“數(shù)據(jù)”,還有一個問題,我們的目的是“寫指令”,那么液晶模塊怎么知道是“寫”還是“讀”呢?
再來看RW信號,當RW為低的時候,液晶模塊就知道了,單片機要給我“寫”了;當RW為高的時候,液晶模塊也知道了,單片機要“讀”了。很明顯,我們這里要把RW設置為低?!皩?讀”和“指令/數(shù)據(jù)”都知道如何告訴液晶模塊了,那么這個指令從怎么傳過去呢?
通過D0-D7這8根線(也就是P2端口)來傳輸,比如我要傳送的指令為x033,那么就把這個數(shù)據(jù)0x33放到P2端口,當LCD1602看到“寫”和“指令”的時候,就知道把P2端口上的0x33這個指令拿過來了。這樣就達到了“寫”“指令”“0x33”的目的。
但是不是這樣就能讓LCD1602正常執(zhí)行了。不是的。回到我們前面講的那個例子,這里加個條件,屋內(nèi)人聽到敲門三下后,判斷暗號正確了,但是沒有直接開門,而是通知了他的上級,得到上級的授權后,才開門。也就是兩個條件,暗號正確和上級授權。
LCD1602也一樣,收到指令沒有立即執(zhí)行,還要等另外一個信號,就是EN使能信號。此時EN給個一定寬度的脈沖,LCD1602才開始執(zhí)行。
四、驅(qū)動代碼
void Lcd_Write_Cmd(unsigned char Cmd) {
delayMs(5);//注意這里需要延時5ms比較保險 代替判斷忙信號
RW = 0;
P2 = Cmd; //準備好指令
RS=0; //告訴LCD1602,P0中放的是指令不是數(shù)據(jù)
EN=1;
delayUs(5); //根據(jù)時序圖,脈沖要有一定寬度
EN=0; //使指令有效,開始執(zhí)行
}
同樣的道理,以上代碼中,只需改一下RS信號為1,就是寫數(shù)據(jù)的代碼了
voidLcd_Write_Data(unsignedcharmData) {
RW = 0;
delayMs(5);//注意這里需要延時5ms比較保險代替判斷忙信號
P2=mData;//準備好指令
RS=1;//告訴LCD1602,P0中放的是數(shù)據(jù)不是指令
EN=1;
delayUs(5);//根據(jù)時序圖,脈沖要有一定寬度
EN=0;//使指令有效,開始執(zhí)行
}
五、代碼講解
指令1:清顯示,指令碼01H,光標復位到地址00H位置。
指令2:光標復位,光標返回到地址00H。
指令3:光標和顯示模式設置I/D:光標移動方向,高電平右移,低電平左移S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。
指令4:顯示開關控制。D:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示C:控制光標的開與關,高電平表示有光標,低電平表示無光標B:控制光標是否閃爍,高電平閃爍,低電平不閃爍。
指令5:光標或顯示移位S/C:高電平時移動顯示的文字,低電平時移動光標。
指令6:功能設置命令DL:高電平時為4位總線,低電平時為8位總線N:低電平時為單行顯示,高電平時雙行顯示F:低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。
指令7:字符發(fā)生器RAM地址設置。
指令8:DDRAM地址設置。
指令9:讀忙信號和光標地址BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。
指令10:寫數(shù)據(jù)。
指令11:讀數(shù)據(jù)。
這樣你需要給LCD1602什么指令,只需要傳遞給void write_com(unsigned char Cmd)函數(shù)中的Cmd參數(shù)就行了。
-
lcd
+關注
關注
34文章
4405瀏覽量
166930 -
字符型
+關注
關注
0文章
9瀏覽量
6723 -
點陣型
+關注
關注
0文章
2瀏覽量
5160
發(fā)布評論請先 登錄
相關推薦
評論