娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年03月03日(星期一)

正在發生

2021年03月03日 | 單片機顯示原理(LCD1602)

發布者:樂觀向前 來源: eefocus關鍵字:單片機  顯示原理  LCD1602 手機看文章 掃描二維碼
隨時隨地手機看文章

一.接口

 LCD1602是很多單片機愛好者較早接觸的字符型液晶顯示器,它的主控芯片是HD44780或者其它兼容芯片。與此相仿的是LCD12864液晶顯示器,它是一種圖形點陣顯示器,能顯示的內容比LCD1602要豐富得多,除了普通字符外,還可以顯示點陣圖案,帶有漢字庫的還可以顯示漢字,它的并行驅動方式與LCD1602相差無幾,所以,在這里花點時間是值得的。

一般來說,LCD1602有16條引腳,據說還有14條引腳的,與16腳的相比缺少了背光電源A(15腳)和地線K(16腳)。這塊LCD1602的型號是HJ1602A,是繪晶科技公司的產品,它有16條引腳。如圖1所示:



圖1

再來一張它的背面的,如圖2所示:



圖2

它的16條引腳定義如下:

引腳號

符號

引腳說明

引腳號

符號

引腳說明

1

VSS

電源地

9

D2

數據端口

2

VDD

電源正極

10

D3

數據端口

3

VO

偏壓信號

11

D4

數據端口

4

RS

命令/數據

12

D5

數據端口

5

RW

讀/寫

13

D6

數據端口

6

E

使能

14

D7

數據端口

7

D0

數據端口

15

A

背光正極

8

D1

數據端口

16

K

背光負極

對這個表的說明:

1.    VSS接電源地。

2.    VDD接+5V。

3.    VO是液晶顯示的偏壓信號,可接10K的3296精密電位器。或同樣阻值的RM065/RM063藍白可調電阻。見圖3。


圖3

4.    RS是命令/數據選擇引腳,接單片機的一個I/O,當RS為低電平時,選擇命令;當RS為高電平時,選擇數據。

5.    RW是讀/寫選擇引腳,接單片機的一個I/O,當RW為低電平時,向LCD1602寫入命令或數據;當RW為高電平時,從LCD1602讀取狀態或數據。如果不需要進行讀取操作,可以直接將其接VSS。

6.    E,執行命令的使能引腳,接單片機的一個I/O。

7.    D0—D7,并行數據輸入/輸出引腳,可接單片機的P0—P3任意的8個I/O口。如果接P0口,P0口應該接4.7K—10K的上拉電阻。如果是4線并行驅動,只須接4個I/O口。

8.    A背光正極,可接一個10—47歐的限流電阻到VDD。

9.    K背光負極,接VSS。見圖4所示。


圖4

二.基本操作

LCD1602的基本操作分為四種:

1.    讀狀態:輸入RS=0,RW=1,E=高脈沖。輸出:D0—D7為狀態字。

2.    讀數據:輸入RS=1,RW=1,E=高脈沖。輸出:D0—D7為數據。

3.    寫命令:輸入RS=0,RW=0,E=高脈沖。輸出:無。

4.    寫數據:輸入RS=1,RW=0,E=高脈沖。輸出:無。

讀操作時序圖(如圖5):


 圖5

寫操作時序圖(如圖6):


圖6

時序時間參數(如圖7):


圖7

三.DDRAM、CGROM和CGRAM

DDRAM(Display Data RAM)就是顯示數據RAM,用來寄存待顯示的字符代碼。共80個字節,其地址和屏幕的對應關系如下(如圖8):


 圖8

DDRAM相當于計算機的顯存,我們為了在屏幕上顯示字符,就把字符代碼送入顯存,這樣該字符就可以顯示在屏幕上了。同樣LCD1602共有80個字節的顯存,即DDRAM。但LCD1602的顯示屏幕只有16×2大小,因此,并不是所有寫入DDRAM的字符代碼都能在屏幕上顯示出來,只有寫在上圖所示范圍內的字符才可以顯示出來,寫在范圍外的字符不能顯示出來。這樣,我們在程序中可以利用下面的“光標或顯示移動指令”使字符慢慢移動到可見的顯示范圍內,看到字符的移動效果。

