在單片機(jī)的人機(jī)交互系統(tǒng)中,常常需要顯示系統(tǒng)運(yùn)行中的某些信息和數(shù)據(jù),例如,字符、漢字或者圖形等。液晶顯示器(LCD)正好可以完成此項(xiàng)任務(wù),它是一種功耗很低的顯示器,在電子表、計(jì)算器、數(shù)碼相機(jī)、計(jì)算機(jī)的顯示器和液晶電視上都可以看到它的身影。液晶顯示器以優(yōu)越的性能,越來越受到用戶的重視。
在單片機(jī)系統(tǒng)中,為了應(yīng)用的方便,常使用另外一種集成度更高的顯示組件,即液晶顯示模塊。液晶顯示模塊將液晶顯示器、控制器、背光源和外部連接端口等組裝在一起,可以方便地用于需要液晶顯示的場合。液晶顯示模塊的英文名稱為"LCD Module",可以簡稱為LCM。
本章主要介紹液晶顯示器以及液晶顯示模塊,并詳細(xì)介紹常用的液晶顯示模塊控制器及其控制子函數(shù)。最后通過兩個(gè)實(shí)例,逐步詳細(xì)講解如何使用液晶顯示模塊顯示漢字和圖形。
1602LCD顯示原理
通過電壓來改變填充在兩塊平行板之間的液晶材料內(nèi)部分子的排列狀況,以達(dá)到遮光和透光的目的來顯示深淺不一,錯(cuò)落有致的圖象,而且只要在兩塊平板間再加上三元色的濾光層,就可實(shí)現(xiàn)顯示彩色圖象。液晶是具有流動(dòng)特性的物質(zhì),所以只需外加很微小的力量即可使液晶分子運(yùn)動(dòng),以最常見普遍的向列型液晶為例,液晶分子可輕易的借著電場作用使得液晶分子轉(zhuǎn)向,由于液晶的光軸與其分子軸相當(dāng)一致,故可借此產(chǎn)生光學(xué)效果,而當(dāng)加于液晶的電場移除消失時(shí),液晶將借著其本身的彈性及黏性,液晶分子將十分迅速的回撤消來未加電場前的狀態(tài)。
1602液晶資料詳解
1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如下表所示:
編號(hào) | 符號(hào) | 引腳說明 | 編號(hào) | 符號(hào) | 引腳說明 |
---|---|---|---|---|---|
1 | VSS | 電源地 | 9 | D2 | 數(shù)據(jù) |
2 | VDD | 電源正極 | 10 | D3 | 數(shù)據(jù) |
3 | VL | 液晶顯示偏壓 | 11 | D4 | 數(shù)據(jù) |
4 | RS | 數(shù)據(jù)/命令選擇 | 12 | D5 | 數(shù)據(jù) |
5 | R/W | 讀/寫選擇 | 13 | D6 | 數(shù)據(jù) |
6 | E | 使能信號(hào) | 14 | D7 | 數(shù)據(jù) |
7 | D0 | 數(shù)據(jù) | 15 | BLA | 背光源正極 |
8 | D1 | 數(shù)據(jù) | 16 | BLK | 背光源負(fù)極 |
1602液晶模塊引腳說明:
-
第1腳:VSS為地電源。
-
第2腳:VDD接5V正電源。
-
第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地時(shí)對比度最高,對比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對比度。
-
第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。
-
第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。
-
第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。
-
第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。
-
第15腳:背光源正極。
-
第16腳:背光源負(fù)極。
1602LCD的指令說明及時(shí)序
1602液晶模塊內(nèi)部的控制器共有11條控制指令,如下表所示:
序號(hào) | 指令 | RS | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 清顯示 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
2 | 光標(biāo)返回 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | * |
3 | 置輸入模式 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S |
4 | 顯示開/關(guān)控制 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B |
5 | 光標(biāo)或字符移位 | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | * | * |
6 | 置功能 | 0 | 0 | 0 | 0 | 1 | DL | N | F | * | * |
7 | 置字符發(fā)生存貯器地址 | 0 | 0 | 0 | 1 | 字符發(fā)生存貯器地址 | |||||
8 | 置數(shù)據(jù)存貯器地址 | 0 | 0 | 1 | 顯示數(shù)據(jù)存貯器地址 | ||||||
9 | 讀忙標(biāo)志或地址 | 0 | 1 | BF | 計(jì)數(shù)器地址 | ||||||
10 | 寫數(shù)到CGRAM或DDRAM) | 1 | 0 | 要寫的數(shù)據(jù)內(nèi)容 | |||||||
11 | 從CGRAM或DDRAM讀數(shù) | 1 | 1 | 讀出的數(shù)據(jù)內(nèi)容 |
602液晶模塊的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實(shí)現(xiàn)的。(說明:1為高電平、0為低電平)
-
指令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:讀忙信號(hào)和光標(biāo)地址 BF:為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。
-
指令10:寫數(shù)據(jù)。
-
指令11:讀數(shù)據(jù)。
讀狀態(tài) | 輸入 | RS=L,R/W=H,E=H | 輸出 | D0—D7=狀態(tài)字 |
---|---|---|---|---|
寫指令 | 輸入 | RS=L,R/W=L,D0—D7=指令碼,E=高脈沖 | 輸出 | 無 |
讀數(shù)據(jù) | 輸入 | RS=H,R/W=H,E=H | 輸出 | D0—D7=數(shù)據(jù) |
寫數(shù)據(jù) | 輸入 | RS=H,R/W=L,D0—D7=數(shù)據(jù),E=高脈沖 | 輸出 | 無 |
602LCD的RAM地址映射及標(biāo)準(zhǔn)字庫表
液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,下圖是1602
的內(nèi)部顯示地址。
例如第二行第一個(gè)字符的地址是40H
,那么是否直接寫入40H
就可以將光標(biāo)定位在第二行第一個(gè)字符的位置呢?這樣不行,因?yàn)閷懭腼@示地址時(shí)要求最高位D7
恒定為高電平1
所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。
在對液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時(shí)光標(biāo)是自動(dòng)右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。
1602
液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)
已經(jīng)存儲(chǔ)了160
個(gè)不同的點(diǎn)陣字符圖形,如圖所示,這些字符有:阿拉伯?dāng)?shù)字
、英文字母的大小寫
、常用的符號(hào)
、和日文假名
等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”
的代碼是01000001B(41H)
,顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A”
文章來源:http://www.zghlxwxcb.cn/news/detail-485928.html
顯示字符編碼
根據(jù)1602LCD
的文檔說明,可根據(jù)文檔的要求進(jìn)行編程,顯示需要顯示的字符,通過程序代碼的實(shí)現(xiàn),能夠更清楚1602LCD
的使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-485928.html
#include<reg52.h> //包含頭文件,這個(gè)嘛,就不用多說了~~
#define uint unsigned int //預(yù)定義一下
#define uchar unsigned char
sbit rs=P3^5; //1602的數(shù)據(jù)/指令選擇控制線
sbit rw=P3^6; //1602的讀寫控制線
sbit en=P3^7; //1602的使能控制線
/*P2口接1602的D0~D7,注意不要接錯(cuò)了順序,我以前可在這上面吃過虧~*/
uchar code table[]="LCD1602 check ok"; //要顯示的內(nèi)容1放入數(shù)組tablel
uchar code table1[]="study up"; //要顯示的內(nèi)容2放入數(shù)組table1
void delay(uint n) //延時(shí)函數(shù)
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void lcd_wcom(uchar com) //1602寫命令函數(shù)
{
rs=0; //選擇指令寄存器
rw=0; //選擇寫
P2=com; //把命令字送入P2
delay(5); //延時(shí)一小會(huì)兒,讓1602準(zhǔn)備接收數(shù)據(jù)
en=1; //使能線電平變化,命令送入1602的8位數(shù)據(jù)口
en=0;
}
void lcd_wdat(uchar dat) //1602寫數(shù)據(jù)函數(shù)
{
rs=1; //選擇數(shù)據(jù)寄存器
rw=0; //選擇寫
P2=dat; //把要顯示的數(shù)據(jù)送入P2
delay(5); //延時(shí)一小會(huì)兒,讓1602準(zhǔn)備接收數(shù)據(jù)
en=1; //使能線電平變化,數(shù)據(jù)送入1602的8位數(shù)據(jù)口
en=0;
}
void lcd_init() //1602初始化函數(shù)
{
lcd_wcom(0x38); //8位數(shù)據(jù),雙列,5*7字形
lcd_wcom(0x0c); //開啟顯示屏,關(guān)光標(biāo),光標(biāo)不閃爍
lcd_wcom(0x06); //顯示地址遞增,即寫一個(gè)數(shù)據(jù)后,顯示位置右移一位
lcd_wcom(0x01); //清屏
}
void main() //主函數(shù)
{
uchar n,m=0;
lcd_init(); //液晶初始化
lcd_wcom(0x80); //顯示地址設(shè)為80H(即00H,)上排第一位
for(m=0;m<16;m++) //將table[]中的數(shù)據(jù)依次寫入1602顯示
{
lcd_wdat(table[m]);
delay(200);
}
lcd_wcom(0x80+0x44); //重新設(shè)定顯示地址為0xc4,即下排第5位
for(n=0;n<8;n++) //將table1[]中的數(shù)據(jù)依次寫入1602顯示
{
lcd_wdat(table1[n]);
delay(200);
}
while(1); //動(dòng)態(tài)停機(jī)
}
到了這里,關(guān)于單片機(jī)入門教程:第七章 1602LCD液晶顯示模塊的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!