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

下載本文檔

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

文檔簡介

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

2、各種圖形畫面。因此,12232稱為圖形型液晶。液晶體積小,功耗低,顯示操作簡單。但其有致命的弱點(diǎn),即使用溫度范圍很窄。通用型液晶工作溫度為0到+55攝氏度,存儲溫度為-20到+60攝氏度。二 LCD1602 1 1602的外形尺寸(毫米)2 主要技術(shù)參數(shù)3 接口信號說明4 基本操作時(shí)序4 RAM地址映射圖控制器內(nèi)部帶有80B的RAM緩沖區(qū)。對應(yīng)關(guān)系如下圖所示。向圖中的000F、404F地址中的任意處寫入顯示數(shù)據(jù)時(shí),液晶可立即顯示出來;當(dāng)寫入到1027或5067地址時(shí),必須通過移屏指令將他們一移入可顯示區(qū)域方可正常顯示。1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個(gè)不同的點(diǎn)

3、陣字符圖形,如下表所示。這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A”。6 狀態(tài)字說明說明:原則上每次對控制器進(jìn)行讀寫操作前,都必須進(jìn)行讀寫檢測,確保STA7為0。實(shí)際上,由于單片機(jī)的操作速度慢于液晶控制器的反應(yīng)速度,因此可以不進(jìn)行檢測,或只進(jìn)行簡短的延時(shí)即可。7 指令說明 1602液晶模塊內(nèi)部的控制器共有11條控制指令。(1) 顯示模式設(shè)置(2) 顯示開/關(guān)及光標(biāo)設(shè)置(3) 數(shù)據(jù)指針設(shè)置(4) 其它設(shè)置8 控制

4、接口時(shí)序說明時(shí)序參數(shù)讀操作時(shí)序?qū)懖僮鲿r(shí)序9 初始化過程1)延時(shí)15ms2)寫指令38H(不檢測忙信號)3)延時(shí)5ms4)寫指令38H(不檢測忙信號)5)延時(shí)5ms6)寫指令38H(不檢測忙信號)7)(以后每次寫指令、讀/寫數(shù)據(jù)操作之前均需檢測忙信號)8)寫指令38H:顯示模式設(shè)置9)寫指令08H:顯示關(guān)閉10)寫指令01H:顯示清屏11)寫指令06H:顯示光標(biāo)移動(dòng)設(shè)置12)寫指令0CH:顯示開及光標(biāo)設(shè)置三 驅(qū)動(dòng)程序舉例1 I/O方式驅(qū)動(dòng)程序程序如下:/*=SMC1602A(16*2)I/O口線接線方式 連接線圖:-|LCM-51 | LCM-51 | LCM-51 |-|DB0-P1.0 |

5、DB4-P1.4 | RW-P2.0 |DB1-P1.1 | DB5-P1.5 | RS-P2.1 |DB2-P1.2 | DB6-P1.6 | E-P2.2 |DB3-P1.3 | DB7-P1.7 | VLCD 接 1K 電阻到 GND|-注:AT89S51 使用 12M 晶體震蕩器=*/#include <reg51.h> sbit LCM_RW=P20;   /定義引腳sbit LCM_RS =P21;sbit LCM_E  =P22; #define LCM_Data  P1 #define Busy

6、0x80 /用于檢測 LCM 狀態(tài)字中的 Busy 標(biāo)識 void WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);unsigned char ReadDataLCM(void); unsigned char ReadStatusLCM(void); void LCMInit(void); void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);void Displa

7、yListChar(unsigned char X, unsigned char Y, unsigned char code *DData);void Delayms(unsigned int n);void dellay(unsigned int  h); unsigned char code blog_adr = "EDNchina"unsigned char code email = "tengjingshu" void main(void)       /D

8、elay400Ms();   /啟動(dòng)等待,等 LCM 講入工作狀態(tài)       LCMInit();        /LCM 初始化       DisplayListChar(6, 0, blog_adr);               DisplayLis

