LCD1602液晶顯示屏
LCD ( Liquid Crystal Display 的簡(jiǎn)稱)液晶顯示器。能夠同時(shí)顯示16x2,32個(gè)字符,是一種專門(mén)用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。
LCD1602液晶顯示器是廣泛使用的一種字符型液晶顯示模塊。它是由字符型液晶顯示屏(LCD)、控制驅(qū)動(dòng)主電路HD44780及其擴(kuò)展驅(qū)動(dòng)電路HD44100,以及少量電阻、電容元件和結(jié)構(gòu)件等裝配在PCB板上而組成。該顯示屏的優(yōu)點(diǎn)是耗電量低、體積小、輻射低。
LCD1602主要用來(lái)顯示數(shù)字、字母、圖形以及少量自定義字符。可以顯示2行16個(gè)字符,擁有16個(gè)引腳,其中8位數(shù)據(jù)總線D0-D7,和RS、R/W、EN三個(gè)控制端口,工作電壓為5V,并且?guī)в凶址麑?duì)比度調(diào)節(jié)V0和背光源AK。
注:
我們所用的LCD屏的命名,基本都是按照其分辨率來(lái)進(jìn)行命名的 比如lcd1602 就是分辨率為16×2 lcd12864 就是分辨率為128×64
LCD1602主要參數(shù)
顯示字符:16×2個(gè)字符
工作電壓:4.5~5V
工作電流:2.0mA
工作溫度:-20°C~70°C
模塊最佳工作電壓:5.0V
單個(gè)字符尺寸2.95×4.35(W×Hmm)
引腳:16腳
LCD發(fā)光原理
首先要知道:
液晶:液晶是液態(tài)晶體,是一種幾乎透明的物質(zhì),是不能發(fā)光的
光源:LCD屏幕的光來(lái)自于屏幕最下面的背光板發(fā)出的光源
偏光片:一種鏡片,只有特定方向的光線(垂直偏振光)才能通過(guò),而其它方向的光線不能通過(guò)
兩塊偏光片的柵欄角度相互垂直時(shí)光線就完全無(wú)法通過(guò)
液晶的物理特性是:液晶控制光線通過(guò)的程度是由加在液晶上的電壓強(qiáng)弱來(lái)控制的。當(dāng)通電時(shí)導(dǎo)通,排列變的有秩序,使光線容易通過(guò),光的路徑不改變;不通電時(shí)排列混亂,阻止光線通過(guò),改變光的路徑。
LCD屏幕的組成:
上偏光片,和下偏光片,使背光源的光只能通過(guò)下偏光片,不能通過(guò)下偏光片
彩色濾光片:不同強(qiáng)度的光經(jīng)過(guò)紅綠藍(lán)三色濾光片之后,會(huì)形成各種各樣的顏色
液晶層:通過(guò)通電方式來(lái)控制液晶的分子排列,從而改變背光源發(fā)出的光的路徑,如果通電則不改變路徑,光不能通過(guò)上偏光片,如果不通電則改變光的路徑,光可以通過(guò)上偏光片,從而進(jìn)行顯示。
TFT基板:排列有序的薄膜晶體管,每一個(gè)薄膜晶體管都可以調(diào)整其電壓,從而使單個(gè)晶體管范圍內(nèi)液晶進(jìn)行不同的亮度和顏色顯示,也就是我們說(shuō)的像素點(diǎn)
背光源:提供均勻的背景光源
也就是說(shuō):如果想要LCD屏幕不顯示,那么只需要背光源的光不穿過(guò)上偏光片即可,如果需要LCD屏幕顯示字符,需要背光源的光穿過(guò)上偏光片,而是否能穿過(guò)上偏光片,需要看液晶層的分子排列,而液晶層的分子排列,是由加在液晶上的電壓強(qiáng)弱來(lái)控制的,
也就是最后我們只需要控制每個(gè)像素點(diǎn)的電壓,就可以達(dá)到LCD屏幕顯示的效果。這樣就可以通過(guò)不同區(qū)域的電壓控制使液體水晶重新排列來(lái)顯示出各種圖形圖像以及字符。
LCD和OLED區(qū)別:
LCD ( Liquid Crystal Display 的簡(jiǎn)稱)液晶顯示器。
OLED(Organic Light-Emitting Diode, OLED)本質(zhì)是LED發(fā)光二極管,當(dāng)兩端加上正向電壓,半導(dǎo)體中的載流子發(fā)生復(fù)合引起光子發(fā)射而產(chǎn)生光,又稱為有機(jī)電激光顯示。
簡(jiǎn)單地說(shuō),LCD與LED是兩種不同的顯示技術(shù),LCD是由液態(tài)晶體組成的顯示屏,而LED則是由發(fā)光二極管組成的顯示屏。本質(zhì)區(qū)別二是LCD需要背光源才能亮,OLED是發(fā)光二極管自發(fā)光,不需要額外的光源.
LCD1602引腳接線:
各引腳的功能介紹如下:
引腳1(VSS/GND)::地引腳
引腳2(VDD/VCC):電源引腳
引腳3(VL):液晶顯示器對(duì)比度引腳,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,使用時(shí)可以通過(guò)外接一個(gè)電位器調(diào)整其對(duì)比度。
引腳4(RS):寄存器選擇腳,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。
引腳5(R/W):讀(read)/寫(xiě)(write)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫(xiě)入指令或顯示地址;當(dāng)RS為低電平,R/W為高電平時(shí),可以讀忙信號(hào);當(dāng)RS為高電平,R/W為低電平時(shí),可以寫(xiě)入數(shù)據(jù)。
引腳6(E):使能端,當(dāng)E端由高電平跳變?yōu)榈碗娖綍r(shí),液晶模塊執(zhí)行命令。
引腳7-14(D0~D7):8位雙向數(shù)據(jù)線 用于單片機(jī)向1602寫(xiě)入數(shù)據(jù)和從1602讀取數(shù)據(jù)
引腳15:背光源正極
引腳16:背光源負(fù)極
LCD1602共16個(gè)管腳,但分類(lèi)很好分類(lèi),
其中一個(gè)VCC和GND用于給1602供電,
一個(gè)VCC和GND用于給背光源供電,
剩下三個(gè)功能引腳:RS(數(shù)據(jù)命令選擇端),R/W(讀寫(xiě)選擇端),E(使能信號(hào)),
還有8個(gè)D0~D7分別為8位雙向數(shù)據(jù)線傳輸數(shù)據(jù)。
RS為寄存器選擇,高電平選擇數(shù)據(jù)寄存器,低電平選擇指令寄存器。
R/W為讀寫(xiě)選擇,高電平進(jìn)行讀操作,低電平進(jìn)行寫(xiě)操作。
E端為使能端,后面和時(shí)序聯(lián)系在一起。
LCD1602的RAM地址映射及標(biāo)準(zhǔn)字庫(kù)表
LCD1602,總共顯示為16行2列,對(duì)應(yīng)著32個(gè)RAM地址,在使用的時(shí)候,需要在哪個(gè)位置顯示,就寫(xiě)入對(duì)應(yīng)的RAM地址,然后再寫(xiě)入需要的字符,對(duì)應(yīng)就會(huì)顯示該字符。
液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示LCD此時(shí)不忙,這時(shí)才能寫(xiě)指令和數(shù)據(jù),否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址(寫(xiě)指令),也就是告訴模塊在,哪里顯示字符,然后再寫(xiě)入需要顯示的字符(寫(xiě)數(shù)據(jù)),才能夠正常顯示字符
下圖是1602的內(nèi)部顯示地址
一共32個(gè)地址,對(duì)應(yīng)2行16列
標(biāo)準(zhǔn)字庫(kù)表(CGROM):
這個(gè)ROM中固化了一些我們常用的ASCII字符以及部分日文字符的點(diǎn)陣數(shù)據(jù),需要寫(xiě)入那個(gè)字符,就直接設(shè)置對(duì)應(yīng)進(jìn)制碼就可以,比如大寫(xiě)的字母A,代碼是0100 0001(41H) 與ASCII碼一致。也就是表中的ASCII碼字符的地址和實(shí)際的ASCII碼字符是一樣的
LCD1602讀寫(xiě)操作
LCD1602分為讀操作和寫(xiě)操作
其中讀操作可以分為讀狀態(tài)和讀數(shù)據(jù),寫(xiě)操作可以分為寫(xiě)指令和寫(xiě)數(shù)據(jù)。
讀狀態(tài):讀取LCD引腳狀態(tài),返回為狀態(tài)字,D0-D6為當(dāng)前LCD數(shù)據(jù)指針的地址 D7為是否允許讀寫(xiě)操作(即檢查L(zhǎng)CD是否處于忙狀態(tài))
讀數(shù)據(jù):讀取D0-07內(nèi)的數(shù)據(jù)
寫(xiě)指令:寫(xiě)入LCD的控制指令,比如清屏,顯示開(kāi)關(guān)等
寫(xiě)數(shù)據(jù):寫(xiě)入需要顯示的數(shù)據(jù),比方說(shuō)要顯示字符a,就寫(xiě)入0100 0001(41H)
以51單片機(jī)為例,D0-D7接到P0口 RW RW EN接到任意兩個(gè)口
讀寫(xiě)操作的時(shí)序圖如下:
讀操作時(shí)序:
寫(xiě)操作時(shí)序:
我們來(lái)分析一下時(shí)序圖,當(dāng)我們要寫(xiě)指令的時(shí)候,RS置為低電平,RW置為低電平,EN置為低電平,然后將指令數(shù)據(jù)送到數(shù)據(jù)口D0~D7,延時(shí)tsp1,讓1602準(zhǔn)備接收數(shù)據(jù),這時(shí)候?qū)N拉高,產(chǎn)生一個(gè)上升沿,這時(shí)候指令就開(kāi)始寫(xiě)入LCD,延時(shí)一段時(shí)間,將EN置低電平。
當(dāng)我們要寫(xiě)數(shù)據(jù)的時(shí)候,RS置為高電平,RW置為低電平,EN置為低電平,然后將指令數(shù)據(jù)送到數(shù)據(jù)口D0~D7,延時(shí)tsp1,讓1602準(zhǔn)備接收數(shù)據(jù),這時(shí)候?qū)N拉高,產(chǎn)生一個(gè)上升沿,這時(shí)候數(shù)據(jù)就開(kāi)始寫(xiě)入LCD,延時(shí)一段時(shí)間,將EN置低電平。
我們以51單片機(jī)為例,D0-D7接到P0口上,RW RW EN任意三個(gè)引腳,則寫(xiě)指令和寫(xiě)數(shù)據(jù)代碼如下:
寫(xiě)指令:
/*********************************************************/
// 1602液晶寫(xiě)命令函數(shù),cmd就是要寫(xiě)入的命令
/*********************************************************/
void LcdWriteCmd(uchar cmd)
{
LcdRs_P = 0; //選擇寫(xiě)指令
LcdRw_P = 0; //選擇寫(xiě)
LcdEn_P = 0; //E使能拉低
P0=cmd; //把指令送入P0
DelayMs(2); //延時(shí)一小會(huì)兒,讓1602準(zhǔn)備接收數(shù)據(jù)
LcdEn_P = 1; //使能線電平變化上升沿,命令送入1602的8位數(shù)據(jù)口
DelayMs(2);//延時(shí),讓數(shù)據(jù)發(fā)送
LcdEn_P = 0;//使能線拉低
}
寫(xiě)數(shù)據(jù):
/*********************************************************/
// 1602液晶寫(xiě)數(shù)據(jù)函數(shù),dat就是要寫(xiě)入的數(shù)據(jù)
/*********************************************************/
void LcdWriteData(uchar dat)
{
LcdRs_P = 1; //選擇寫(xiě)數(shù)據(jù)
LcdRw_P = 0; //選擇寫(xiě)
LcdEn_P = 0; //E使能拉低
P0=dat; //把數(shù)據(jù)送入P0
DelayMs(2); //延時(shí)一小會(huì)兒,讓1602準(zhǔn)備接收數(shù)據(jù)
LcdEn_P = 1; //使能線電平變化上升沿,命令送入1602的8位數(shù)據(jù)口
DelayMs(2);//延時(shí),讓數(shù)據(jù)發(fā)送
LcdEn_P = 0;//使能線拉低
}
LCD1602的指令操作
LCD1602一共有11條指令,下面我們一一解讀,
1602液晶模塊的讀寫(xiě)操作,屏幕和光標(biāo)的操作都是通過(guò)指令來(lái)實(shí)現(xiàn)的。(1為高電平,0為低電平)
指令1:清顯示,指令碼01H,
功能:
光標(biāo)復(fù)位到地址00H位置,
LCD顯示DDRAM的內(nèi)容全部寫(xiě)入” “的ASCII碼20H
指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H
功能:
光標(biāo)復(fù)位到地址00H位置
LCD顯示DDRAM的內(nèi)容不變
指令3:光標(biāo)和顯示位置設(shè)置
功能:
I/D,寫(xiě)入新數(shù)據(jù)后光標(biāo)移動(dòng)方向,高電平右移,低電平左移,
S:寫(xiě)入新數(shù)據(jù)后顯示屏字符是否整體左移或右移一個(gè)字符,高電平表示有效,低電平表示無(wú)效
指令4:顯示開(kāi)關(guān)控制
功能:
D(Dispaly):控制整體的顯示開(kāi)與關(guān),高電平表示開(kāi)顯示屏,低電平表示關(guān)顯示屏
C(Cursor):控制光標(biāo)的開(kāi)與關(guān),高電平表示有光標(biāo),低電平表示無(wú)光標(biāo)
B(Blink):控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍
指令5:光標(biāo)或顯示移位
SC=0,RL=0 :光標(biāo)左移
SC=0,RL=1 : 光標(biāo)右移
SC=1,RL=0時(shí),字符和光標(biāo)都左移
SC=1,RL=1時(shí)字符和光標(biāo)都右移
指令6:功能設(shè)置命令
DL:DL=1代表數(shù)據(jù)長(zhǎng)度為8位,DL=0代表數(shù)據(jù)長(zhǎng)度為4位
N:低電平時(shí)只有一行可以顯示,高電平時(shí)兩行都可以顯示,
F:低電平時(shí)一個(gè)字符大小為5X7的點(diǎn)陣字符,高電平時(shí)一個(gè)字符大小為5X10的點(diǎn)陣字符。
指令7:CGRAM地址設(shè)置
功能:
LCD1602的CGRAM可以設(shè)置存儲(chǔ)自定義字符,它共有6位,一共可以表示64個(gè)地址,即64個(gè)字節(jié)。一個(gè)5×8點(diǎn)陣字符共占用8個(gè)字節(jié),那么這64個(gè)字節(jié)一共可以自定義8個(gè)字符。
指令8:DDRAM地址設(shè)置
指定DDRAM地址
指令9:讀忙信號(hào)和光標(biāo)地址
BF:忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或數(shù)據(jù),如果為低電平表示不忙
指令10:寫(xiě)數(shù)據(jù)到CGRAM或DDRAM指令
指令11·:從CGRAM或DDRAM讀數(shù)據(jù)指令
功能:
讀取DDRAM或CGRAM中的內(nèi)容
LCD初始化
LCD初始化的過(guò)程,也就是對(duì)LCD進(jìn)行寫(xiě)指令的過(guò)程,具體的指令如下:
寫(xiě)指令38H:162顯示,57點(diǎn)陣,8位數(shù)據(jù)口 (指令6)
寫(xiě)指令0CH:開(kāi)啟顯示屏,關(guān)光標(biāo),光標(biāo)不閃爍 (指令4)
寫(xiě)指令0x06:顯示地址地址加1,即寫(xiě)一個(gè)數(shù)據(jù)后,顯示位置右移一位 (指令3)
寫(xiě)指令01H:顯示清屏
/*********************************************************/
// 1602液晶功能初始化
/*********************************************************/
void LcdInit()
{
LcdWriteCmd(0x38); // 16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)口
LcdWriteCmd(0x0C); // 開(kāi)顯示,不顯示光標(biāo)
LcdWriteCmd(0x06); // 地址加1,當(dāng)寫(xiě)入數(shù)據(jù)后光標(biāo)右移
LcdWriteCmd(0x01); // 清屏
}
LCD寫(xiě)地址
其實(shí)本質(zhì)也就是指令8,只不過(guò)我們?cè)趯?xiě)的時(shí)候,最高位D7是要求必須要為1 ,也就是實(shí)際是7位地址
比方說(shuō)我們想要寫(xiě)入第二行第一列,那么地址是40H(0100 0000),是不是直接寫(xiě)就行了呢?,顯然是不行的,因?yàn)樽罡呶籇7不是1.所以需要加上一個(gè)80H(1000 0000),也就是實(shí)際寫(xiě)入的為40H(0100 0000)+80H(1000 0000)=C0H(1100 0000)
那這樣子的話,第一行起始地址就是(1000 0000)80H,第二行起始地址是(1100 0000)C0H
代碼如下:
/*********************************************************/
// 液晶光標(biāo)定位函數(shù)
/*********************************************************/
void LcdGotoXY(uchar line,uchar column)
{
// 第一行
if(line==0)
LcdWriteCmd(0x80+column);
// 第二行
if(line==1)
LcdWriteCmd(0x80+0x40+column);
}
LCD寫(xiě)數(shù)據(jù)
這個(gè)就相對(duì)比較簡(jiǎn)單,直接用一個(gè)指針,判斷字符是否結(jié)束,然后寫(xiě)入數(shù)據(jù)就可以
/*********************************************************/
// 液晶輸出字符串函數(shù)
/*********************************************************/
void LcdPrintStr(uchar *str)
{
while(*str!='?')
LcdWriteData(*str++);
}
代碼及使用實(shí)例:
功能:LCD1602英文顯示字符
代碼如下:
#include
#include
#define uchar unsigned char// 以后unsigned char就可以用uchar代替
#define uint unsigned int// 以后unsigned int 就可以用uint 代替
sbit LcdRs_P = P1^1;// 1602液晶的RS管腳
sbit LcdRw_P = P1^2;// 1602液晶的RW管腳
sbit LcdEn_P = P1^3;// 1602液晶的EN管腳
/*********************************************************/
// 毫秒級(jí)的延時(shí)函數(shù),time是要延時(shí)的毫秒數(shù)
/*********************************************************/
void DelayMs(uint time)
{
uint i,j;
for(i=0;i
-
傳感器
+關(guān)注
關(guān)注
2550文章
51035瀏覽量
753065 -
液晶
+關(guān)注
關(guān)注
6文章
606瀏覽量
69627 -
顯示屏
+關(guān)注
關(guān)注
28文章
4483瀏覽量
74238 -
LCD1602
+關(guān)注
關(guān)注
14文章
607瀏覽量
52576
原文標(biāo)題:【常用傳感器】LCD1602液晶工作原理詳解及例程代碼
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論