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

下載本文檔

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

文檔簡介

1、LCD1602液晶顯示應(yīng)用總結(jié)一、1602里面存儲器有三種:CGROMCGRAMDDRAMCGROM存了廠家生產(chǎn)時固化在LCM中的點(diǎn)陣型顯示數(shù)據(jù);CGRAM!留給用戶自己定義點(diǎn)陣型顯示數(shù)據(jù)的;DDRAMU是和顯示屏的內(nèi)容對應(yīng)的。1602內(nèi)部的DDRAK80字節(jié),而顯示屏上只有2行X16列,共32個字符,所以兩者不完全對應(yīng)。默認(rèn)情況下,顯示屏上第一行的內(nèi)容對應(yīng)DDRAMP80H到8FH的內(nèi)容,第二行的內(nèi)容對應(yīng)DDRAMC0HIUCFH勺內(nèi)容。DDRAM190H至UA7HD0HIUE7H的內(nèi)容是不顯示在顯示屏上的,但是在滾動屏幕的情況下,這些內(nèi)容就可能被滾動顯示出來了。注:這里列舉的DDRA啪地址

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

3、光標(biāo)或顯示移動指令”使字符慢慢移動到可見的顯示范圍內(nèi),看到字符的移動效果。為了在液晶屏幕上顯示字符,就把字符代碼送入DDRAM例如,如果想在屏幕左上角顯示字符'A',那么就把字符'A'的字符代碼41H寫入DDRAMJ00H地址處即可。至丁怎么寫入,后面會有說明。那么為什么把字符代碼寫入DDRAM就可以在相應(yīng)位置顯示這個代碼的字符呢?我們知道,LCD160如一種字符點(diǎn)陣顯示器,為了顯示一種字符的字形,必須要有這個字符的字模數(shù)據(jù),什么叫字符的字模數(shù)據(jù),看看下面的這個圖就明白了:OHIOOHHHOI10001HOOGB10001HOGOH10001BOOOB11111

4、10001BOOOB10001OOOA的字模上圖的左邊就是字符A'的字模數(shù)據(jù),右邊就是將左邊數(shù)據(jù)用“?!贝?,用“”代表1。從而顯示出A'這個字形。從下面的圖可以看出,字符'A的高4位是0100,低4位是0001,合在一起就是01000001b,即41H。它恰好與該字符的ASCII碼一致,這樣就給了我們很大的方便,我們可以在PC上使用P2='A'這樣的語法。編譯后,正好是這個字符的字符代碼。在LCD1602塊上固化了字模存儲器,就是CGROMCGRAMHD44780內(nèi)置了192個常用字符的字模,存丁字符產(chǎn)生器CGROM(CharacterGenerat

5、orROM)中,另外還有8個允許用戶自定義的字符產(chǎn)生RAM稱為CGRAM(CharacterGeneratorRAM)。下圖(字模表)說明了CGROM1CGRAlMf字符的對應(yīng)關(guān)系。從ROM:RAM勺名字我們也可以知道,ROhM早已固化在LCD1602莫塊中的,只能讀??;而RA觀可讀寫的。也就是說,如果只需要在屏幕上顯示已存在丁CGROM中的字符,那么只須在DDRA波寫入它的字符代碼就可以了;但如果要顯示CGROM中沒有的字符,比如攝氏溫標(biāo)的符號,那么就只有先在CGRA怖定義,然后再在DDRA的寫入這個自定義字符的字符代碼即可。和CGROM固化的字符不同,CGRA怖本身沒有字符,所以要在DDR

6、AW寫入某個CGROM存在的字符,必須在CGRA忡先定義后使用。程序退出后CGRA怖定義的字符也不復(fù)存在,下次使用時,必須重新定義。5xddot5x10dotcharacterfontcharacterfontHWALCirsor11thine上面這個圖(如圖10)說明的是5X8點(diǎn)陣和5X10點(diǎn)陣字符的字形和光標(biāo)的位置。先來說5X8點(diǎn)陣,它有8行5列。那么定義這樣一個字符需要8個字節(jié),每個字節(jié)的前3個位沒有被使用。例如,定義攝氏溫標(biāo)的符號0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00。RSR/WD67DB6DBSDB4j)B3DB2DB1D8QCode001a篇

