LCD1602液晶顯示總結(jié)_第1頁
LCD1602液晶顯示總結(jié)_第2頁
LCD1602液晶顯示總結(jié)_第3頁
LCD1602液晶顯示總結(jié)_第4頁
LCD1602液晶顯示總結(jié)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、LCD1602液晶顯示應(yīng)用總結(jié)一、1602里面存儲(chǔ)器有三種:CGROM、CGRAM、DDRAMCGROM保存了廠家生產(chǎn)時(shí)固化在LCM中的點(diǎn)陣型顯示數(shù)據(jù);CGRAM是留給用戶自己定義點(diǎn)陣型顯示數(shù)據(jù)的;DDRAM則是和顯示屏的內(nèi)容對(duì)應(yīng)的。1602內(nèi)部的DDRAM有80字節(jié),而顯示屏上只有2行16列,共32個(gè)字符,所以兩者不完全一一對(duì)應(yīng)。默認(rèn)情況下,顯示屏上第一行的內(nèi)容對(duì)應(yīng)DDRAM中80H到8FH的內(nèi)容,第二行的內(nèi)容對(duì)應(yīng)DDRAM 中C0H到CFH的內(nèi)容。DDRAM中90H到A7H、D0H到E7H的內(nèi)容是不顯示在顯示屏上的,但是在滾動(dòng)屏幕的情況下,這些內(nèi)容就可能被滾動(dòng)顯示出來了。注:這里列舉的DD

2、RAM的地址準(zhǔn)確來說應(yīng)該是DDRAM地址+80H之后的值,因?yàn)樵谙驍?shù)據(jù)總線寫數(shù)據(jù)的時(shí)候,命令字的最高位總是為1。DDRAM(Display Data RAM)就是顯示數(shù)據(jù)RAM,用來寄存待顯示的字符代碼。共80個(gè)字節(jié),其地址和屏幕的對(duì)應(yīng)關(guān)系如下:DDRAM相當(dāng)于計(jì)算機(jī)的顯存,我們?yōu)榱嗽谄聊簧巷@示字符,就把字符代碼送入顯存,這樣該字符就可以顯示在屏幕上了。同樣LCD1602共有80個(gè)字節(jié)的顯存,即DDRAM。但LCD1602的顯示屏幕只有162大小,因此,并不是所有寫入DDRAM的字符代碼都能在屏幕上顯示出來,只有寫在上圖所示范圍內(nèi)的字符才可以顯示出來,寫在范圍外的字符不能顯示出來。這樣,我們?cè)?/p>

3、程序中可以利用下面的“光標(biāo)或顯示移動(dòng)指令”使字符慢慢移動(dòng)到可見的顯示范圍內(nèi),看到字符的移動(dòng)效果。為了在液晶屏幕上顯示字符,就把字符代碼送入DDRAM。例如,如果想在屏幕左上角顯示字符A,那么就把字符A的字符代碼41H寫入DDRAM的00H地址處即可。至于怎么寫入,后面會(huì)有說明。那么為什么把字符代碼寫入DDRAM,就可以在相應(yīng)位置顯示這個(gè)代碼的字符呢?我們知道,LCD1602是一種字符點(diǎn)陣顯示器,為了顯示一種字符的字形,必須要有這個(gè)字符的字模數(shù)據(jù),什么叫字符的字模數(shù)據(jù),看看下面的這個(gè)圖就明白了:A的字模上圖的左邊就是字符A的字模數(shù)據(jù),右邊就是將左邊數(shù)據(jù)用“”代表0,用“”代表 1。從而顯示出A這

4、個(gè)字形。從下面的圖可以看出,字符A的高4位是0100,低4位是0001,合在一起就是01000001b,即41H。它恰 好與該字符的ASCII碼一致,這樣就給了我們很大的方便,我們可以在PC上使用P2=A這樣的語法。編譯后,正好是這個(gè)字符的字符代碼。在LCD1602模塊上固化了字模存儲(chǔ)器,就是CGROM和CGRAM,HD44780內(nèi)置了192個(gè)常用字符的字模,存于字符產(chǎn)生器CGROM(Character Generator ROM)中,另外還有8個(gè)允許用戶自定義的字符產(chǎn)生RAM,稱為CGRAM(Character Generator RAM)。下圖(字模表)說明了CGROM和CGRAM與字符的

