版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
-.z.LCD1602液晶顯示應(yīng)用總結(jié)一、1602里面存儲器有三種:CGROM、CGRAM、DDRAMCGROM保存了廠家生產(chǎn)時固化在LCM中的點(diǎn)陣型顯示數(shù)據(jù);CGRAM是留給用戶自己定義點(diǎn)陣型顯示數(shù)據(jù)的;DDRAM則是和顯示屏的容對應(yīng)的。1602部的DDRAM有80字節(jié),而顯示屏上只有2行×16列,共32個字符,所以兩者不完全一一對應(yīng)。默認(rèn)情況下,顯示屏上第一行的容對應(yīng)DDRAM中80H到8FH的容,第二行的容對應(yīng)DDRAM中C0H到CFH的容。DDRAM中90H到A7H、D0H到E7H的容是不顯示在顯示屏上的,但是在滾動屏幕的情況下,這些容就可能被滾動顯示出來了。注:這里列舉的DDRAM的地址準(zhǔn)確來說應(yīng)該是DDRAM地址+80H之后的值,因?yàn)樵谙驍?shù)據(jù)總線寫數(shù)據(jù)的時候,命令字的最高位總是為1。DDRAM(DisplayDataRAM)就是顯示數(shù)據(jù)RAM,用來寄存待顯示的字符代碼。共80個字節(jié),其地址和屏幕的對應(yīng)關(guān)系如下:DDRAM相當(dāng)于計(jì)算機(jī)的顯存,我們?yōu)榱嗽谄聊簧巷@示字符,就把字符代碼送入顯存,這樣該字符就可以顯示在屏幕上了。同樣LCD1602共有80個字節(jié)的顯存,即DDRAM。但LCD1602的顯示屏幕只有16×2大小,因此,并不是所有寫入DDRAM的字符代碼都能在屏幕上顯示出來,只有寫在上圖所示圍的字符才可以顯示出來,寫在圍外的字符不能顯示出來。這樣,我們在程序中可以利用下面的“光標(biāo)或顯示移動指令”使字符慢慢移動到可見的顯示圍,看到字符的移動效果。為了在液晶屏幕上顯示字符,就把字符代碼送入DDRAM。例如,如果想在屏幕左上角顯示字符‘A’,則就把字符‘A’的字符代碼41H寫入DDRAM的00H地址處即可。至于怎么寫入,后面會有說明。則為什么把字符代碼寫入DDRAM,就可以在相應(yīng)位置顯示這個代碼的字符呢?我們知道,LCD1602是一種字符點(diǎn)陣顯示器,為了顯示一種字符的字形,必須要有這個字符的字模數(shù)據(jù),什么叫字符的字模數(shù)據(jù),看看下面的這個圖就明白了:A的字模上圖的左邊就是字符‘A’的字模數(shù)據(jù),右邊就是將左邊數(shù)據(jù)用“○”代表0,用“■”代表1。從而顯示出‘A’這個字形。從下面的圖可以看出,字符‘A’的高4位是0100,低4位是0001,合在一起就是01000001b,即41H。它恰好與該字符的ASCII碼一致,這樣就給了我們很大的方便,我們可以在PC上使用P2=‘A’這樣的語法。編譯后,正好是這個字符的字符代碼。在LCD1602模塊上固化了字模存儲器,就是CGROM和CGRAM,HD44780置了192個常用字符的字模,存于字符產(chǎn)生器CGROM(CharacterGeneratorROM)中,另外還有8個允許用戶自定義的字符產(chǎn)生RAM,稱為CGRAM(CharacterGeneratorRAM)。下圖(字模表)說明了CGROM和CGRAM與字符的對應(yīng)關(guān)系。從ROM和RAM的名字我們也可以知道,ROM是早已固化在LCD1602模塊中的,只能讀?。欢鳵AM是可讀寫的。也就是說,如果只需要在屏幕上顯示已存在于CGROM中的字符,則只須在DDRAM中寫入它的字符代碼就可以了;但如果要顯示CGROM中沒有的字符,比如攝氏溫標(biāo)的符號,則就只有先在CGRAM中定義,然后再在DDRAM中寫入這個自定義字符的字符代碼即可。和CGROM中固化的字符不同,CGRAM中本身沒有字符,所以要在DDRAM中寫入*個CGROM不存在的字符,必須在CGRAM中先定義后使用。程序退出后CGRAM中定義的字符也不復(fù)存在,下次使用時,必須重新定義。上面這個圖(如圖10)說明的是5×8點(diǎn)陣和5×10點(diǎn)陣字符的字形和光標(biāo)的位置。先來說5×8點(diǎn)陣,它有8行5列。則定義這樣一個字符需要8個字節(jié),每個字節(jié)的前3個位沒有被使用。例如,定義攝氏溫標(biāo)的符號{0*10,0*06,0*09,0*08,0*08,0*09,0*06,0*00}。設(shè)置CGRAM地址指令上面這個圖說明的是設(shè)置CGRAM地址指令。從這個指令的格式中我們可以看出,它共有aaaaaa這6位,一共可以表示64個地址,即64個字節(jié)。一個5×8點(diǎn)陣字符共占用8個字節(jié),則這64個字節(jié)一共可以自定義8個字符。也就是說,上面這個圖的6位地址中的DB5DB4DB3用來表示8個自定義的字符,DB2DB1DB0用來表示每個字符的8個字節(jié)。這DB5DB4DB3所表示的8個自定義字符(0--7)就是要寫入DDRAM中的字符代碼。我們知道,在CGRAM中只能定義8個自定義字符,也就是只有0—7這8個字符代碼,但在下面的這個表(如圖12)中一共有16個字符代碼(××××0000b--××××1111b)。實(shí)際上,如圖所示,它只能表示8個自定義字符(××××0000b=××××1000b,××××0001b=××××1001b……依次類推)。也就是說,寫入DDRAM中的字符代碼0和字符代碼8是同一個自定義字符。5×10點(diǎn)陣每個字符共占用16個字節(jié)的空間,所以CGRAM中只能定義4個這樣的自定義字符。則如何在CGRAM中自定義字符呢?在上面的介紹中,我們知道有一個設(shè)置CGRAM地址指令,同寫DDRAM指令相似,只須設(shè)置好*個自定義字符的字模數(shù)據(jù),然后按照上面介紹的方法,設(shè)置好CGRAM地址,依次寫入這個字模數(shù)據(jù)即可。我們在后面的例子中再進(jìn)行說明。二、1602使用三條控制線:EN、RW、RS。其中EN起到類似片選和時鐘線的作用,RW和RS指示了讀、寫的方向和容。在讀數(shù)據(jù)(或者Busy標(biāo)志)期間,EN線必須保持高電平;而在寫指令(或者數(shù)據(jù))過程中,EN線上必須送出一個正脈沖。RW、RS的組合一共有四種情況,分別對應(yīng)四種操作:RS=0、RW=0——表示向LCD寫入指令。RS=0、RW=1——表示讀取Busy標(biāo)志。RS=1、RW=0——表示向LCD寫入數(shù)據(jù)。RS=1、RW=1——表示從LCD讀取數(shù)據(jù)。三、LCD1602引腳定義:引腳號符號引腳說明引腳號符號引腳說明1VSS電源地9D2數(shù)據(jù)端口2VDD電源正極10D3數(shù)據(jù)端口3V0偏壓信號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是液晶顯示的偏壓信號,可接10K的3296精密電位器?;蚴峭瑯幼柚档腞M065/RM063信號的藍(lán)白可調(diào)電阻。4、RS是命令/數(shù)據(jù)選擇引腳,接單片機(jī)的其中一個I/O口。當(dāng)RS=0,選擇指令模式;RS=1,選擇數(shù)據(jù)模式。5、RW為讀/寫模式選擇引腳,接單片機(jī)的一個I/O口,RW=0——寫,向1602寫數(shù)據(jù)或是指令。RW=1——讀,從1602讀取數(shù)據(jù)或是狀態(tài),如果是不需要進(jìn)行讀取操作,可以直接此位接Vss。6、E,LCD1602執(zhí)行命令的使能信號,接單片機(jī)的一個I/O口。7、D0~D7:LCD1602的并行數(shù)據(jù)輸入/輸出端口,可以接單片機(jī)的任意一個的8位的I/O端口(P0~P3),如果是接P0口的話要接一個8位的上拉電阻。當(dāng)應(yīng)用4線并行驅(qū)動模式的時候,只需接4個并行的I/O端口。8、A:背光正極,可以接一個10~47Ω的限流電阻接到VDD。9、K:背光負(fù)極,接VSS。四、LCD1602的基本操作:1、讀狀態(tài):RS=0,RW=1,E=高脈沖。輸出:D0~D7為狀態(tài)字。2、讀數(shù)據(jù):RS=1,RW=1,E=高脈沖。輸出:D0~D7為數(shù)據(jù)。3、寫指令:RS=0,RW=0,E=高脈沖。輸出:無4、寫數(shù)據(jù):RS=1,RW=0,E=高脈沖。輸出:無。讀操作時序?qū)懖僮鲿r序時序時間參數(shù)五、LCD1602液晶顯示屏指令:1、工作方式設(shè)置指令:(一般0*38)×:不關(guān)心,也就是說這個位是0或1都可以,一般取0。DL:設(shè)置數(shù)據(jù)接口位數(shù)。DL=1:8位數(shù)據(jù)接口(D7—D0)。DL=0:4位數(shù)據(jù)接口(D7—D4)。N=0:一行顯示。N=1:兩行顯示。F=0:5×8點(diǎn)陣字符。F=1:5×10點(diǎn)陣字符。說明:因?yàn)槭菍懼噶钭?,所以RS和RW都是0。LCD1602只能用并行方式驅(qū)動,不能用串行方式驅(qū)動。而并行方式又可以選擇8位數(shù)據(jù)接口或4位數(shù)據(jù)接口。這里我們選擇8位數(shù)據(jù)接口(D7—D0)。我們的設(shè)置是8位數(shù)據(jù)接口,兩行顯示,5×8點(diǎn)陣,即0b00111000也就是0*38。(注意:NF是10或11的效果是一樣的,都是兩行5×8點(diǎn)陣。因?yàn)樗荒芤詢尚?×10點(diǎn)陣方式進(jìn)行顯示,換句話說,這里用0*38或0*3c是一樣的)。2、顯示開關(guān)控制指令(一般0*0c)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è)置字為0*0c。3.進(jìn)入模式設(shè)置指令:I/D=1:寫入新數(shù)據(jù)后光標(biāo)右移。I/D=0:寫入新數(shù)據(jù)后光標(biāo)左移。S=1:顯示移動。S=0:顯示不移動。說明:這里的設(shè)置是0*06。4.光標(biāo)或顯示移動指令:說明:在需要進(jìn)行整屏移動時,這個指令非常有用,可以實(shí)現(xiàn)屏幕的滾動顯示效果。初始化時不使用這個指令。5.清屏指令:說明:清除屏幕顯示容。光標(biāo)返回屏幕左上角。執(zhí)行這個指令時需要一定時間。6.光標(biāo)歸位指令:說明:光標(biāo)返回屏幕左上角,它不改變屏幕顯示容。7.設(shè)置CGRAM地址指令:說明:這個指令在上面已經(jīng)介紹過。用法在后面例子中說明。8.設(shè)置DDRAM地址指令:說明:這個指令用于設(shè)置DDRAM地址。在對DDRAM進(jìn)行讀寫之前,首先要設(shè)置DDRAM地址,然后才能進(jìn)行讀寫。前面我們說過,DDRAM就是LCD1602的顯示存儲器。我們要在它上面進(jìn)行顯示,就要把要顯示的字符寫入DDRAM。同樣,我們想知道DDRAM*個地址上有什么字符,也要先設(shè)置DDRAM地址,然后將它讀出到單片機(jī)。9.讀忙信號和地址計(jì)數(shù)器AC:說明:這個指令用來讀取LCD1602狀態(tài)。對于單片機(jī)來說,LCD1602屬于慢速設(shè)備。當(dāng)單片機(jī)向其發(fā)送一個指令后,它將去執(zhí)行這個指令。這時如果單片機(jī)再次發(fā)送下一條指令,由于LCD1602速度較慢,前一條指令還未執(zhí)行完畢,它將不接受這新的指令,導(dǎo)致新的指令丟失。因此這條讀忙指令可以用來判斷LCD1602是否忙,能否接收單片機(jī)發(fā)來的指令。當(dāng)BF=1,表示LCD1602正忙,不能接受單片機(jī)的指令;當(dāng)BF=0,表示LCD1602空閑,可以接收單片機(jī)的指令。RS=0,表示是指令;RW=1,表示是讀取。這條指令還有一個副產(chǎn)品:即可以得到地址記數(shù)器AC的值(addresscounter)。LCD1602維護(hù)了一個地址計(jì)數(shù)器AC,用來記錄下一次讀寫CGRAM或DDRAM的位置。需要強(qiáng)調(diào)的是:這條指令我一次也沒有執(zhí)行成功。很多網(wǎng)友似乎也是這樣。好在我們有另外的辦法,也就是延時。通過查看每條指令的執(zhí)行時間,再經(jīng)過一些試驗(yàn),可以確定指令的延時。這樣就可以在上一條指令執(zhí)行完畢后再執(zhí)行下一條指令了。10.寫數(shù)據(jù)到CGRAM或DDRAM指令:說明:RS=1,數(shù)據(jù);RW=0,寫。指令執(zhí)行時,要在DB7—DB0上先設(shè)置好要寫入的數(shù)據(jù),然后執(zhí)行寫命令。11.從CGRAM或DDRAM讀數(shù)據(jù)指令:說明:RS=1,數(shù)據(jù);RW=1,讀。先設(shè)置好CGRAM或DDRAM的地址,然后執(zhí)行讀取命令。數(shù)據(jù)就被讀入后DB7—DB0。五、1602LCD的一般初始化(復(fù)位)過程延時15mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號寫指令38H:顯示模式設(shè)置寫指令08H:顯示關(guān)閉寫指令01H:顯示清屏寫指令06H:顯示光標(biāo)移動設(shè)置寫指令0CH:顯示開及光標(biāo)設(shè)置七、實(shí)例:下面我們就以一個實(shí)例來結(jié)束這篇文章。先介紹一下背景:單片機(jī)最小系統(tǒng)(擴(kuò)充了外部RAM62256)。采用STC89C52RC,晶振22.1184MHZ。以5×8點(diǎn)陣,16×2行,8位數(shù)據(jù)端口。首先在第一行顯示“IloveMCU!”,第二行顯示“LCD1602Test!”。延時一段時間,清屏。然后在第一行顯示自定義字符:攝氏溫標(biāo)標(biāo)志。第二行顯示圓周率(pai)標(biāo)志。再延時一段時間,清屏。最后在第一行顯示“Weletomyblog!”,顯示方式是從屏幕右面移入,左面移出,周而復(fù)始。//File1*ifndef__ZHANGTYPE_H__*define__ZHANGTYPE_H__*defineuint8unsignedchar*defineuint16unsignedshortint*defineuint32unsignedlongint*defineint8signedchar*defineint16signedshortint*defineint32signedlongint*defineuint64unsignedlonglongint*defineint64signedlonglongint*endif//File2*ifndef__FUN_H__*define__FUN_H__*include"ZhangType.h"*includevoidDelay(uint16time);*endif//File3*include"fun.h"voidDelay(uint16time){while(time--);}//File4*ifndef__1602_H__*define__1602_H__*include*include"ZhangType.h"http://變量類型*include"fun.h"http://常用函數(shù)*defineSETMODE0*38//16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口*defineDISOPEN0*0C//顯示開,不顯示光標(biāo),光標(biāo)不閃爍*defineDISMODE0*06//讀寫字符后地址加1,屏顯不移動*defineSETADDR0*80//設(shè)置數(shù)據(jù)地址指針初始值*defineCLEAR0*01//清屏,數(shù)據(jù)指針清零*defineRET0*02//回車,數(shù)據(jù)指針清零*definePORTP2//I/O口sbitRS=P1^0;sbitRW=P1^1;sbitE=P1^2;voidInit1602(void);//初始化1602voidWrite1602_(uint8);//寫命令voidWrite1602_Dat(uint8dat);//寫數(shù)據(jù)voidCheckBusy(void);//檢查忙voidWrite1602_One_Dat(uint8*,uint8Y,uint8dat);//寫一個數(shù)據(jù)voidWrite1602_Str(uint8addr,uint8length,uint8*pbuf);//寫一個數(shù)據(jù)串*endif////File5*include"1602.h"voidWrite1602_(uint8){E=0;RS=0;//命令Delay(50);//延時RW=0;//寫Delay(50);PORT=;//端口賦值Delay(50);E=1;//高脈沖Delay(50);E=0;}voidWrite1602_Dat(uint8dat){E=0;RS=1;//數(shù)據(jù)Delay(50);//延時RW=0;//寫Delay(50);PORT=dat;//端口賦值Delay(50);E=1;//高脈沖Delay(50);E=0;}voidCheckBusy(void){uint8temp;RS=0;//命令RW=1;//讀E=0;while(1){PORT=0*FF;//端口為輸入E=1;//高脈沖temp=PORT;E=0;if((temp&0*80)==0)//檢查BF位是否為0break;}}voidInit1602(void){Write1602_(SETMODE);//模式設(shè)置Delay(500);Write1602_(DISOPEN);//顯示設(shè)置Delay(500);Write1602_(DISMODE);//顯示模式Delay(500);Write1602_(CLEAR);//清屏Delay(500);}voidWrite1602_One_Dat(uint8*,uint8y,uint8dat){*&=0*0f;y&=0*01;if(y)*|=0*40;*|=0*80;Write1602_(*);Write1602_Dat(dat);}voidWrite1602_Str(uint8addr,uint8length,uint8*pbuf){uint8i;Write1602_(addr);for(i=0;i{Write1602_Dat(pbuf[i]);}}//File6********************************************************名稱:主文件(_main.c)*功能:測試*日期:2014/09/09*******************************************************/*include"1602.h"*include"fun.h"uint8codehot[8]={//攝氏溫度字模0*10,0*06,0*09,0*08,0*08,0*09,0*06,0*00};uint8codepi[8]={0*00,0*1f,0*0a,0*0a,0*0a,0*13,0*00,0*00//pai};uint8codestrMCU[]="IloveMCU!";uint8codestrTest[]="LCD1602Test!";uint8codeblog[]="Weletomyblog!";uint8i;voidmain(){Init1602();//初始化1602//自定義CGRAMWrite1602_Str(0*40,8,hot);//攝氏溫標(biāo)Write1602_Str(0*48,8,pi);//paiWrite1602_Str(0*80,strlen(strM
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版勞務(wù)加工承包合同范本
- 2024年藝術(shù)品買賣合同賠償條例
- 2025年度新型城鎮(zhèn)化租賃住房建設(shè)合同4篇
- 2025年度智能家居項(xiàng)目瓷磚材料供應(yīng)合同4篇
- 2025年度體育場館搭棚施工及維護(hù)管理合同4篇
- 2024版鎳氫電池產(chǎn)品銷售合同
- 2025年度學(xué)校食堂及餐飲服務(wù)承包合同范本4篇
- 2025年度新能源汽車購置合同示范文本4篇
- 2025年度特色農(nóng)家樂經(jīng)營權(quán)轉(zhuǎn)讓合同范本3篇
- 2025年度智能窗簾控制系統(tǒng)研發(fā)與市場推廣合同4篇
- 特種設(shè)備行業(yè)團(tuán)隊(duì)建設(shè)工作方案
- 眼內(nèi)炎患者護(hù)理查房課件
- 肯德基經(jīng)營策略分析報(bào)告總結(jié)
- 買賣合同簽訂和履行風(fēng)險控制
- 中央空調(diào)現(xiàn)場施工技術(shù)總結(jié)(附圖)
- 水質(zhì)-濁度的測定原始記錄
- 數(shù)字美的智慧工業(yè)白皮書-2023.09
- -安規(guī)知識培訓(xùn)
- 2021-2022學(xué)年四川省成都市武侯區(qū)部編版四年級上冊期末考試語文試卷(解析版)
- 污水處理廠設(shè)備安裝施工方案
- 噪聲監(jiān)測記錄表
評論
0/150
提交評論