




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(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)成畫面。各種型號(hào)的液晶通常是按照顯示字符的行數(shù)或液晶點(diǎn)陣的行、列數(shù)來命名。例如,1602表示每行顯示16個(gè)字符,一共可以顯示兩行。這類液晶通常稱為字符型液晶,只能顯示ASCII碼字符。12232表示液晶顯示畫面由122列、32行組成,共有122*32個(gè)點(diǎn)來顯示各種圖形。用戶可以通過程序控制這些點(diǎn)中任何一個(gè)點(diǎn)顯示或不顯示,
2、從而構(gòu)成各種圖形畫面。因此,12232稱為圖形型液晶。液晶體積小,功耗低,顯示操作簡單。但其有致命的弱點(diǎn),即使用溫度范圍很窄。通用型液晶工作溫度為0到+55攝氏度,存儲(chǔ)溫度為-20到+60攝氏度。二 LCD1602 1 1602的外形尺寸(毫米)2 主要技術(shù)參數(shù)3 接口信號(hào)說明4 基本操作時(shí)序4 RAM地址映射圖控制器內(nèi)部帶有80B的RAM緩沖區(qū)。對(duì)應(yīng)關(guān)系如下圖所示。向圖中的000F、404F地址中的任意處寫入顯示數(shù)據(jù)時(shí),液晶可立即顯示出來;當(dāng)寫入到1027或5067地址時(shí),必須通過移屏指令將他們一移入可顯示區(qū)域方可正常顯示。1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)
3、不同的點(diǎn)陣字符圖形,如下表所示。這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A”。6 狀態(tài)字說明說明:原則上每次對(duì)控制器進(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è)置
4、8 控制接口時(shí)序說明時(shí)序參數(shù)讀操作時(shí)序?qū)懖僮鲿r(shí)序9 初始化過程1)延時(shí)15ms2)寫指令38H(不檢測忙信號(hào))3)延時(shí)5ms4)寫指令38H(不檢測忙信號(hào))5)延時(shí)5ms6)寫指令38H(不檢測忙信號(hào))7)(以后每次寫指令、讀/寫數(shù)據(jù)操作之前均需檢測忙信號(hào))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.
5、0 | 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 B
6、usy 0x80 /用于檢測 LCM 狀態(tài)字中的 Busy 標(biāo)識(shí) 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 Di
7、splayListChar(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)
8、; /Delay400Ms(); /啟動(dòng)等待,等 LCM 講入工作狀態(tài) LCMInit(); /LCM 初始化 DisplayListChar(6, 0, blog_adr); Displa
9、yListChar(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、 LCM_RS = 1; LCM_RW = 0;LCM_Data = WDLCM;/dellay(100); /短暫延時(shí),代替檢測忙狀態(tài) /ReadStatusLCM(); /檢測忙 LCM_E = 1;
11、; 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、0; 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&quo
14、t;,RW=H,E=Hunsigned char ReadStatusLCM(void) LCM_Data = 0xFF; LCM_RS = 0; LCM_RW = 1; LCM_E = 1; /while (LCM_Data & Busy); /檢測忙信號(hào) &
15、#160; return(LCM_Data); void LCMInit(void) /LCM 初始化 LCM_Data = 0; Delayms(15); WriteCommandLCM(0x38,0); /三次顯示模式設(shè)置,不檢測忙信號(hào) Delayms(5);
16、WriteCommandLCM(0x38,0); Delayms(5); WriteCommandLCM(0x38,0); WriteCommandLCM(0x38,1); /顯示模式設(shè)置,開始要求每次檢測忙信號(hào) WriteCommandLCM(0x08,1); /關(guān)閉顯示 WriteComma
17、ndLCM(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
18、) X |= 0x40; /當(dāng)要顯示第二行時(shí)地址碼+0x40; X |= 0x80; /算出指令碼WriteCommandLCM(X, 1); /這里不檢測忙信號(hào),發(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、60; /限制 X 不能大于 15,Y 不能大于 1while (DDataListLength>0x1f) /若到達(dá)字串尾則退出 if (X <= 0xF) /X 坐標(biāo)應(yīng)小于 0xF
20、60; DisplayOneChar(X, Y, DDataListLength); /顯示單個(gè)字符 ListLength+; X+; /延時(shí)程序void Delayms(unsi
21、gned 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)
22、; while(h-); /0.01MS 要注意的是在讀寫程序中,沒有用 “檢測忙”,其實(shí)對(duì)于1602來說,沒有檢測忙信號(hào)對(duì)于實(shí)際來說還好,因?yàn)槌3R驗(yàn)闄z測忙,而使1602沒顯示(一直處于忙檢測中)?!懊z測”用一個(gè)小延時(shí)代替。對(duì)于LCM1602來說,讀寫時(shí)序最重要。
23、0; LCM1602寫操作時(shí)序 /寫數(shù)據(jù) RS="H",RW=L,D0D7=數(shù)據(jù),E=高脈沖void WriteDataLCM(unsigned char WDLCM) della
24、y(100); /短暫延時(shí),代替檢測忙狀態(tài) LCM_E = 0; LCM_RS = 1; LCM_RW = 0;LCM_Data = WDLCM; LCM_E = 1;
25、0; LCM_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、#160; 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、; LCM_E = 0; dellay(100); LCM_E = 1; /按指定位置顯示一串字符函數(shù)DisplayListChar的作用是在指定位置顯示一串字符,其中有一句“while (DDataListLength>0x1f) /若到達(dá)字串尾則退出” 為什么要大于0x20呢? unsigned c
29、har code blog_adr = "EDNchina"unsigned char code email = "tengjingshu" 用單引號(hào) ( )括起來的字符為字符的ASCII碼值,而不是字符串。 用雙引號(hào)”(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è)元素為對(duì)應(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é)束符則退
31、出”2 總線方式驅(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、; while (ptrl >31)l+; /
33、60; for (i=0;i<l;i+) LcdDisplayChar(x+,y,ptri); if ( x = 16 ) &
34、#160; x = 0; y = 1; /異或,第一行的話變第二行,第二行的話變第一行 /*= 顯示光標(biāo)定位=*/void LocateXY( char posx,char posy) unsigned char temp;
35、160; temp = posx & 0x0f; /確保只選016個(gè)格子 posy &= 0x01; /確保不是在第一行就在第二行
36、60; 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,u
37、nsigned char y,unsigned char Wdata) LocateXY( x, y ); / 定位顯示地址 LcdWriteData(
38、Wdata ); / 寫字符 /*= 初始化程序, 必須按照產(chǎn)品資料介紹的初始化過程進(jìn)行=*/void LcdReset( void ) Delayms(400);
39、60; / 啟動(dòng)時(shí)必須的延時(shí),等待lcm進(jìn)入工作狀態(tài) LcdWriteCommand( 0x38, 0); / 顯示模式設(shè)置(不檢測忙信號(hào)) Delayms(15); &
40、#160; LcdWriteCommand( 0x38, 0); / 共三次 Delayms(15); LcdWriteCommand( 0x38, 0); Delayms(15)
41、; LcdWriteCommand( 0x38, 1); / 顯示模式設(shè)置(以后均檢測忙信號(hào)) LcdWriteCommand( 0x08, 1);
42、0; / 顯示關(guān)閉 LcdWriteCommand( 0x06, 1); / 顯示光標(biāo)移動(dòng)設(shè)置 LcdWriteCommand( 0x0c, 1);
43、0; / 顯示開及光標(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、60; / 檢測忙信號(hào)? /busy=0x80 每次讀寫操作都要進(jìn)行讀寫檢測,確保SAT7=0 Lcd1602CmdPort = CMD; /*= 當(dāng)前位置寫字符子程序: E =1 RS="1" RW="0"=*/void L
46、cdWriteData( char dataW ) while( Lcd1602StatusPort & Busy ); /檢測忙信號(hào)
47、 /busy=0x80 每次讀寫操作都要進(jìn)行讀寫檢測,確保SAT7=0 Lcd1602WdataPort = dataW; 精確微秒級(jí)延時(shí)(詳細(xì)可以參考我另一篇博文51單片機(jī)C51微秒級(jí)(ms)精確延時(shí) )/*delay.h*#include <delay.h> /for crystal 11.0592M void Delayms(unsigned int n)
48、unsigned 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、60; /busy extern void LcdClear(void);extern void LcdWriteData( char dataW );extern void LcdWriteCommand( unsigned char CMD,unsigned char At
51、tribC );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 vo
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 團(tuán)隊(duì)感動(dòng)活動(dòng)方案
- 國慶桂林活動(dòng)策劃方案
- 團(tuán)隊(duì)教育活動(dòng)方案
- 周末內(nèi)衣活動(dòng)方案
- 圖書館殘疾日活動(dòng)方案
- 售樓部門新春活動(dòng)方案
- 員工年度關(guān)懷活動(dòng)方案
- 商場新店活動(dòng)策劃方案
- 四年級(jí)居家親子活動(dòng)方案
- 國畫傳統(tǒng)民間活動(dòng)方案
- 2025年中國數(shù)據(jù)庫市場研究報(bào)告
- 2024年包頭市公安局招聘專職留置看護(hù)警務(wù)輔助人員筆試真題
- 【9語安徽中考卷】2025年安徽省中考招生考試真題語文試卷(真題+答案)
- 礦產(chǎn)資源國際合作-洞察及研究
- 【課件】無脊椎動(dòng)物+第2課時(shí)課件-2024-2025學(xué)年人教版生物七年級(jí)上冊(cè)
- 2025年涼山州昭覺縣選聘社區(qū)工作者題庫帶答案分析
- 2025國開《調(diào)劑學(xué)(本)》形考任務(wù)1234答案
- 2025年員工持股平臺(tái)合伙協(xié)議
- 2024-2025學(xué)年下學(xué)期初中道德與法治七年級(jí)期末復(fù)習(xí)試卷(含答案)
- 2025年政府采購管理實(shí)務(wù)考試卷及答案
- 2025連云港師范高等??茖W(xué)校輔導(dǎo)員考試試題及答案
評(píng)論
0/150
提交評(píng)論