9、tChar(0, 0, email);          while(1); /寫數(shù)據(jù) RS="H",RW=L,D0D7=數(shù)據(jù),E=高脈沖void WriteDataLCM(unsigned char WDLCM)               dellay(100);       LCM_E = 0; 

10、60;      LCM_RS = 1;       LCM_RW = 0;LCM_Data = WDLCM;/dellay(100);     /短暫延時(shí),代替檢測忙狀態(tài)       /ReadStatusLCM(); /檢測忙       LCM_E = 1;     

11、60;    LCM_E = 0;  /寫指令 RS="L",RW=L,D0D7=指令碼,E=高脈沖 void WriteCommandLCM(unsigned char WCLCM,BuysC) /BuysC 為 0 時(shí)忽略忙檢測       /if (BuysC) ReadStatusLCM(); /根據(jù)需要檢測忙      dellay(100);       /短暫延時(shí),代替檢測

12、忙狀態(tài)      LCM_E = 0;          LCM_RS = 0;           LCM_RW = 0;      LCM_Data = WCLCM;      LCM_E  = 1;       &

13、#160;  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",R

14、W=H,E=Hunsigned char ReadStatusLCM(void)      LCM_Data = 0xFF;       LCM_RS = 0;       LCM_RW = 1;       LCM_E = 1;       /while (LCM_Data & Busy); /檢測忙信號   

15、;   return(LCM_Data); void LCMInit(void) /LCM 初始化      LCM_Data = 0;      Delayms(15);      WriteCommandLCM(0x38,0); /三次顯示模式設(shè)置,不檢測忙信號      Delayms(5);      Writ

16、eCommandLCM(0x38,0);       Delayms(5);      WriteCommandLCM(0x38,0);      WriteCommandLCM(0x38,1); /顯示模式設(shè)置,開始要求每次檢測忙信號      WriteCommandLCM(0x08,1); /關(guān)閉顯示       WriteCommandLC

17、M(0x01,1); /顯示清屏       WriteCommandLCM(0x06,1); / 顯示光標(biāo)移動(dòng)設(shè)置       WriteCommandLCM(0x0C,1); / 顯示開及光標(biāo)設(shè)置 /按指定位置顯示一個(gè)字符void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)Y &= 0x1;X &= 0xF; /限制 X 不能大于 15,Y 不能大于 1if (Y) X

18、|= 0x40;   /當(dāng)要顯示第二行時(shí)地址碼+0x40; X |= 0x80;   /算出指令碼WriteCommandLCM(X, 1); /這里不檢測忙信號,發(fā)送地址碼WriteDataLCM(DData); /按指定位置顯示一串字符void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF;  &

19、#160;   /限制 X 不能大于 15,Y 不能大于 1while (DDataListLength>0x1f) /若到達(dá)字串尾則退出              if (X <= 0xF) /X 坐標(biāo)應(yīng)小于 0xF                   &

20、#160;        DisplayOneChar(X, Y, DDataListLength); /顯示單個(gè)字符                 ListLength+; X+;            /延時(shí)程序void Delayms(unsigned

21、 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ù):無* 功能描述: 短暫延時(shí),使用12MHz晶體,約0.01MS*/void dellay(unsigned int  h)  wh

22、ile(h-);    /0.01MS    要注意的是在讀寫程序中,沒有用 “檢測忙”,其實(shí)對于1602來說,沒有檢測忙信號對于實(shí)際來說還好,因?yàn)槌3R驗(yàn)闄z測忙,而使1602沒顯示(一直處于忙檢測中)。“忙檢測”用一個(gè)小延時(shí)代替。對于LCM1602來說,讀寫時(shí)序最重要。                      &#

23、160;                     LCM1602寫操作時(shí)序 /寫數(shù)據(jù) RS="H",RW=L,D0D7=數(shù)據(jù),E=高脈沖void WriteDataLCM(unsigned char WDLCM)               dellay(10

24、0);     /短暫延時(shí),代替檢測忙狀態(tài)       LCM_E = 0;        LCM_RS = 1;       LCM_RW = 0;LCM_Data = WDLCM;       LCM_E = 1;          L

