




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025股東之間的股權(quán)轉(zhuǎn)讓合同范本
- 2025標(biāo)準(zhǔn)個(gè)人售房合同協(xié)議書
- 2025跨國服務(wù)貿(mào)易合同規(guī)范
- 2025存量房買賣的合同樣本
- 2025天津市經(jīng)濟(jì)適用住房買賣合同
- 2025大連煤炭產(chǎn)品代理合同范本
- 2025屆畢業(yè)生簽訂就業(yè)協(xié)議應(yīng)注意合同細(xì)節(jié)
- 2025《基站建設(shè)合同施工》
- 2025年躉購電合同示范文本及范例
- 2025授權(quán)炒股合同示例
- 2024遼寧沈陽水務(wù)集團(tuán)有限公司招聘20人筆試參考題庫附帶答案詳解
- 建筑工地物業(yè)服務(wù)合同模板7篇
- 《計(jì)算機(jī)發(fā)展史》課件
- 2025年安徽蕪湖市陽光電力維修工程有限責(zé)任公司招聘筆試參考題庫附帶答案詳解
- 人教版英語七年級下冊知識講義Unit 1 section A (教師版)
- 快開門式壓力容器操作人員培訓(xùn)
- 2024-2025學(xué)年統(tǒng)編版語文八年級上冊期末易錯(cuò)題:現(xiàn)代文閱讀(記敘文)(含答案)
- 手術(shù)分級管理制度
- 2025年江蘇宿遷經(jīng)濟(jì)技術(shù)開發(fā)區(qū)人力資源有限公司招聘筆試參考題庫附帶答案詳解
- 2025-2030年中國聚氨酯產(chǎn)業(yè)市場風(fēng)險(xiǎn)評估規(guī)劃研究報(bào)告
- 學(xué)校食堂每日食品安全檢查記錄臺賬(日管控)
評論
0/150
提交評論