5、對(duì)應(yīng)關(guān)系。從ROM和RAM的名字我們也可以知道,ROM是早已固化在LCD1602模塊中的,只能讀取;而RAM是可讀寫的。也就是說,如果只需要在屏幕上顯示已存在于CGROM中的字符,那么只須在DDRAM中寫入它的字符代碼就可以了;但如果要顯示CGROM中沒有的字符,比如攝氏溫標(biāo)的符號(hào),那么就只有先在CGRAM中定義,然后再在DDRAM中寫入這個(gè)自定義字符的字符代碼即可。和CGROM中固化的字符不同,CGRAM中本身沒有字符,所以要在DDRAM中寫入某個(gè)CGROM不存在的字符,必須在CGRAM中先定義后使用。程序退出后CGRAM中定義的字符也不復(fù)存在,下次使用時(shí),必須重新定義。上面這個(gè)圖(如圖10

6、)說明的是58點(diǎn)陣和510點(diǎn)陣字符的字形和光標(biāo)的位置。先來說58點(diǎn)陣,它有8行5列。那么定義這樣一個(gè)字符需要8個(gè)字節(jié),每個(gè)字節(jié)的前3個(gè)位沒有被使用。例如,定義攝氏溫標(biāo)的符號(hào)0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00。設(shè)置CGRAM地址指令上面這個(gè)圖說明的是設(shè)置CGRAM地址指令。從這個(gè)指令的格式中我們可以看出,它共有aaaaaa這6位,一共可以表示64個(gè)地址,即64個(gè)字節(jié)。一個(gè)58點(diǎn)陣字符共占用8個(gè)字節(jié),那么這64個(gè)字節(jié)一共可以自定義8個(gè)字符。也就是說,上面這個(gè)圖的6位地址中的DB5DB4DB3用來表示8個(gè)自定義的字符,DB2DB1DB0用來表示每個(gè)字符的8

7、個(gè)字節(jié)。這DB5DB4DB3所表示的8個(gè)自定義字符(0-7)就是要寫入DDRAM中的字符代碼。我們知道,在CGRAM中只能定義8個(gè)自定義字符,也就是只有07這8個(gè)字符代碼,但在下面的這個(gè)表(如圖12)中一共有16個(gè)字符代碼(0000b-1111b)。實(shí)際上,如圖所示,它只能表示8個(gè)自定義字符 (0000b=1000b, 0001b=1001b依次類推)。也就是說,寫入DDRAM中的字符代碼0和字符代碼8是同一個(gè)自定義字符。 510點(diǎn)陣每個(gè)字符共占用16個(gè)字節(jié)的空間,所以CGRAM中只能定義4個(gè)這樣的自定義字符。那么如何在CGRAM中自定義字符呢?在上面的介紹中,我們知道有一個(gè)設(shè)置CGRAM地址

8、指令,同寫DDRAM指令相似,只須設(shè)置好某個(gè)自定義字符的字模數(shù)據(jù),然后按照上面介紹的方法,設(shè)置好CGRAM地址,依次寫入這個(gè)字模數(shù)據(jù)即可。我們?cè)诤竺娴睦又性龠M(jìn)行說明。二、1602使用三條控制線:EN、RW、RS。其中EN起到類似片選和時(shí)鐘線的作用,RW和RS指示了讀、寫的方向和內(nèi)容。在讀數(shù)據(jù)(或者Busy標(biāo)志)期間,EN線必須保持高電平;而在寫指令(或者數(shù)據(jù))過程中,EN線上必須送出一個(gè)正脈沖。RW、RS的組合一共有四種情況,分別對(duì)應(yīng)四種操作:RS0、RW0表示向LCD寫入指令。RS0、RW1表示讀取Busy標(biāo)志。RS1、RW0表示向LCD寫入數(shù)據(jù)。RS1、RW1表示從LCD讀取數(shù)據(jù)。三、L