25、CM_E = 0;  /寫指令 RS="L",RW=L,D0D7=指令碼,E=高脈沖 void WriteCommandLCM(unsigned char WCLCM)       dellay(100);       /短暫延時(shí),代替檢測忙狀態(tài)      LCM_E = 0;          LCM_RS = 0; 

26、0;         LCM_RW = 0;       LCM_Data = WCLCM;       LCM_E  = 1;          LCM_E = 0; 上面兩個(gè)分別為寫數(shù)據(jù)函數(shù)和寫命令函數(shù),檢測忙已用小延時(shí)代替。其實(shí)這個(gè)時(shí)序好像不太嚴(yán)格,但要保證的是E高脈沖時(shí),寫的數(shù)據(jù)/命令是有效的。好像函

27、數(shù)也可以寫成這樣:void WriteCommandLCM(unsigned char WCLCM) dellay(100);       /短暫延時(shí),代替檢測忙狀態(tài)         LCM_Data = WCLCM;          LCM_RS = 0;          LCM_RW = 0;  &#

28、160;      LCM_E  = 0;      dellay(100);      LCM_E  = 1; /按指定位置顯示一串字符函數(shù)DisplayListChar的作用是在指定位置顯示一串字符,其中有一句“while (DDataListLength>0x1f) /若到達(dá)字串尾則退出”      為什么要大于0x20呢?   unsigned char

29、 code blog_adr = "EDNchina"unsigned char code email = "tengjingshu"    用單引號 ( )括起來的字符為字符的ASCII碼值,而不是字符串。  用雙引號”(shift+ )括起來的一串字符,成為字符串常量。C編譯器會(huì)自動(dòng)地在字符末尾加上結(jié)束符0(NULL) (ASCII碼為0x00也就是00H)。 char a=“Bei Jing”;char a=B,e,I, ,J,i,n,g,0;   兩者是等價(jià)的,數(shù)組的每個(gè)元素為對應(yīng)字符的

30、ASCII碼,如a3數(shù)組a的第四個(gè)元素是 空格,則a3里面放著的是空格 的ASCII碼0x20。還要注意的是數(shù)組的元素?cái)?shù)目一定要比字符多一個(gè)。以便C編譯器自動(dòng)在其后面加入結(jié)束符0。  可以知道0 ASCII碼為0x00nASCII碼為0x0A 那知道為什么有這句了吧“while (DDataListLength>0x1F) /若到達(dá)字串尾則退出”因?yàn)榇笥?x1f才能顯示字符,小于和等于0x1f的都是鍵盤控制符。當(dāng)然我們也可以檢測0(0x00)“while (DDataListLength!='0')  /檢測到字符串結(jié)束符則退出”2

31、 總線方式驅(qū)動(dòng)程序 LCM1602總線方式C51程序/*Lcd1602B.c*#include <delay.h>#include <lcd1602b.h>#include <absacc.h>/*= 顯示字符串=*/void LcdDisplayString(unsigned char x,unsigned char y, unsigned char *ptr) unsigned char i,l=0;           &#

32、160;                     while (ptrl >31)l+;                      /     

33、  for (i=0;i<l;i+)               LcdDisplayChar(x+,y,ptri);              if ( x = 16 )            

34、0;        x = 0; y = 1; /異或,第一行的話變第二行,第二行的話變第一行                      /*= 顯示光標(biāo)定位=*/void LocateXY( char posx,char posy)  unsigned char temp;   

35、;     temp = posx & 0x0f;             /確保只選016個(gè)格子       posy &= 0x01;                 /確保不是在第一行就在第二行  

