LCD1602液晶顯示器簡介_第1頁
LCD1602液晶顯示器簡介_第2頁
LCD1602液晶顯示器簡介_第3頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、LCD1602 液晶顯示器簡介LCD1602液晶顯示器簡介一概述液晶Liquid Crystal丨是一種高分子材料,因其特殊的物理、化學、光學特性,廣 泛應用輕薄顯示器上。液晶顯示器Liquid Crystal Display,LCD丨的主要原理是以電流刺激液晶分子產生 點、線、面并配合背部燈管構成畫面。各種型號的液晶通常是按照顯示字符的行數(shù)或液晶點陣的行、列數(shù)來命名。例如,1602表示每行顯示16個字符,一共可以顯示兩行。這類液晶通常稱為字符型液晶,只 能顯示ASCII碼字符。12232表示液晶顯示畫面由122列、32行組成,共有122*32個點來顯示各種圖形。用戶可以通過程序控制這些點中任

2、何一個點顯示或不顯示,從而構 成各種圖形畫面。因此,12232稱為圖形型液晶。液晶體積小,功耗低,顯示操作簡單。但其有致命的弱點,即使用溫度范圍很窄。通用型液晶工作溫度為0到+55攝氏度,存儲溫度為-20到+60攝氏度。LCD160211602的外形尺寸毫米-O 70-*1HIODQQOOORI 25 匕o g g _ g 一 9 e E E d >00000000- r-n匚元詩址底詐LED塢先|2主要技術參數(shù)顯示容量:16X2個字符芯片工作電壓;5V工作電流:2. CniACS. OV模塊最哇T作電壓:5.0V字符尺寸:2.95X4. 35(KXH)nnLCD1602 液晶顯示器簡介

3、3 接口信號說明纟扁號符號引腳說明鳩號符號引關說明1VSS電源地9D2Data I/O2VDD電源正扱10D3Data I/O3VL滋晶顯示偏壓信號11D4Data I/O4RS數(shù)據(jù)/命令選譯端(H/L)12Dais 1/O5Mi讀/寫選擇端(H/L)1306Data I/O§E使能信號14D7Data l/G7DOData I/O15BLA背光源正極0DIData I/O3LH背光源貝極4根本操作時序出出出出輸輸輸輸DOD7M犬態(tài)字無DO*D7二數(shù)據(jù) 無讀狀態(tài):輸入;RS=_, RVT=HP E=H寫指令;輸入;RS=L,RW=L, DO-D7=指哮碼疋二高脈沖 讀數(shù)據(jù):輸入:RS

4、= RW=H, E=H寫數(shù)據(jù):輸入;RS=K RW=L. DO"-D7=數(shù)據(jù),E二高脈沖4 RAM地址映射圖控制器內部帶有80B的RAM緩沖區(qū)。對應關系如下列圖所示。LCD16字農行CC0102C3010506C708090BCC0DQEOF1027(4C4142434445464748494B404D4L4F5057向圖中的000F、404F地址中的任意處寫入顯示數(shù)據(jù)時,液晶可立即顯示出來; 當寫入到1027或5067地址時,必須通過移屏指令將他們一移入可顯示區(qū)域方可正常 顯示。1602液晶模塊內部的字符發(fā)生存儲器CGROM)已經存儲了 160個不同的點陣字符圖形,如下表所示。LC

5、D1602 液晶顯示器簡介1GCGRAM申卑蔣帰瑪與字椅陽融對應蕓系CHXW0010wm010001 ot0119-V 1OJH10HK) J1100H01IU0HllXXX XW0CGRAM<P0$pP?三aPXXX X0001t +IAQgn7A R aqXXXXQ01Q:BRbr警聲片1X冃gXX XXOOi 1<4)it3cSetJ壬<8XXX X01MJs4DTdt工卜nXX XX0101%"s"EUeV才tB0XXXXG11OjtN6VfV7力3Pkxxxxom>7Gw :豈w7Knxx y xioto(1)c&HXh喜Y夕*fX