9、CD1602引腳定義:引腳號(hào)符號(hào)引腳說明引腳號(hào)符號(hào)引腳說明1VSS電源地9D2數(shù)據(jù)端口2VDD電源正極10D3數(shù)據(jù)端口3V0偏壓信號(hào)11D4數(shù)據(jù)端口4RS命令/數(shù)據(jù)12D5數(shù)據(jù)端口5RW讀/寫13D6數(shù)據(jù)端口6E脈沖使能14D7數(shù)據(jù)端口7D0數(shù)據(jù)端口15A背光正極8D1數(shù)據(jù)端口16K背光負(fù)極*說明:1、VSS接電源地2、VDD接+5V3、V0是液晶顯示的偏壓信號(hào),可接10K的3296精密電位器?;蚴峭瑯幼柚档腞M065/RM063信號(hào)的藍(lán)白可調(diào)電阻。4、RS是命令/數(shù)據(jù)選擇引腳,接單片機(jī)的其中一個(gè)I/O口。當(dāng)RS=0,選擇指令模式;RS=1,選擇數(shù)據(jù)模式。5、RW為讀/寫模式選擇引腳,接單片機(jī)

10、的一個(gè)I/O口, RW=0寫,向1602寫數(shù)據(jù)或是指令。 RW=1讀,從1602讀取數(shù)據(jù)或是狀態(tài),如果是不需要進(jìn)行讀取操作,可以直接此位接Vss。6、E,LCD1602執(zhí)行命令的使能信號(hào),接單片機(jī)的一個(gè)I/O口。7、D0D7: LCD1602的并行數(shù)據(jù)輸入/輸出端口,可以接單片機(jī)的任意一個(gè)的8位的I/O端口(P0P3),如果是接P0口的話要接一個(gè)8位的上拉電阻。當(dāng)應(yīng)用4線并行驅(qū)動(dòng)模式的時(shí)候,只需接4個(gè)并行的I/O端口。8、A:背光正極,可以接一個(gè)1047的限流電阻接到VDD。9、K:背光負(fù)極,接VSS。四、LCD1602的基本操作:1、讀狀態(tài):RS=0,RW=1,E=高脈沖。輸出:D0D7為狀

11、態(tài)字。2、讀數(shù)據(jù):RS=1,RW=1,E=高脈沖。輸出:D0D7為數(shù)據(jù)。3、寫指令:RS=0,RW=0,E=高脈沖。輸出:無4、寫數(shù)據(jù):RS=1,RW=0,E=高脈沖。輸出:無。讀操作時(shí)序?qū)懖僮鲿r(shí)序時(shí)序時(shí)間參數(shù)五、LCD1602液晶顯示屏指令:1、工作方式設(shè)置指令:(一般0x38):不關(guān)心,也就是說這個(gè)位是0或1都可以,一般取0。DL:設(shè)置數(shù)據(jù)接口位數(shù)。DL=1:8位數(shù)據(jù)接口(D7D0)。DL=0:4位數(shù)據(jù)接口(D7D4)。N=0:一行顯示。N=1:兩行顯示。F=0:58點(diǎn)陣字符。F=1:510點(diǎn)陣字符。說明:因?yàn)槭菍懼噶钭?,所以RS和RW都是0。LCD1602只能用并行方式驅(qū)動(dòng),不能用串行方

12、式驅(qū)動(dòng)。而并行方式又可以選擇8位數(shù)據(jù)接口或4位數(shù)據(jù)接口。這里我們選擇8位數(shù)據(jù)接口(D7D0)。我們的設(shè)置是8位數(shù)據(jù)接口,兩行顯示,58點(diǎn)陣,即0b00111000也就是0x38。(注意:NF是10或11的效果是一樣的,都是兩行58點(diǎn)陣。因?yàn)樗荒芤詢尚?10點(diǎn)陣方式進(jìn)行顯示,換句話說,這里用0x38或0x3c是一樣的)。2、顯示開關(guān)控制指令(一般0x0c)D=1:顯示開,D=0:顯示關(guān)。C=1:光標(biāo)顯示,C=0:光標(biāo)不顯示。B=1:光標(biāo)閃爍,B=0:光標(biāo)不閃爍。說明:這里的設(shè)置是顯示開,不顯示光標(biāo),光標(biāo)不閃爍,設(shè)置字為0x0c。3進(jìn)入模式設(shè)置指令:I/D=1:寫入新數(shù)據(jù)后光標(biāo)右移。I/D=0:

13、寫入新數(shù)據(jù)后光標(biāo)左移。S=1:顯示移動(dòng)。S=0:顯示不移動(dòng)。說明:這里的設(shè)置是0x06。4光標(biāo)或顯示移動(dòng)指令:說明:在需要進(jìn)行整屏移動(dòng)時(shí),這個(gè)指令非常有用,可以實(shí)現(xiàn)屏幕的滾動(dòng)顯示效果。初始化時(shí)不使用這個(gè)指令。5清屏指令:說明:清除屏幕顯示內(nèi)容。光標(biāo)返回屏幕左上角。執(zhí)行這個(gè)指令時(shí)需要一定時(shí)間。6光標(biāo)歸位指令:說明:光標(biāo)返回屏幕左上角,它不改變屏幕顯示內(nèi)容。7設(shè)置CGRAM地址指令:說明:這個(gè)指令在上面已經(jīng)介紹過。用法在后面例子中說明。8設(shè)置DDRAM地址指令:說明:這個(gè)指令用于設(shè)置DDRAM地址。在對(duì)DDRAM進(jìn)行讀寫之前,首先要設(shè)置DDRAM地址,然后才能進(jìn)行讀寫。前面我們說過,DDRAM就是

14、LCD1602的顯示存儲(chǔ)器。我們要在它上面進(jìn)行顯示,就要把要顯示的字符寫入DDRAM。同樣,我們想知道DDRAM某個(gè)地址上有什么字符,也要先設(shè)置DDRAM地址,然后將它讀出到單片機(jī)。9讀忙信號(hào)和地址計(jì)數(shù)器AC:說明:這個(gè)指令用來讀取LCD1602狀態(tài)。對(duì)于單片機(jī)來說,LCD1602屬于慢速設(shè)備。當(dāng)單片機(jī)向其發(fā)送一個(gè)指令后,它將去執(zhí)行這個(gè)指令。這時(shí)如果單片機(jī)再次發(fā)送下一條指令,由于LCD1602速度較慢,前一條指令還未執(zhí)行完畢,它將不接受這新的指令,導(dǎo)致新的指令丟失。因此這條讀忙指令可以用來判斷LCD1602是否忙,能否接收單片機(jī)發(fā)來的指令。當(dāng)BF=1,表示LCD1602正忙,不能接受單片機(jī)的指

15、令;當(dāng)BF=0,表示LCD1602空閑,可以接收單片機(jī)的指令。RS=0,表示是指令;RW=1,表示是讀取。這條指令還有一個(gè)副產(chǎn)品:即可以得到地址記數(shù)器AC的值(address counter)。LCD1602維護(hù)了一個(gè)地址計(jì)數(shù)器AC,用來記錄下一次讀寫CGRAM或DDRAM的位置。需要強(qiáng)調(diào)的是:這條指令我一次也沒有執(zhí)行成功。很多網(wǎng)友似乎也是這樣。好在我們有另外的辦法,也就是延時(shí)。通過查看每條指令的執(zhí)行時(shí)間,再經(jīng)過一些試驗(yàn),可以確定指令的延時(shí)。這樣就可以在上一條指令執(zhí)行完畢后再執(zhí)行下一條指令了。10寫數(shù)據(jù)到CGRAM或DDRAM指令:說明:RS=1,數(shù)據(jù);RW=0,寫。指令執(zhí)行時(shí),要在DB7DB

16、0上先設(shè)置好要寫入的數(shù)據(jù),然后執(zhí)行寫命令。11從CGRAM或DDRAM讀數(shù)據(jù)指令:說明:RS=1,數(shù)據(jù);RW=1,讀。先設(shè)置好CGRAM或DDRAM的地址,然后執(zhí)行讀取命令。數(shù)據(jù)就被讀入后DB7DB0。五、1602LCD的一般初始化(復(fù)位)過程延時(shí)15mS寫指令38H(不檢測(cè)忙信號(hào))延時(shí)5mS寫指令38H(不檢測(cè)忙信號(hào))延時(shí)5mS寫指令38H(不檢測(cè)忙信號(hào))以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測(cè)忙信號(hào)寫指令38H:顯示模式設(shè)置寫指令08H:顯示關(guān)閉寫指令01H:顯示清屏寫指令06H:顯示光標(biāo)移動(dòng)設(shè)置寫指令0CH:顯示開及光標(biāo)設(shè)置七、實(shí)例:下面我們就以一個(gè)實(shí)例來結(jié)束這篇文章。先介紹一下背景:?jiǎn)?/p>

