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

使用51單片機(jī)驅(qū)動(dòng)HT1621B段碼LCD屏的程序免費(fèi)下載

使用51單片機(jī)驅(qū)動(dòng)動(dòng)態(tài)筆段式LCD的資料和Proteus仿真詳細(xì)說明

使用51單片機(jī)實(shí)現(xiàn)LCD12864顯示屏顯示的仿真文件免費(fèi)下載
使用51單片機(jī)實(shí)現(xiàn)LCD12864顯示屏顯示的仿真文件免費(fèi)下載
使用51單片機(jī)實(shí)現(xiàn)LCD1602顯示屏顯示的仿真文件免費(fèi)下載
基于51單片機(jī)的LCD1602顯示proteus實(shí)驗(yàn)
51單片機(jī)驅(qū)動(dòng)超聲波測距模塊

51單片機(jī)驅(qū)動(dòng)LCD1602顯示原理及例程

ARM+51單片機(jī)開發(fā)板套件試用體驗(yàn)

51單片機(jī)怎么顯示當(dāng)前時(shí)間_(記錄)51單片機(jī)——LCD1602液晶顯示模塊

MSP430單片機(jī)HT1261驅(qū)動(dòng)LCD段碼屏

51單片機(jī)驅(qū)動(dòng)——LCD1602

通過 I2C 驅(qū)動(dòng) LCD1602 液晶屏(51單片機(jī))

評論