6、xxxxiooi1)1YiXrVJTyxxxxioioi"IZiEJLJj4X XX XJ011G)+KKEktOX片XX X X1IOO(5)7<L*11<1X X XX11&1MmJ工天、VX X X XHIO(7)">an弓八Ixxxxnn(8)/To50-4"'yV口6:;:這些字符有:阿拉伯數(shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一 個字符都有一個固定的代碼,比方大寫的英文字母“A '的代碼是01000001B 41H,顯示時模塊把地址 41H中的點陣字符圖形顯示出來,我們就能看到字母“A"

7、。6 狀態(tài)字說明STA7SrABSTASSFA4SIA3STA?STA1STAGP7D6D5DI03JIDO當?shù)跸髾欕娭忿袇未蜷熎澆甋TA7 謹呂揍性便歴I:蔡止 D:允性說明:原那么上每次對控制器進展讀寫操作前,都必須進展讀寫檢測,確保STA7為0。實際上,由于單片機的操作速度慢于液晶控制器的反響速度,因此可以不進展檢測,或 只進展簡短的延時即可。7 指令說明1602液晶模塊內部的控制器共有11條控制指令。(1)顯示模式設置指令瑪功能00111c0D爾 1孵顯示5X7點陣用位暫搞按口45T8LCD1602 液晶顯示器簡介(2) 顯示開/關及光標設置功能n00001GB0-1開顯示;D-0關顯

8、示G=1顯喬無標;水顯吞光標B-1光標閃爍:B=0光標不顯示000001NS掃1當讀或寫一個字符后地址1旨計加-3光標力XN=0當壤或寫一個字痔盲地址重針咸 且托靱減一S=1當寫一個字符,整屬顯示左穆(N=l)或右移小二T以得到光標不移動而屏 皋移動的監(jiān)果.s=o當寫一個宇符,整屏顯示不移動(3)數(shù)據(jù)指針設置:指令碼功能S0H+ 地址碼(0-27H .4OH-G7H)設邑載據(jù)地址指封(4)其它設置指令碼功能0IH顯示清屏;1.數(shù)據(jù)指針清霧2”所有顯示清零02H顯示回車:1數(shù)據(jù)指針清零8控制接口時序說明 時序參數(shù)時序參敎極覘值單也測試條件星小值典型值k信號確tc4CQns引filEtPA150一

9、nsE.I升沿/下隧時間tfi. If25ns地址建立時旬t£F1aans引腳匕時、R/IT堆址保持時間tHDl10ns018立時遼:讀操低)to100ns弓腫DEDD乘紋據(jù)保持對X/i劉桑佗)tuD;2fl=rrs藪搖富立吐司藥掾侄LLSP;40=ns蛟據(jù)保特對間:寫操作)tW910rs讀操作時序RSR/WEDBODB?1R通t£iVslid Data J*to寫操作時序9初始化過程1延時15ms2寫指令38H(不檢測忙信號)3延時5ms4寫指令38H(不檢測忙信號)5延時5ms6寫指令38H(不檢測忙信號)7(以后每次寫指令、讀/寫數(shù)據(jù)操作之前均需檢測忙信號)8寫指令3

10、8H:顯示模式設置9寫指令08H:顯示關閉10寫指令01H:顯示清屏11寫指令06H:顯示光標移動設置12寫指令0CH顯示開及光標設置三驅動程序舉例1 I/O 方式驅動程序gw LS085 10W.P3.P3.R-冊祝們.制H(J-7MD:QNLO9OWS程序如下:/*SMC1602A(16*2)I/O口線接線方式連接線圖:|LCM-51 | LCM-51 | LCM51|丨|DB0-P1.0 | DB4-丨-P1.4 | RW-P2.0 丨|DB1-P1.1 | DB5-P1.5 丨 RSP2.1 丨|DB2-P1.2 | DB6-P1.6 丨 EP2.2 丨|DB3-P1.3 | DB7-

11、P1.7 丨 VLCD接1K電阻到GND|注:AT89S51 使用12M晶體震蕩器*/#in elude <reg51.h>sbit LCM_RW=P2A0;/ 定義引腳sbit LCM_RS =卩2人1;sbit LCM_E =P2A2;LCD1602 液晶顯示器簡介#define LCM_DataP1#define Busy 0x80 / 用于檢測 LCM 狀態(tài)字中的 Busy 標識void WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);unsigned cha

12、r ReadDataLCM(void);unsigned char ReadStatusLCM(void); void LCMInit(void);void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);codevoid DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData);void Delayms(unsigned int n);void dellay(unsigned inth);unsigned char