36、     if ( posy )temp |= 0x40;  /在第二行的時(shí)候加40H       temp |= 0x80;   /數(shù)據(jù)指針設(shè)置 指令碼 80H+ 地址碼( 0-27H ,40H-67H)       LcdWriteCommand(temp,1); /*= 按指定位置顯示數(shù)出一個(gè)字符=*/void LcdDisplayChar(unsigned char x,unsi

37、gned char y,unsigned char Wdata)         LocateXY( x, y );                         / 定位顯示地址       LcdWriteData( Wda

38、ta );                   / 寫字符 /*= 初始化程序, 必須按照產(chǎn)品資料介紹的初始化過程進(jìn)行=*/void LcdReset( void )         Delayms(400);          

39、            / 啟動(dòng)時(shí)必須的延時(shí),等待lcm進(jìn)入工作狀態(tài)    LcdWriteCommand( 0x38, 0);               / 顯示模式設(shè)置(不檢測忙信號)       Delayms(15);  

40、0;    LcdWriteCommand( 0x38, 0);               / 共三次       Delayms(15);       LcdWriteCommand( 0x38, 0);       Delayms(15);&#

41、160;       LcdWriteCommand( 0x38, 1);               / 顯示模式設(shè)置(以后均檢測忙信號)    LcdWriteCommand( 0x08, 1);              &

42、#160;      / 顯示關(guān)閉       LcdWriteCommand( 0x06, 1);               / 顯示光標(biāo)移動(dòng)設(shè)置       LcdWriteCommand( 0x0c, 1);      &

43、#160;        / 顯示開及光標(biāo)設(shè)置       LcdClear();/*=    clear=*/void LcdClear(void)   LcdWriteCommand( 0x01, 1);               / 顯示清屏/*= 寫控制字符子

44、程序: E="1" RS="0" RW="0"=*/void LcdWriteCommand( unsigned char CMD,unsigned char AttribC )        /AttribC=1檢查忙狀態(tài),AttribC=0不檢查忙狀態(tài)        if (AttribC) while( Lcd1602StatusPort & Busy );   

45、        / 檢測忙信號?       /busy=0x80   每次讀寫操作都要進(jìn)行讀寫檢測,確保SAT7=0       Lcd1602CmdPort = CMD;       /*= 當(dāng)前位置寫字符子程序: E =1 RS="1" RW="0"=*/void LcdW

46、riteData( char dataW )         while( Lcd1602StatusPort & Busy );                               /檢測忙信號 

47、60; /busy=0x80   每次讀寫操作都要進(jìn)行讀寫檢測,確保SAT7=0       Lcd1602WdataPort = dataW;  精確微秒級延時(shí)(詳細(xì)可以參考我另一篇博文51單片機(jī)C51微秒級(ms)精確延時(shí) )/*delay.h*#include <delay.h> /for crystal 11.0592M void Delayms(unsigned int n)       uns

48、igned int i,j;       for(j=n;j>0;j-)       for(i=112;i>0;i-); /*lcd1602b.h*#ifndef _LCD1602B_H_#define _LCD1602B_H_ #define Lcd1602CmdPort XBYTE0x8000     /E=1 RS="0" RW="0"  /寫指令

49、#define Lcd1602WdataPort XBYTE0x8100  /E =1 RS="1" RW="0" /寫數(shù)據(jù)#define Lcd1602StatusPort XBYTE0x8200  /E=1 RS="0" RW="1"  /讀狀態(tài)#define Busy 0x80                  

50、                           /busy extern void LcdClear(void);extern void LcdWriteData( char dataW );extern void LcdWriteCommand( unsigned char CMD,unsigned char Attri

51、bC );extern void LcdReset( void );extern void Display( unsigned char dd );extern void LcdDisplayChar(unsigned char x,unsigned char y,unsigned char Wdata);extern void LcdDisplayString(unsigned char x,unsigned char y, unsigned char *ptr);  #endif 其中要注意寫指令的地址 0x8000寫數(shù)據(jù)的地址 0x8100讀狀態(tài)的地址 0x8200這三個(gè)地址值是根據(jù)硬件電路連接確定的。 /* 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)#define XBYTE (unsigned char vola

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論