前面說了,為了在液晶屏幕上顯示字符,就把字符代碼送入DDRAM。例如,如果想在屏幕左上角顯示字符‘A’,那么就把字符‘A’的字符代碼41H寫入DDRAM的00H地址處即可。至于怎么寫入,后面會有說明。那么為什么把字符代碼寫入DDRAM,就可以在相應位置顯示這個代碼的字符呢?我們知道,LCD1602是一種字符點陣顯示器,為了顯示一種字符的字形,必須要有這個字符的字模數據,什么叫字符的字模數據,看看下面的這個圖就明白了(如圖9)。


圖9

上圖的左邊就是字符‘A’的字模數據,右邊就是將左邊數據用“○”代表0,用“■”代表1。從而顯示出‘A’這個字形。從下面的圖可以看出,字符‘A’的高4位是0100,低4位是0001,合在一起就是01000001b,即41H。它恰好與該字符的ASCII碼一致,這樣就給了我們很大的方便,我們可以在PC上使用P2=‘A’這樣的語法。編譯后,正好是這個字符的字符代碼。

在LCD1602模塊上固化了字模存儲器,就是CGROM和CGRAM,HD44780內置了192個常用字符的字模,存于字符產生器CGROM(Character Generator ROM)中,另外還有8個允許用戶自定義的字符產生RAM,稱為CGRAM(Character Generator RAM)。下圖(如圖12)說明了CGROM和CGRAM與字符的對應關系。從ROM和RAM的名字我們也可以知道,ROM是早已固化在LCD1602模塊中的,只能讀取;而RAM是可讀寫的。也就是說,如果只需要在屏幕上顯示已存在于CGROM中的字符,那么只須在DDRAM中寫入它的字符代碼就可以了;但如果要顯示CGROM中沒有的字符,比如攝氏溫標的符號,那么就只有先在CGRAM中定義,然后再在DDRAM中寫入這個自定義字符的字符代碼即可。和CGROM中固化的字符不同,CGRAM中本身沒有字符,所以要在DDRAM中寫入某個CGROM不存在的字符,必須在CGRAM中先定義后使用。程序退出后CGRAM中定義的字符也不復存在,下次使用時,必須重新定義。


圖10

上面這個圖(如圖10)說明的是5×8點陣和5×10點陣字符的字形和光標的位置。先來說5×8點陣,它有8行5列。那么定義這樣一個字符需要8個字節,每個字節的前3個位沒有被使用。例如,定義攝氏溫標的符號{0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00}。


 圖11

上面這個圖(如圖11)說明的是設置CGRAM地址指令。從這個指令的格式中我們可以看出,它共有aaaaaa這6位,一共可以表示64個地址,即64個字節。一個5×8點陣字符共占用8個字節,那么這64個字節一共可以自定義8個字符。也就是說,上面這個圖的6位地址中的DB5DB4DB3用來表示8個自定義的字符,DB2DB1DB0用來表示每個字符的8個字節。這DB5DB4DB3所表示的8個自定義字符(0--7)就是要寫入DDRAM中的字符代碼。我們知道,在CGRAM中只能定義8個自定義字符,也就是只有0—7這8個字符代碼,但在下面的這個表(如圖12)中一共有16個字符代碼(××××0000b--××××1111b)。實際上,如圖所示,它只能表示8個自定義字符 (××××0000b=××××1000b, ××××0001b=××××1001b……依次類推)。也就是說,寫入DDRAM中的字符代碼0和字符代碼8是同一個自定義字符。 5×10點陣每個字符共占用16個字節的空間,所以CGRAM中只能定義4個這樣的自定義字符。

那么如何在CGRAM中自定義字符呢?在上面的介紹中,我們知道有一個設置CGRAM地址指令,同寫DDRAM指令相似,只須設置好某個自定義字符的字模數據,然后按照上面介紹的方法,設置好CGRAM地址,依次寫入這個字模數據即可。我們在后面的例子中再進行說明。


 圖12

四.LCD1602指令

1.工作方式設置指令(如圖13)


 圖13

×:不關心,也就是說這個位是0或1都可以,一般取0。

DL:設置數據接口位數。

DL=1:8位數據接口(D7—D0)。

DL=0:4位數據接口(D7—D4)。

N=0:一行顯示。

N=1:兩行顯示。

F=0:5×8點陣字符。

F=1:5×10點陣字符。

說明:因為是寫指令字,所以RS和RW都是0。LCD1602只能用并行方式驅動,不能用串行方式驅動。而并行方式又可以選擇8位數據接口或4位數據接口。這里我們選擇8位數據接口(D7—D0)。我們的設置是8位數據接口,兩行顯示,5×8點陣,即0b00111000也就是0x38。(注意:NF是10或11的效果是一樣的,都是兩行5×8點陣。因為它不能以兩行5×10點陣方式進行顯示,換句話說,這里用0x38或0x3c是一樣的)。