13、code blog_adr = "EDNchina"unsigned char code email = ""void main(void) /Delay400Ms(); / 啟動等待,等 LCM 講入工作狀態(tài) LCMInit(); /LCM 初始化 DisplayListChar(6, 0, blog_adr);DisplayListChar(0, 0, email);while(1);/寫數(shù)據(jù) RS="H",RW=L,D0D7= 數(shù)據(jù) ,E= 高脈沖 void WriteDataLCM(unsigned char WDLCM) d

14、ellay(100);LCM_E = 0; LCM_RS = 1; LCM_RW = 0;LCM_Data = WDLCM;/dellay(100);/短暫延時,代替檢測忙狀態(tài)/ReadStatusLCM(); / 檢測忙LCM_E = 1;LCM_E = 0;/寫指令 RS="L",RW=L,D0D7= 指令碼 ,E= 高脈沖 void WriteCommandLCM(unsigned char WCLCM,BuysC) /BuysC 為 0 時忽略忙檢測/if (BuysC) ReadStatusLCM(); / 根據(jù)需要檢測忙 dellay(100); /短暫延時,代

15、替檢測忙狀態(tài) LCM_E = 0;LCM_RS = 0;LCM_RW = 0;LCM_Data = WCLCM;LCM_E = 1;LCM_E = 0;/ 讀數(shù)據(jù) RS="H",RW=H,E=Hunsigned char ReadDataLCM(void)LCM_RS = 1;LCM_RW = 1;LCM_E = 1;return(LCM_Data);/ 讀狀態(tài) RS="L",RW=H,E=Hunsigned char ReadStatusLCM(void)LCM_Data = 0xFF;LCM_RS = 0;LCM_RW = 1;LCM_E = 1;/

16、while (LCM_Data & Busy); / 檢測忙信號 return(LCM_Data);LCD1602 void LCMInit(void) /LCM 初始化 LCM_Data = 0;Delayms(15);WriteCommandLCM(0x38,0); / Delayms(5);WriteCommandLCM(0x38,0);Delayms(5);WriteCommandLCM(0x38,0);WriteCommandLCM(0x38,1); /WriteCommandLCM(0x08,1); /WriteCommandLCM(0x01,1); /WriteComma

17、ndLCM(0x06,1); /WriteCommandLCM(0x0C,1); / /按指定位置顯示一個字符液晶顯示器簡介三次顯示模式設置,不檢測忙信號顯示模式設置 ,開場要求每次檢測忙信號 關閉顯示顯示清屏顯示光標移動設置 顯示開及光標設置void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) Y &= 0x1;X &= 0xF; / 限制 X 不能大于 15, Y 不能大于 1if (Y) X |= 0x40; / 當要顯示第二行時地址碼 +0x40;X |= 0x80; / 算

18、出指令碼WriteCommandLCM(X, 1); / 這里不檢測忙信號,發(fā)送地址碼 WriteDataLCM(DData);/按指定位置顯示一串字符codevoid DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData)unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF;/ 限制 X 不能大于 15 , Y 不能大于 1while (DDataListLength>0x1f) / 假設到達字串尾那么退出if (X &l

19、t;= 0xF) /X 坐標應小于 0xFDisplayOneChar(X, Y, DDataListLength); / 顯示單個字符 ListLength+; X+;/延時程序void Delayms(unsigned int n)unsigned int i,j; for(j=n;j>0;j-) for(i=112;i>0;i-);/* 函數(shù)名稱 : dellay* 入口參數(shù): h unsigned int 型* 出口參數(shù):無* 功能描述 : 短暫延時,使用 12MHz 晶體,約 0.01MS*/void dellay(unsigned int h)while(h-);/0.