7、aaa設(shè)置CGRAMfc址指令上面這個圖說明的是設(shè)置CGRA地址指令。從這個指令的格式中我們可以看出,它共有aaaaaa這6位,一共可以表示64個地址,即64個字節(jié)。一個5X8點(diǎn)陣字符共占用8個字節(jié),那么這64個字節(jié)一共可以自定義8個字符。也就是說,上面這個圖的6位地址中的DB5DB4DB來表示8個自定義的字符,DB2DB1DB0來表示每個字符的8個字節(jié)。這DB5DB4DB3表示的8個自定義字符(0-7)就是要寫入DDRA時的字符代碼。我們知道,在CGRA時只能定義8個自定義字符,也就是只有07這8個字符代碼,但在下面的這個表(如圖12)中一共有16個字符代碼(xxxx0000b-xxxx11

8、11b)。實(shí)際上,如圖所示,它只能表示8個自定義字符(XXXX0000b=xXXx1000b,xxxX0001b=XXXX1001b依次類推)。也就是說,寫入DDRA波的字符代碼0和字符代碼8是同一個自定義字符。5X10點(diǎn)陣每個字符共占用16個字節(jié)的空間,所以CGRA怖只能定義4個這樣的自定義字符那么如何在CGRA梆自定義字符呢?在上面的介紹中,我們知道有一個設(shè)置CGRAM址指令,同寫DDRA臨令相似,只須設(shè)置好某個自定義字符的字模數(shù)據(jù),然后按照上面介紹的方法,設(shè)置好CGRA地址,依次寫入這個字模數(shù)據(jù)即可。我們在后面的例子中再進(jìn)行說明。0000MOI0010001101OO0101011001