2.顯示開關控制指令(如圖14)


圖14

D=1:顯示開,D=0:顯示關。

C=1:光標顯示,C=0:光標不顯示。

B=1:光標閃爍,B=0:光標不閃爍。

說明:這里的設置是顯示開,不顯示光標,光標不閃爍,設置字為0x0c。

3.進入模式設置指令(如圖15、16)


圖15

I/D=1:寫入新數據后光標右移。

I/D=0:寫入新數據后光標左移。

S=1:顯示移動。

S=0:顯示不移動。


 圖16

說明:這里的設置是0x06。

4.光標或顯示移動指令(如圖17、18)


圖17


 圖18

說明:在需要進行整屏移動時,這個指令非常有用,可以實現屏幕的滾動顯示效果。初始化時不使用這個指令。

5.清屏指令(如圖19)


圖19

說明:清除屏幕顯示內容。光標返回屏幕左上角。執行這個指令時需要一定時間。

6.光標歸位指令(如圖20)

 

 圖20

說明:光標返回屏幕左上角,它不改變屏幕顯示內容。

7.設置CGRAM地址指令(如圖21)


圖21

說明:這個指令在上面已經介紹過。用法在后面例子中說明。

8.設置DDRAM地址指令(如圖22)


圖22

說明:這個指令用于設置DDRAM地址。在對DDRAM進行讀寫之前,首先要設置DDRAM地址,然后才能進行讀寫。前面我們說過,DDRAM就是LCD1602的顯示存儲器。我們要在它上面進行顯示,就要把要顯示的字符寫入DDRAM。同樣,我們想知道DDRAM某個地址上有什么字符,也要先設置DDRAM地址,然后將它讀出到單片機。

9.讀忙信號和地址計數器AC(如圖23)


圖23

說明:這個指令用來讀取LCD1602狀態。對于單片機來說,LCD1602屬于慢速設備。當單片機向其發送一個指令后,它將去執行這個指令。這時如果單片機再次發送下一條指令,由于LCD1602速度較慢,前一條指令還未執行完畢,它將不接受這新的指令,導致新的指令丟失。因此這條讀忙指令可以用來判斷LCD1602是否忙,能否接收單片機發來的指令。當BF=1,表示LCD1602正忙,不能接受單片機的指令;當BF=0,表示LCD1602空閑,可以接收單片機的指令。RS=0,表示是指令;RW=1,表示是讀取。這條指令還有一個副產品:即可以得到地址記數器AC的值(address counter)。LCD1602維護了一個地址計數器AC,用來記錄下一次讀寫CGRAM或DDRAM的位置。需要強調的是:這條指令我一次也沒有執行成功。很多網友似乎也是這樣。好在我們有另外的辦法,也就是延時。通過查看每條指令的執行時間,再經過一些試驗,可以確定指令的延時。這樣就可以在上一條指令執行完畢后再執行下一條指令了。

10.寫數據到CGRAM或DDRAM指令(如圖24)


圖24

說明:RS=1,數據;RW=0,寫。指令執行時,要在DB7—DB0上先設置好要寫入的數據,然后執行寫命令。

11.從CGRAM或DDRAM讀數據指令(如圖25)


圖25

說明:RS=1,數據;RW=1,讀。先設置好CGRAM或DDRAM的地址,然后執行讀取命令。數據就被讀入后DB7—DB0。

 

五.實例

下面我們就以一個實例來結束這篇文章。先介紹一下背景:單片機最小系統(擴充了外部RAM 62256)。采用STC89C52RC,晶振22.1184MHZ。以5×8點陣,16×2行,8位數據端口。首先在第一行顯示“I love MCU!”,第二行顯示“LCD1602 Test!”。延時一段時間,清屏。然后在第一行顯示自定義字符:攝氏溫標標志。第二行顯示圓周率(pai)標志。再延時一段時間,清屏。最后在第一行顯示“Welcome to my blog!”,顯示方式是從屏幕右面移入,左面移出。周而復始(如圖26)。