20、01MS要注意的是在讀寫程序中,沒有用 “檢測忙,其實對于 1602 來說,沒有檢測忙 信號對于實際來說還好, 因為常常因為檢測忙, 而使 1602 沒顯示 一直處于忙檢測中 “忙檢測用一個小延時代替。對于 LCM1602 來說,讀寫時序最重要。LCM1602寫操作時序/寫數(shù)據(jù) RS="H",RW=L,D0D7= 數(shù)據(jù),E=高脈沖void WriteDataLCM(u nsig ned char WDLCM)dellay(100);短暫延時,代替檢測忙狀態(tài)LCM_E = 0;LCM_RS = 1;LCM_RW = 0;LCM_Data = WDLCM;LCM_E = 1;L

21、CM_E = 0;/寫指令RS="L",RW=L,D0D7= 指令碼,E=高脈沖 void WriteComma ndLCM(u nsig ned char WCLCM) dellay(100);/短暫延時,代替檢測忙狀態(tài)LCM_E = 0;LCM_RS = 0;LCM_RW = 0;LCM_Data = WCLCM;LCM_E = 1;LCM_E = 0;其實這個時序上面兩個分別為寫數(shù)據(jù)函數(shù)和寫命令函數(shù),檢測忙已用小延時代替。好似不太嚴格,但要保證的是 E高脈沖時,寫的數(shù)據(jù)/命令是有效的。53 / 18LCD1602 液晶顯示器簡介 好似函數(shù)也可以寫成這樣: void W

22、riteCommandLCM(unsigned char WCLCM) dellay(100);/ 短暫延時,代替檢測忙狀態(tài)LCM_Data = WCLCM; LCM_RS = 0; LCM_RW = 0; LCM_E = 0;dellay(100);LCM_E = 1;/按指定位置顯示一串字符函數(shù) DisplayListChar 的作用是在指定位置顯示一串字符,其中有一句 “while (DDataListLength>0x1f) / 假設到達字串尾那么退出為什么要大于 0x20 呢?unsigned char code blog_adr = "EDNchina"u

23、nsigned char code email = ""用單引號 ''括(起) 來的字符為字符的 ASCII 碼值,而不是字符串。用雙引號 (shift+ ) 括起來的一串字符, 成為字符串常量。 C 編譯器會自動地在 字符末尾加上完畢符 '0'(NULL) (ASCII 碼為 0x00 也就是 00H) 。char a=“ Bei Jing; ri f< I >i >char a=B','e','I','0','J','i ','

24、;n','g','兩者是等價的,數(shù)組的每個元素為對應字符的ASCII碼,如a3數(shù)組a的第四個元素是空格,那么a3里面放著的是空格的ASCII碼0x20。還要注意的是數(shù)組的元素數(shù)目一定要比字符多一個。以便C 編譯器自動在其后面參加完畢符 ' 0'??梢灾?' ASCI碼為 0x00n' ASCI碼為 0x0A那知道為什么有這句了吧“ while (DDataListLe ngth>0x1F) / 假設到達字串尾那么退出因為大于0x1f才能顯示字符,小于和等于0x1f的都是鍵盤控制符。當然我們也可以檢測0' (0x00

25、)“while (DDataListLength!=' 0') 檢測到字符串完畢符那么退出"2 總線方式驅動程序卯ri?0J祁P2 JP2 1P2.yVZO9OWS%-ER/RSVOBUB1LCM1602 總線方式 C51程序/*Lcd1602B.c*#in clude <delay.h>#include <lcd1602b.h>#in clude <absacc.h>/*=顯示字符串=*/void LcdDisplayStri ng(un sig ned char x,un sig ned char y, un sig ned c

26、har *ptr) un sig ned char i,l=0;while (ptrl >31)l+;/for (i=0;i<l;i+) LcdDisplayChar(x+,y,ptri);if ( x = 16 )x = 0; y A= 1; II異或,第一行的話變第二行,第二行的話變第一行LCD1602 液晶顯示器簡介/*= 顯示光標定位=*/void LocateXY( char posx,char posy) unsigned char temp;temp = posx & 0x0f;/確保只選 016 個格子posy &= 0x01;/確保不是在第一行就在