9、11100100110101011110011(ninomixxxkOOOOCGRWJ(i)0STE一少三gpxxxxOOOl(2)!1its4!B7釘xxxxOQIO112BF!brr【戶白UXX0011(4)#3C?5csjE«xxxxOlOO(5)$4D1FdtIhtXXXXQ101向J;5EIJeu.才于jLCUxxxxOl10(7)家回FIuJ12:IpZxxmxOth(«)'7Gb7豐HxxxxIOOO<SH><hxILj-xxxxxlQQI心oYJiir'HXM1Q10P)訴:JEIjZ一一Ii)L頊壬XXKX1011(4)+

10、;Kt:k7t?trxxxxIIOO(5?niVxxxxl101(6)-=M:1M所:住=xxxxiiio(7).>N"BnXXXX1111&)/?0._O'Uy?B二、1602使用三條控制線:EMRWRS其中EN起到類似片選和時鐘線的作用,RVWRS旨示了讀、寫的方向和內(nèi)容。在讀數(shù)據(jù)(或者Busy標(biāo)志)期間,EN線必須保持高電平;而在寫指令(或者數(shù)據(jù))過程中,EN線上必須送出一個正脈沖。RWRS的組合一共有四種情況,分別對應(yīng)四種操作:RA0、RW0表示向LCD寫入指令。RA0、RW1表示讀取Busy標(biāo)志。RA1、RW0表示向LCD寫入數(shù)據(jù)。RA1、RW1表示從

11、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、VDDft+5V3、V0是液晶顯示的偏壓信號,可接10K的3296精密電位器?;蚴峭瑯幼柚档腞M065/RM06拚號的藍(lán)白可調(diào)電阻。V0VDD|11|-VSS10K4、RS是命令/數(shù)據(jù)選擇引腳,接單片機(jī)的其中一個I/O口。當(dāng)RS=0選擇

12、指令模式;RS=1,選擇數(shù)據(jù)模式。5、RV的讀/寫模式選擇引腳,接單片機(jī)的一個I/O口,RW=0寫,向1602寫數(shù)據(jù)或是指令。RW=1讀,從1602讀取數(shù)據(jù)或是狀態(tài),如果是不需要進(jìn)行讀取操作,可以直接此位接Vss。6、E,LCD160歐行命令的使能信號,接單片機(jī)的一個I/O口。7、D0D7LCD1602的并行數(shù)據(jù)輸入/輸出端口,可以接單片機(jī)的任意一個的8位的I/O端口(P0P3,如果是接P0口的話要接一個8位的上拉電阻。當(dāng)應(yīng)用4線并行驅(qū)動模式的時候,只需接4個并行的I/O端口。8、A:背光正極,可以接一個1047Q的限流電阻接到VDD9、K:背光負(fù)極,接VSSVSSVSSED1D2D3D4D5

13、D71OK0123456123-5678911111111、讀狀態(tài)2、讀數(shù)據(jù)3、寫指令D0D7為狀態(tài)字D0D7為數(shù)據(jù)。無VSS四、LCD1602的基本操作:RS=0RW=1E=®脈沖。輸出RS=1RW=1E=®脈7中。輸出RS=0RW=0E=®脈7中。輸出4、寫數(shù)據(jù):RS=1RW=0E耽脈沖。輸出:無讀操作時序IIRSt5PltcIC*1寫操作時序時序時間參數(shù)時序參效符號單位vm條件it小值典型fit信號網(wǎng)to4CQES引岬EE豚障寬度E上升洎,下障消時間mtn,tf15025rmI地毗建立兩間一t3>*130.E引腳E、RS,R/V地批保持也tkDI1C一

14、rS數(shù)據(jù)電立時間(讀漫作)效據(jù)保特眄間【詼攝作)totrfj?2C100nqnt引擔(dān)DROfDB7裁據(jù)建立時間!:寫綠作)ts(*f4£n$鼓葬保特眨間:曰眷作)tWM1C一r£五、LCD1602®晶顯示屏指令:1、工作方式設(shè)置指令:(一般0x38)RSRMDB7DB6DB5ID64D03DB2DB1D60Code00001DLNFXXX:不關(guān)心,也就是說這個位是0或1都可以,一般取0。DL:設(shè)置數(shù)據(jù)接口位數(shù)。DL=1:8位數(shù)據(jù)接口(D7-D0)。DL=Q4位數(shù)據(jù)接口(D7-D4)。N=Q一行顯示。N=1:兩行顯示。F=0:5X8點(diǎn)陣字符。F=1:5X10點(diǎn)陣字符

15、。說明:因?yàn)槭菍懼噶钭郑訰S和RWtK是0。LCD1602只能用并行方式驅(qū)動,不能用申行方式驅(qū)動。而并行方式乂可以選擇8位數(shù)據(jù)接口或4位數(shù)據(jù)接口。這里我們選擇8位數(shù)據(jù)接口(D7D0)。我們的設(shè)置是8位數(shù)據(jù)接口,兩行顯示,5X8點(diǎn)陣,即0b00111000也就是0x38。(注意:NF是10或11的效果是一樣的,都是兩行5X8點(diǎn)陣。因?yàn)樗荒芤詢尚?X10點(diǎn)陣方式進(jìn)行顯示,換句話說,這里用0x38或0x3c是一樣的)。2、顯示開關(guān)控制指令(一般0x0c)RSR/WDB7DB6DB5DB4ID63DB2DB1D60Code0Q000fl1DCBD=1:顯示開,D=Q顯示關(guān)。C=1:光標(biāo)顯示,C=