圖26

  1 #ifndef __ZHANGTYPE_H__

  2 #define __ZHANGTYPE_H__

  3  

  4 #define uint8    unsigned char

  5 #define uint16   unsigned short int

  6 #define uint32   unsigned long int

  7 #define int8     signed char

  8 #define int16    signed short int

  9 #define int32    signed long int

 10 #define uint64   unsigned long long int

 11 #define int64    signed long long int

 12  

 13 #endif 

 14 //File2

 15  

 16 #ifndef __FUN_H__

 17 #define __FUN_H__ 

 18 #include "ZhangType.h"

 19 #include  

 20 void Delay(uint16 time); 

 21 #endif 

 22 //File3

 23  

 24 #include "fun.h" 

 25 void Delay(uint16 time)

 26 {

 27     while(time--);

 28 } 

 29 //File4

 30  

 31 #ifndef __1602_H__

 32 #define __1602_H__

 33  

 34 #include

 35 #include "ZhangType.h"          //變量類型

 36 #include "fun.h"            //常用函數 

 37  

 38 #define    SETMODE    0x38          //16*2顯示,5*7點陣,8位數據接口

 39 #define DISOPEN   0x0C          //顯示開,不顯示光標,光標不閃爍

 40 #define DISMODE   0x06          //讀寫字符后地址加1,屏顯不移動

 41 #define    SETADDR    0x80          //設置數據地址指針初始值

 42 #define CLEAR 0x01          //清屏,數據指針清零

 43 #define RET       0x02          //回車,數據指針清零 

 44 #define PORT  P2            //I/O口 

 45  

 46 sbit RS = P1^0;

 47 sbit RW = P1^1;

 48 sbit E = P1^2; 

 49  

 50 void Init1602(void);        //初始化1602

 51 void Write1602_Com(uint8 com);  //寫命令

 52 void Write1602_Dat(uint8 dat);  //寫數據

 53 void CheckBusy(void);           //檢查忙

 54 void Write1602_One_Dat(uint8 X,uint8 Y,uint8 dat);          //寫一個數據

 55 void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf);    //寫一個數據串 

 56 #endif//

 57 //File5

 58  

 59 #include "1602.h" 

 60  

 61 void Write1602_Com(uint8 com)

 62 {

 63     E=0;

 64     RS=0;                    //命令

 65     Delay(50);               //延時

 66     RW=0;                    //寫         

 67     Delay(50);

 68     PORT=com;                //端口賦值

 69     Delay(50);

 70     E=1;                     //高脈沖

 71     Delay(50);

 72     E=0;

 73 }

 74  

 75 void Write1602_Dat(uint8 dat)

 76 {

 77     E=0;

 78     RS=1;                    //數據

 79     Delay(50);               //延時

 80     RW=0;                    //寫

 81     Delay(50);

 82     PORT=dat;                //端口賦值

 83     Delay(50);

 84     E=1;                     //高脈沖

 85     Delay(50);

 86     E=0;

 87 } 

 88  

 89 void CheckBusy(void)

 90 {

 91     uint8 temp;

 92     RS=0;                    //命令

 93     RW=1;                    //讀

 94     E=0;

 95     while(1)

 96     {

 97        PORT=0xFF;           //端口為輸入

 98        E=1;                 //高脈沖

 99        temp=PORT;

[1] [2]
關鍵字:單片機  顯示原理  LCD1602 引用地址:單片機顯示原理(LCD1602)

上一篇:EWSTM8系列教程12_IAR文件類型描述
下一篇:單片機提高ADC精度總結

推薦閱讀

2月27日,科技部在北京公布了“2017年度中國科學十大進展”,其中,“研制出可實現自由狀態腦成像的微型顯微成像系統”項目從270項推薦進展中脫穎而出,成功入選。其他入選項目包括:實現星地千公里級量子糾纏和密鑰分發及隱形傳態;將病毒直接轉化為活疫苗及治療性藥物;首次探測到雙粲重子;實驗發現三重簡并費米子;實現氫氣的低溫制備和存儲;研發出基于共格納米...
裙智咨詢給出的數據顯示,2018年四季度小米電視的出貨量達到300萬臺,同比增速超過一倍,位居中國電視市場第一名,傳統電視品牌已被擊敗,它已改變國內電視市場的格局,柏穎科技認為這對于中國電視行業來說是有利的。裙智咨詢給出的數據顯示,傳統電視品牌創維、海信、TCL、海爾的出貨量分別為260萬臺、240萬臺、210萬臺、140萬臺,已然落后于小米。雖然此...
LPC2148是基于一個支持實時仿真和嵌入式跟蹤的32/16位ARM7 TDMI-S CPU的微控制器,并帶有32kB和512kB嵌入的高速Flash存儲器。128位寬度的存儲器接口和獨特的加速結構使32位代碼能夠在最大時鐘速率下運行。對代碼規模有嚴格控制的應用可使用16位Thumb模式將代碼規模降低超過30%,而性能的損失卻很小。較小的封裝和很低的功耗使LPC2148特別適用于訪問控制...
昨晚,大疆推出了旗下全新無人機產品DJI FPV,提供區別于傳統航拍無人機的飛行視角和操控方式,用戶佩戴飛行眼鏡,以第一人稱視角進行操控,實現身臨其境的體驗。DJIFPV 飛行器機身采用流線型設計,全新升級的飛行眼鏡最高可提供120fps高清圖傳畫面傳輸,配合150°超廣鏡頭視角帶來絕佳臨場感。DJIFPV 搭載大疆最新高清低延時的數字圖傳系統DJIO3,圖傳...

史海拾趣

問答坊 | AI 解惑

我郁悶的一年工作~

畢業于一所不出名的工科院校的電子信息工程專業,選擇了一份和專業不靠譜的工作,渾渾噩噩的過了一年。公司做的是電動機,來公司之前,簡單而又理所當然的認為差不多,等到了以后才發現自己的無知。這個時候,面臨著誘惑,一個車間副主任的誘惑,我 ...…

查看全部問答∨

與初學者談電子制作

您一定玩過電子游戲機;使用過手電筒。如果讓您親手制作這些電子作品,您一定會感到很興奮,很有趣。其實您只要花上幾元錢,買幾個電子元件,就可以通過自己的努力在幾個小時內創造出自己的電子作品。通過一個小小電子產品的制作,不僅證明了您的智慧 ...…

查看全部問答∨

如何學好rotel dxp2004

請教大家/我是一個剛開始學rotel dxp2004軟件的。我應該從什么方面入手,學的過程應該注意些什么問題,大家有什么好的學習經驗。對我們初學者指點下…

查看全部問答∨

求助,關于含貼片元件的電路板制作

本帖最后由 paulhyde 于 2014-9-15 09:28 編輯 各位大俠,有沒有人做過含貼片元件的印制電路板?是怎么打印到轉印紙上的,怎么設置?我的pcb畫在了toplayer上的  …

查看全部問答∨

無線傳感器網絡的覆蓋問題研究

摘要:降低能耗可延長網絡生存時間,在傳感器節點高密度部署的環境中,在保證網絡性能的前提下,將最少量的節點投入活躍工作狀態,而將其余節點投入低功耗的睡眠狀態。在滿足上述覆蓋性和連通性要求的基礎上,討論如何選擇最少數量的工作節點,以及 ...…

查看全部問答∨

WinCE5.0的一個EDB應用程序Debug版可以運行Release版就是老出錯

如題: WinCE5.0的一個EDB應用程序Debug版可以運行Release版就是老出錯, 痛苦啊! 而且EDB容量還是比較小的,這是煩死了 …

查看全部問答∨

在xp下得到驅動對象或者設備對象指針后怎樣禁止掉這個設備?

在xp下得到驅動對象或者設備對象指針后怎樣禁止掉這個設備?…

查看全部問答∨

急!!!怎么用platform builder生成lib文件!

手上已經有源碼,請問怎么用PB5.0生成lib文件呢!!!很急!!!知道該怎么做的大哥大姐能不能把具體流程給我寫一下!!!謝謝啦!!!…

查看全部問答∨

一個關于DDS的問題

一個基于DDS的可移相雙通道任意波形發生器的設計,可以出波形,我給的鎖相環的頻率是100MHz,按理論上來說,輸出頻率應該可以達到0.4*100MHz=40MHz,但是實際出的波形的頻率卻只有大概20MHz。我想請問各位大俠利用流水線設計的相位累加器可以提高輸 ...…

查看全部問答∨

無繩電話手機自動充電器電路圖

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 編輯 …

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 绥滨县| 山西省| 岳阳市| 莒南县| 临泽县| 通辽市| 洛宁县| 龙南县| 陆川县| 安顺市| 东丽区| 富阳市| 玉环县| 彭泽县| 仙游县| 金门县| 安图县| 通州市| 遂平县| 吴川市| 田东县| 施甸县| 天柱县| 罗平县| 衡东县| 垦利县| 怀宁县| 和顺县| 乌兰县| 舟曲县| 乃东县| 平南县| 铅山县| 安陆市| 平陆县| 正宁县| 花莲县| 阳城县| 安达市| 胶南市| 涟源市|