27、第二行if ( posy )temp |= 0x40; / 在第二行的時候加 40Htemp |= 0x80; / 數(shù)據(jù)指針設置 指令碼 80H+ 地址碼 0-27H ,40H-67H LcdWriteCommand(temp,1);/*= 按指定位置顯示數(shù)出一個字符=*/ void LcdDisplayChar(unsigned char x,unsigned char y,unsigned char Wdata) LocateXY( x, y ); / 定位顯示地址LcdWriteData( Wdata );/ 寫字符/*=初始化程序 , 必須按照產品資料介紹的初始化過程進展=*/void

28、 LcdReset( void ) Delayms(400); / 啟動時必須的延時,等待 lcm 進入工作狀態(tài)LcdWriteCommand( 0x38, 0); / 顯示模式設置 (不檢測忙信號 ) Delayms(15);LcdWriteCommand( 0x38, 0);/ 共三次Delayms(15);LcdWriteCommand( 0x38, 0);Delayms(15);LcdWriteCommand( 0x38, 1);LcdWriteCommand( 0x08, 1);LcdWriteCommand( 0x06, 1);LcdWriteCommand( 0x0c, 1);

29、LcdClear();/ 顯示模式設置 (以后均檢測忙信號 )/ 顯示關閉/ 顯示光標移動設置/ 顯示開及光標設置/*=clear =*/ void LcdClear(void)LcdWriteCommand( 0x01, 1);/ 顯示清屏 /*= 寫控制字符子程序 : E="1" RS="0" RW="0"=*/ void LcdWriteCommand( unsigned char CMD,unsigned char AttribC ) /AttribC=1 檢查忙狀態(tài), AttribC=0 不檢查忙狀態(tài)if (AttribC)

30、 while( Lcd1602StatusPort & Busy );/ 檢測忙信號/busy=0x80 每次讀寫操作都要進展讀寫檢測,確保 SAT7=0 Lcd1602CmdPort = CMD;/*= 當前位置寫字符子程序 : E =1 RS="1" RW="0"=*/ void LcdWriteData( char dataW ) while( Lcd1602StatusPort & Busy );/檢測忙信號/busy=0x80 每次讀寫操作都要進展讀寫檢測,確保 SAT7=0Lcd1602WdataPort = dataW;51

31、 單片機 C51 微秒級 ms 準確準確微秒級延時詳細可以參考我另一篇博文 延時 /*delay.h*#include <delay.h>/for crystal 11.0592Mvoid Delayms(unsigned int n) unsigned int i,j;for(j=n;j>0;j-) for(i=112;i>0;i-);/* lcd1602b.h *#ifndef _LCD1602B_H_/E=1 RS="0" RW="0"/寫指令/E =1 RS="1" RW="0" /

32、 寫數(shù)據(jù) /E=1 RS="0" RW="1"/ 讀狀態(tài)/busy#define _LCD1602B_H_#define Lcd1602CmdPort XBYTE0x8000#define Lcd1602WdataPort XBYTE0x8100#define Lcd1602StatusPort XBYTE0x8200#define Busy 0x80extern void LcdClear(void);extern void LcdWriteData( char dataW );extern void LcdWriteCommand( unsigned

33、 char CMD,unsigned char AttribC ); extern void LcdReset( void );extern void Display( unsigned char dd ); extern void LcdDisplayChar(unsignedcharx,unsignedchar y,unsignedcharWdata);extern void LcdDisplayString(unsignedcharx,unsignedchar y, unsignedchar*ptr);#endif其中要注意寫指令的地址0x8000寫數(shù)據(jù)的地址0x8100讀狀態(tài)的地址0x8200這三個地址值是根據(jù)硬件電路連接確定的。LCD1602 液晶顯示器簡介/* absacc.h*#ifndef _ABSACC_H_#define _ABSACC_H_#define CBYTE (unsigned char volatile code *) 0)#define DBYTE (unsigned char volatile data *) 0)#define PBYTE (unsigned char volatile pdata *) 0)#d

溫馨提示

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

評論

0/150

提交評論