16、Q光標(biāo)不顯示。B=1:光標(biāo)閃爍,B=0:光標(biāo)不閃爍。3 說明:這里的設(shè)置是顯示開,不顯示光標(biāo),光標(biāo)不閃爍,設(shè)置字為0x0c.進(jìn)入模式設(shè)置指令:R/WD"D06DB5DB4D83DB2DB1CodeI/D=1:寫入新數(shù)據(jù)后光標(biāo)右移I/D=0:寫入新數(shù)據(jù)后光標(biāo)左移S=1:顯示移動。S=0:顯示不移動。IS=1l/D=1Itshiftsthedisplaytotheleft1IS二1UD=OItshiftsthedisplaytotheright|4 說明:這里的設(shè)置是0x06.光標(biāo)或顯示移動指令:RSR/WDB7DBGDBSD84DB3DB2DB1DBOCede000001s/cR/LX

17、XSKWL00ShftcmottothvInrt*C=AC-101Shftcursorl»thenghl«;=AC+110StuffdcspkiYIdtwIrftCursorfglowsthedisplayshrflAC-ACt1ShftdhpayianghtiDtrsnrinMcwtttwfirfeplaydhifllAC=AC說明:在需要進(jìn)行整屏移動時,這個指令非常有用,可以實(shí)現(xiàn)屏幕的滾動顯示效果。初始化時不使用這個指令。5 .活屏指令:RSR/WDB7D86DBS84D83DB2DB1DBOCode00000000016 說明:活除屏幕顯示內(nèi)容。光標(biāo)返回屏幕左上角。執(zhí)

18、行這個指令時需要一定時間.光標(biāo)歸位指令:RSR/WDB7DB6DBSDB4DB3DB2OBID60Code000000001X7 說明:光標(biāo)返回屏幕左上角,它不改變屏幕顯示內(nèi)容.設(shè)置CGRA眺址指令:RSIFVWDB7D06ID65DS4DB3D02ID01000Code0001aaa8aa說明:這個指令在上面已經(jīng)介紹過。用法在后面例子中說明8.設(shè)置DDRAI%址指令:RSFUWDB7DBGDB5DB4DB3DB2DB1DBOCodeOOlsaaaaaa說明:這個指令用丁設(shè)置DDRAF®址。在對DDRAMft行讀寫之前,首先要設(shè)置DDRAI%址,然后才能進(jìn)行讀寫。前面我們說過,DDR

19、A磷是LCD1602的顯示存儲器。我們要在它上面進(jìn)行顯示,就要把要顯示的字符寫入DDRAM同樣,我們想知道DDRAIK個地址上有什么字符,也要先設(shè)置DDRA蛇址,然后將它讀出到單片機(jī)。9.讀忙信號和地址計數(shù)器AC:RSR/WDB7DB6D05DB4DB362D01DBOCode01BFaa8aaaa說明:這個指令用來讀取LCD1602犬態(tài)。對丁單片機(jī)來說,LCD1602H丁慢速設(shè)備。當(dāng)單片機(jī)向其發(fā)送一個指令后,它將去執(zhí)行這個指令。這時如果單片機(jī)再次發(fā)送下一條指令,由丁LCD160獨(dú)度較慢,前一條指令還未執(zhí)行完畢,它將不接受這新的指令,導(dǎo)致新的指令丟失。因此這條讀忙指令可以用來判斷LCD1602

20、是否忙,能否接收單片機(jī)發(fā)來的指令。當(dāng)BF=1,表示LCD1602正忙,不能接受單片機(jī)的指令;當(dāng)BF=0,表示LCD1602空閑,可以接收單片機(jī)的指令。RS=0表小是指令;RW=1表小是讀取。這條指令還有一個副產(chǎn)品:即可以得到地址記數(shù)器AC的值(addresscounter)。LCD160孫護(hù)了一個地址計數(shù)器AG用來記錄下一次讀寫CGRAI®DDRA構(gòu)位置。需要強(qiáng)調(diào)的是:這條指令我一次也沒有執(zhí)行成功。很多網(wǎng)友似乎也是這樣。好在我們有另外的辦法,也就是延時。通過查看每條指令的執(zhí)行時間,再經(jīng)過一些試驗(yàn),可以確定指令的延時。這樣就可以在上一條指令執(zhí)行完畢后再執(zhí)行下一條指令了。10. 寫數(shù)據(jù)至