17、片機(jī)最小系統(tǒng)(擴(kuò)充了外部RAM 62256)。采用STC89C52RC,晶振22.1184MHZ。以58點(diǎn)陣,162行,8位數(shù)據(jù)端口。首先在第一行顯示“I love MCU!”,第二行顯示“LCD1602 Test!”。延時(shí)一段時(shí)間,清屏。然后在第一行顯示自定義字符:攝氏溫標(biāo)標(biāo)志。第二行顯示圓周率(pai)標(biāo)志。再延時(shí)一段時(shí)間,清屏。最后在第一行顯示“Welcome to my blog!”,顯示方式是從屏幕右面移入,左面移出,周而復(fù)始。/File1#ifndef _ZHANGTYPE_H_#define _ZHANGTYPE_H_#define uint8 unsigned char#def

18、ine uint16 unsigned short int#define uint32 unsigned long int#define int8 signed char#define int16 signed short int#define int32 signed long int#define uint64 unsigned long long int#define int64 signed long long int#endif /File2#ifndef _FUN_H_#define _FUN_H_ #include ZhangType.h#include void Delay(u

19、int16 time); #endif /File3#include fun.h void Delay(uint16 time) while(time-); /File4#ifndef _1602_H_#define _1602_H_#include#include ZhangType.h /變量類型#include fun.h /常用函數(shù) #define SETMODE 0x38 /16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口#define DISOPEN 0x0C /顯示開,不顯示光標(biāo),光標(biāo)不閃爍#define DISMODE 0x06 /讀寫字符后地址加1,屏顯不移動(dòng)#define SETAD

20、DR 0x80 /設(shè)置數(shù)據(jù)地址指針初始值#define CLEAR 0x01 /清屏,數(shù)據(jù)指針清零#define RET 0x02 /回車,數(shù)據(jù)指針清零 #define PORT P2 /I/O口 sbit RS = P10;sbit RW = P11;sbit E = P12; void Init1602(void); /初始化1602void Write1602_Com(uint8 com); /寫命令void Write1602_Dat(uint8 dat); /寫數(shù)據(jù)void CheckBusy(void); /檢查忙void Write1602_One_Dat(uint8 X,uin

21、t8 Y,uint8 dat); /寫一個(gè)數(shù)據(jù)void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf); /寫一個(gè)數(shù)據(jù)串 #end if /File5#include 1602.h void Write1602_Com(uint8 com) E=0; RS=0; /命令 Delay(50); /延時(shí) RW=0; /寫 Delay(50); PORT=com; /端口賦值 Delay(50); E=1; /高脈沖 Delay(50); E=0;void Write1602_Dat(uint8 dat) E=0; RS=1; /數(shù)據(jù) Delay

22、(50); /延時(shí) RW=0; /寫 Delay(50); PORT=dat; /端口賦值 Delay(50); E=1; /高脈沖 Delay(50); E=0; void CheckBusy(void) uint8 temp; RS=0; /命令 RW=1; /讀 E=0; while(1) PORT=0xFF; /端口為輸入 E=1; /高脈沖 temp=PORT; E=0; if (temp&0x80)=0) /檢查BF位是否為0 break; void Init1602(void) Write1602_Com(SETMODE); /模式設(shè)置 Delay(500); Write1602

23、_Com(DISOPEN); /顯示設(shè)置 Delay(500); Write1602_Com(DISMODE); /顯示模式 Delay(500); Write1602_Com(CLEAR); /清屏 Delay(500); void Write1602_One_Dat(uint8 x,uint8 y,uint8 dat) x&=0x0f; y&=0x01; if(y) x|=0x40; x|=0x80; Write1602_Com(x); Write1602_Dat(dat); void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf) uint8 i; Write1602_Com(addr); for(i=0;i Write1602_Dat(pbufi); /File6*名稱:主文件(_main.c)*功能:測(cè)試*日期:2014/09/09*/#include 1602.h#include fun.h uint8 code hot8= /攝氏溫度字模0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00;uint8 code pi8= 0x00,0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論