21、UCGRAKDDRA郵令:RSRWDB7D06D05D64DB3DB2D61D60Code10dddddddd說明:RS=1數(shù)據(jù);RW=0寫。指令執(zhí)行時,要在DBQDB0上先設(shè)置好要寫入的數(shù)據(jù),然后執(zhí)行寫命令。11.從CGRA成DDRA族數(shù)據(jù)指令:RSR/WDB7066DB5084DB3DB2D61DB0Code11dddddddd說明:RS=1數(shù)據(jù);RW=1讀。先設(shè)置好CGRA成DDRAIW地址,然后執(zhí)行讀取命令。數(shù)據(jù)就被讀入后DBADB(五、1602LCD的一般初始化(復(fù)位)過程延時15mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信

22、號)以后每次寫指令、讀/寫數(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以5X8點(diǎn)陣,16X2行,8位數(shù)據(jù)端口。首先在第一行顯示“IloveMCU!,第二行顯示“LCD1602Test!”。延時一段時間,活屏。然后在第一行顯示自定義字符:攝氏溫標(biāo)標(biāo)志。第二行顯示圓周率(pai)標(biāo)志。再延時一段時間,活屏。最后在第一行顯示“Welcomet

23、omyblog!”,顯示方式是從屏幕右面移入,左面移出,周而復(fù)始。/Filel#ifndef_ZHANGTYPE_H_#define_ZHANGTYPE_H_#defineuint8unsignedchar#defineuint16unsignedshortint#defineuint32unsignedlongint#defineint8signedchar#defineint16signedshortint#defineint32signedlongint#defineuint64unsignedlonglongint#defineint64signedlonglongint#endif/

24、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"/#include"fun.h"/#defineSETMODE0x38#defineDISOPEN0

25、x0C/#defineDISMODE0x06/#defineSETADDR0x80#defineCLEAR0x01/#defineRET0x02/#definePORTP2/I/OsbitRS=P1A0;sbitRW=PSI;sbitE=P1A2;voidInit1602(void);/voidWrite1602_Com(uint8com);voidWrite1602_Dat(uint8dat);/voidCheckBusy(void);/變量類型常用函數(shù)/16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口顯示開,不顯示光標(biāo),光標(biāo)不閃爍讀寫字符后地址加1,屏顯不移動/設(shè)置數(shù)據(jù)地址指針初始值活屏,數(shù)據(jù)指針活

26、零回車,數(shù)據(jù)指針活零口初始化1602/寫命令寫數(shù)據(jù)檢查忙voidWrite1602_One_Dat(uint8X,uint8Y,uint8dat);/寫一個數(shù)據(jù)voidWrite1602_Str(uint8addr,uint8length,uint8*pbuf);/寫一個數(shù)據(jù)申#endif/File5#include"1602.h"voidWrite1602_Com(uint8com)E=0;RS=0;/命令Delay(50);/延時RW=0;/寫Delay(50);PORT=com;/端口賦值Delay(50);E=1;/高脈沖Delay(50);E=0;voidWrit

27、e1602_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=0xFF;/E=1;/temp=PORT;E=0;if(temp&0x80)=0)/break;voidInit1602(void)(Write1602_Com(SETMODE);Delay(500);Write1602_Com(DISOPEN);Delay(50

28、0);Write1602_Com(DISMODE);Delay(500);Write1602_Com(CLEAR);Delay(500);高脈沖命令讀端口為輸入高脈沖檢查BF位是否為/模式設(shè)置/顯示設(shè)置/顯示模式/活屏voidWrite1602_One_Dat(uint8x,uint8y,uint8dat)(x&=0x0f;y&=0x01;if(y)x|=0x40;x|=0x80;Write1602_Com(x);Write1602_Dat(dat);voidWrite1602_Str(uint8addr,uint8length,uint8*pbuf)(攝氏溫度字模初始化1602攝氏溫標(biāo)/"Iloveuint8i;Write1602_Com(addr);for(i=0;iWrite1602_Dat(pbufi);/File6*

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論