<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開(kāi)發(fā)網(wǎng)

      電子開(kāi)發(fā)網(wǎng)電子設(shè)計(jì) | 電子開(kāi)發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
      搜索: 您現(xiàn)在的位置: 電子開(kāi)發(fā)網(wǎng) >> 電子開(kāi)發(fā) >> 單片機(jī)實(shí)例 >> 正文

      LCD1602的單片機(jī)驅(qū)動(dòng)詳解

      作者:佚名    文章來(lái)源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2018/11/5

      一.接口

       

      LCD1602是很多單片機(jī)愛(ài)好者較早接觸的字符型液晶顯示器,它的主控芯片是HD44780或者其它兼容芯片。剛開(kāi)始接觸它的大多是單片機(jī)的初學(xué)者。由于對(duì)它的不了解,不能隨心所欲地對(duì)它進(jìn)行驅(qū)動(dòng)。經(jīng)過(guò)一段時(shí)間的學(xué)習(xí),我對(duì)它的驅(qū)動(dòng)有了一點(diǎn)點(diǎn)心得,今天把它記錄在這里,以備以后查閱。與此相仿的是LCD12864液晶顯示器,它是一種圖形點(diǎn)陣顯示器,能顯示的內(nèi)容比LCD1602要豐富得多,除了普通字符外,還可以顯示點(diǎn)陣圖案,帶有漢字庫(kù)的還可以顯示漢字,它的并行驅(qū)動(dòng)方式與LCD1602相差無(wú)幾,所以,在這里花點(diǎn)時(shí)間是值得的。

      一般來(lái)說(shuō),LCD1602有16條引腳,據(jù)說(shuō)還有14條引腳的,與16腳的相比缺少了背光電源A(15腳)和地線K(16腳)。我手里這塊LCD1602的型號(hào)是HJ1602A,是繪晶科技公司的產(chǎn)品,它有16條引腳。如圖1所示:



      圖1

      再來(lái)一張它的背面的,如圖2所示:



      圖2

      它的16條引腳定義如下:

      引腳號(hào)

      符號(hào)

      引腳說(shuō)明

      引腳號(hào)

      符號(hào)

      引腳說(shuō)明

      1

      VSS

      電源地

      9

      D2

      數(shù)據(jù)端口

      2

      VDD

      電源正極

      10

      D3

      數(shù)據(jù)端口

      3

      VO

      偏壓信號(hào)

      11

      D4

      數(shù)據(jù)端口

      4

      RS

      命令/數(shù)據(jù)

      12

      D5

      數(shù)據(jù)端口

      5

      RW

      讀/寫(xiě)

      13

      D6

      數(shù)據(jù)端口

      6

      E

      使能

      14

      D7

      數(shù)據(jù)端口

      7

      D0

      數(shù)據(jù)端口

      15

      A

      背光正極

      8

      D1

      數(shù)據(jù)端口

      16

      K

      背光負(fù)極

      對(duì)這個(gè)表的說(shuō)明:

      1.    VSS接電源地。

      2.    VDD接+5V。

      3.    VO是液晶顯示的偏壓信號(hào),可接10K的3296精密電位器。或同樣阻值的RM065/RM063藍(lán)白可調(diào)電阻。見(jiàn)圖3。


      圖3

      4.    RS是命令/數(shù)據(jù)選擇引腳,接單片機(jī)的一個(gè)I/O,當(dāng)RS為低電平時(shí),選擇命令;當(dāng)RS為高電平時(shí),選擇數(shù)據(jù)。

      5.    RW是讀/寫(xiě)選擇引腳,接單片機(jī)的一個(gè)I/O,當(dāng)RW為低電平時(shí),向LCD1602寫(xiě)入命令或數(shù)據(jù);當(dāng)RW為高電平時(shí),從LCD1602讀取狀態(tài)或數(shù)據(jù)。如果不需要進(jìn)行讀取操作,可以直接將其接VSS。

      6.    E,執(zhí)行命令的使能引腳,接單片機(jī)的一個(gè)I/O。

      7.    D0—D7,并行數(shù)據(jù)輸入/輸出引腳,可接單片機(jī)的P0—P3任意的8個(gè)I/O口。如果接P0口,P0口應(yīng)該接4.7K—10K的上拉電阻。如果是4線并行驅(qū)動(dòng),只須接4個(gè)I/O口。

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

      9.    K背光負(fù)極,接VSS。見(jiàn)圖4所示。


      圖4

      二.基本操作

      LCD1602的基本操作分為四種:

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

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

      3.    寫(xiě)命令:輸入RS=0,RW=0,E=高脈沖。輸出:無(wú)。

      4.    寫(xiě)數(shù)據(jù):輸入RS=1,RW=0,E=高脈沖。輸出:無(wú)。

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


       圖5

      寫(xiě)操作時(shí)序圖(如圖6):


      圖6

      時(shí)序時(shí)間參數(shù)(如圖7):


      圖7

      三.DDRAM、CGROM和CGRAM

      DDRAM(Display Data RAM)就是顯示數(shù)據(jù)RAM,用來(lái)寄存待顯示的字符代碼。共80個(gè)字節(jié),其地址和屏幕的對(duì)應(yīng)關(guān)系如下(如圖8):


       圖8

      DDRAM相當(dāng)于計(jì)算機(jī)的顯存,我們?yōu)榱嗽谄聊簧巷@示字符,就把字符代碼送入顯存,這樣該字符就可以顯示在屏幕上了。同樣LCD1602共有80個(gè)字節(jié)的顯存,即DDRAM。但LCD1602的顯示屏幕只有16×2大小,因此,并不是所有寫(xiě)入DDRAM的字符代碼都能在屏幕上顯示出來(lái),只有寫(xiě)在上圖所示范圍內(nèi)的字符才可以顯示出來(lái),寫(xiě)在范圍外的字符不能顯示出來(lái)。這樣,我們?cè)诔绦蛑锌梢岳孟旅娴摹肮鈽?biāo)或顯示移動(dòng)指令”使字符慢慢移動(dòng)到可見(jiàn)的顯示范圍內(nèi),看到字符的移動(dòng)效果。

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


      圖9

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

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


      圖10

      上面這個(gè)圖(如圖10)說(shuō)明的是5×8點(diǎn)陣和5×10點(diǎn)陣字符的字形和光標(biāo)的位置。先來(lái)說(shuō)5×8點(diǎn)陣,它有8行5列。那么定義這樣一個(gè)字符需要8個(gè)字節(jié),每個(gè)字節(jié)的前3個(gè)位沒(méi)有被使用。例如,定義攝氏溫標(biāo)的符號(hào){0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00}。


       圖11

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

      那么如何在CGRAM中自定義字符呢?在上面的介紹中,我們知道有一個(gè)設(shè)置CGRAM地址指令,同寫(xiě)DDRAM指令相似,只須設(shè)置好某個(gè)自定義字符的字模數(shù)據(jù),然后按照上面介紹的方法,設(shè)置好CGRAM地址,依次寫(xiě)入這個(gè)字模數(shù)據(jù)即可。我們?cè)诤竺娴睦又性龠M(jìn)行說(shuō)明。


       圖12

      四.LCD1602指令

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


       圖13

      ×:不關(guān)心,也就是說(shuō)這個(gè)位是0或1都可以,一般取0。

      DL:設(shè)置數(shù)據(jù)接口位數(shù)。

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

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

      N=0:一行顯示。

      N=1:兩行顯示。

      F=0:5×8點(diǎn)陣字符。

      F=1:5×10點(diǎn)陣字符。

      說(shuō)明:因?yàn)槭菍?xiě)指令字,所以RS和RW都是0。LCD1602只能用并行方式驅(qū)動(dòng),不能用串行方式驅(qū)動(dòng)。而并行方式又可以選擇8位數(shù)據(jù)接口或4位數(shù)據(jù)接口。這里我們選擇8位數(shù)據(jù)接口(D7—D0)。我們的設(shè)置是8位數(shù)據(jù)接口,兩行顯示,5×8點(diǎn)陣,即0b00111000也就是0x38。(注意:NF是10或11的效果是一樣的,都是兩行5×8點(diǎn)陣。因?yàn)樗荒芤詢尚?×10點(diǎn)陣方式進(jìn)行顯示,換句話說(shuō),這里用0x38或0x3c是一樣的)。

      2.顯示開(kāi)關(guān)控制指令(如圖14)


      圖14

      D=1:顯示開(kāi),D=0:顯示關(guān)。

      C=1:光標(biāo)顯示,C=0:光標(biāo)不顯示。

      B=1:光標(biāo)閃爍,B=0:光標(biāo)不閃爍。

      說(shuō)明:這里的設(shè)置是顯示開(kāi),不顯示光標(biāo),光標(biāo)不閃爍,設(shè)置字為0x0c。

      3.進(jìn)入模式設(shè)置指令(如圖15、16)


      圖15

      I/D=1:寫(xiě)入新數(shù)據(jù)后光標(biāo)右移。

      I/D=0:寫(xiě)入新數(shù)據(jù)后光標(biāo)左移。

      S=1:顯示移動(dòng)。

      S=0:顯示不移動(dòng)。


       圖16

      說(shuō)明:這里的設(shè)置是0x06。

      4.光標(biāo)或顯示移動(dòng)指令(如圖17、18)


      圖17


       圖18

      說(shuō)明:在需要進(jìn)行整屏移動(dòng)時(shí),這個(gè)指令非常有用,可以實(shí)現(xiàn)屏幕的滾動(dòng)顯示效果。初始化時(shí)不使用這個(gè)指令。

      5.清屏指令(如圖19)


      圖19

      說(shuō)明:清除屏幕顯示內(nèi)容。光標(biāo)返回屏幕左上角。執(zhí)行這個(gè)指令時(shí)需要一定時(shí)間。

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

       

       圖20

      說(shuō)明:光標(biāo)返回屏幕左上角,它不改變屏幕顯示內(nèi)容。

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


      圖21

      說(shuō)明:這個(gè)指令在上面已經(jīng)介紹過(guò)。用法在后面例子中說(shuō)明。

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


      圖22

      說(shuō)明:這個(gè)指令用于設(shè)置DDRAM地址。在對(duì)DDRAM進(jìn)行讀寫(xiě)之前,首先要設(shè)置DDRAM地址,然后才能進(jìn)行讀寫(xiě)。前面我們說(shuō)過(guò),DDRAM就是LCD1602的顯示存儲(chǔ)器。我們要在它上面進(jìn)行顯示,就要把要顯示的字符寫(xiě)入DDRAM。同樣,我們想知道DDRAM某個(gè)地址上有什么字符,也要先設(shè)置DDRAM地址,然后將它讀出到單片機(jī)。

      9.讀忙信號(hào)和地址計(jì)數(shù)器AC(如圖23)


      圖23

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

      10.寫(xiě)數(shù)據(jù)到CGRAM或DDRAM指令(如圖24)


      圖24

      說(shuō)明:RS=1,數(shù)據(jù);RW=0,寫(xiě)。指令執(zhí)行時(shí),要在DB7—DB0上先設(shè)置好要寫(xiě)入的數(shù)據(jù),然后執(zhí)行寫(xiě)命令。

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


      圖25

      說(shuō)明:RS=1,數(shù)據(jù);RW=1,讀。先設(shè)置好CGRAM或DDRAM的地址,然后執(zhí)行讀取命令。數(shù)據(jù)就被讀入后DB7—DB0。

       

      五.實(shí)例

      下面我們就以一個(gè)實(shí)例來(lái)結(jié)束這篇文章。先介紹一下背景:?jiǎn)纹瑱C(jī)最小系統(tǒng)(擴(kuò)充了外部RAM 62256)。采用STC89C52RC,晶振22.1184MHZ。以5×8點(diǎn)陣,16×2行,8位數(shù)據(jù)端口。首先在第一行顯示“I love MCU!”,第二行顯示“LCD1602 Test!”。延時(shí)一段時(shí)間,清屏。然后在第一行顯示自定義字符:攝氏溫標(biāo)標(biāo)志。第二行顯示圓周率(pai)標(biāo)志。再延時(shí)一段時(shí)間,清屏。最后在第一行顯示“Welcome to my blog!”,顯示方式是從屏幕右面移入,左面移出。周而復(fù)始(如圖26)。


      圖26

      //File1

       

      #ifndef __ZHANGTYPE_H__

      #define __ZHANGTYPE_H__

       

      #define uint8    unsigned char

      #define uint16   unsigned short int

      #define uint32   unsigned long int

      #define int8     signed char

      #define int16    signed short int

      #define int32    signed long int

      #define uint64   unsigned long long int

      #define int64    signed long long int

       

      #endif 

      //File2

       

      #ifndef __FUN_H__

      #define __FUN_H__ 

      #include "ZhangType.h"

      #include  

      void Delay(uint16 time); 

      #endif 

      //File3

       

      #include "fun.h" 

      void Delay(uint16 time)

      {

          while(time--);

      } 

      //File4

       

      #ifndef __1602_H__

      #define __1602_H__

       

      #include

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

      #include "fun.h"            //常用函數(shù) 

       

      #define    SETMODE    0x38          //16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口

      #define DISOPEN   0x0C          //顯示開(kāi),不顯示光標(biāo),光標(biāo)不閃爍

      #define DISMODE   0x06          //讀寫(xiě)字符后地址加1,屏顯不移動(dòng)

      #define    SETADDR    0x80          //設(shè)置數(shù)據(jù)地址指針初始值

      #define CLEAR 0x01          //清屏,數(shù)據(jù)指針清零

      #define RET       0x02          //回車,數(shù)據(jù)指針清零 

      #define PORT  P2            //I/O口 

       

      sbit RS = P1^0;

      sbit RW = P1^1;

      sbit E = P1^2; 

       

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

      void Write1602_Com(uint8 com);  //寫(xiě)命令

      void Write1602_Dat(uint8 dat);  //寫(xiě)數(shù)據(jù)

      void CheckBusy(void);           //檢查忙

      void Write1602_One_Dat(uint8 X,uint8 Y,uint8 dat);          //寫(xiě)一個(gè)數(shù)據(jù)

      void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf);    //寫(xiě)一個(gè)數(shù)據(jù)串 

      #endif//

      //File5

       

      #include "1602.h" 

       

      void Write1602_Com(uint8 com)

      {

          E=0;

          RS=0;                    //命令

          Delay(50);               //延時(shí)

          RW=0;                    //寫(xiě)         

          Delay(50);

          PORT=com;                //端口賦值

          Delay(50);

          E=1;                     //高脈沖

          Delay(50);

          E=0;

      }

       

      void Write1602_Dat(uint8 dat)

      {

          E=0;

          RS=1;                    //數(shù)據(jù)

          Delay(50);               //延時(shí)

          RW=0;                    //寫(xiě)

          Delay(50);

          PORT=dat;                //端口賦值

          Delay(50);

          E=1;                     //高脈沖

          Delay(50);

          E=0;

      } 

       

      void CheckBusy(void)

      {

          uint8 temp;

          RS=0;                    //命令

          RW=1;                    //讀

          E=0;

          while(1)

          {

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

             E=1;                 //高脈沖

             temp=PORT;

             E=0;

             if ((temp&0x80)==0)      //檢查BF位是否為0

                 break;

          }

      } 

       

      void Init1602(void)

      {

          Write1602_Com(SETMODE);     //模式設(shè)置

          Delay(500);

          Write1602_Com(DISOPEN);     //顯示設(shè)置

          Delay(500);

          Write1602_Com(DISMODE);     //顯示模式

          Delay(500);

          Write1602_Com(CLEAR);       //清屏

          Delay(500);

      } 

       

      void Write1602_One_Dat(uint8 x,uint8 y,uint8 dat)

      {

          x&=0x0f;

          y&=0x01;

          if(y)

             x|=0x40;

          x|=0x80;

          Write1602_Com(x);

          Write1602_Dat(dat);

      } 

       

      void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf)

      {

          uint8 i; 

          Write1602_Com(addr);

          for(i=0;i

          {

             Write1602_Dat(pbuf[i]);

          }

      } 

      //File6

      *******************************************************

      *名稱:主文件(_main.c)

      *功能:測(cè)試

      *日期:2014/09/09

      *******************************************************/

      #include "1602.h"

      #include "fun.h" 

      uint8 code hot[8]={                                  //攝氏溫度字模

      0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00

      };

      uint8 code pi[8]={                       

      0x00,0x1f,0x0a,0x0a,0x0a,0x13,0x00,0x00                 //pai

      }; 

      uint8 code strMCU[]="I love MCU!";

      uint8 code strTest[]="LCD1602 Test!";

      uint8 code blog[]="Welcome to my blog!"; 

      uint8 i; 

      void main()

      {

          Init1602();                                      //初始化1602 

          //自定義CGRAM

          Write1602_Str(0x40,8,hot);                       //攝氏溫標(biāo)

          Write1602_Str(0x48,8,pi);                        //pai

       

          Write1602_Str(0x80,strlen(strMCU),strMCU);           //"I love MCU!"

          Write1602_Str(0x80+0x40,strlen(strTest),strTest);    //"LCD1602 Test!"

       

          for(i=0;i<50;i++)                             //延時(shí)一段時(shí)間

             Delay(10000);

       

          Write1602_Com(CLEAR);                            //指令執(zhí)行時(shí)間較長(zhǎng)

          Delay(500);                                      //多加一些延時(shí)

          for(i=0;i<16;i++)

             Write1602_Dat(0);

         

          Write1602_Com(0xc0);         &nnbsp;                //設(shè)置DDRAM地址

          for(i=0;i<16;i++)

             Write1602_Dat(1);

          for(i=0;i<50;i++)                             //延時(shí)一段時(shí)間

             Delay(10000);

         

          Write1602_Com(CLEAR);                            //指令執(zhí)行時(shí)間較長(zhǎng)

          Delay(500);                                      //多加一些延時(shí)

          Write1602_Str(0x80+0x10,strlen(blog),blog);          //寫(xiě)在顯示之外

          while(1)

          {

             Write1602_Com(0x18);                      //左移

             for(i=0;i<20;i++)                         //延時(shí)

                 Delay(10000);

          }

      } 

      //############################# THE END #############################

      Tags:LCD1602,單片機(jī)驅(qū)動(dòng),單片機(jī)  
      責(zé)任編輯:admin
      相關(guān)文章列表
      基于AT89C52單片機(jī)控制的雙軸太陽(yáng)自動(dòng)跟蹤系統(tǒng)設(shè)計(jì)
      ESP32單片機(jī)入門(mén)篇
      超聲波測(cè)距+溫度+報(bào)警的單片機(jī)代碼_51單片機(jī)超聲波測(cè)距C語(yǔ)言程序
      七段數(shù)碼管顯示原理研究_數(shù)碼管顯示0~9對(duì)應(yīng)的段碼
      單片機(jī)C語(yǔ)言編程入門(mén)教程  流水燈程序示例
      基于51單片機(jī)—多功能秒表,多功能計(jì)時(shí)器C語(yǔ)言程序
      STC89C52單片機(jī)數(shù)字電流表電壓表源碼與電路圖  51單片機(jī)電流電壓
      自學(xué)stm32單片機(jī)四個(gè)步驟,實(shí)用又高效!
      先學(xué)51還是先學(xué)STM32?STM32和51單片機(jī)的區(qū)別
      單片機(jī)最小系統(tǒng)介紹及電路設(shè)計(jì) STM32單片機(jī)最小系統(tǒng)
      什么是PIC單片機(jī)
      lcd1602工作原理是什么
      為什么51單片機(jī)的晶振一般使用11.0592? 51單片機(jī)常用波特率初值表
      51單片機(jī)寄存器功能一覽表
      單片機(jī)寫(xiě)延時(shí)程序的幾種方法
      自學(xué)單片機(jī)編程之中斷與時(shí)鐘程序
      哈佛結(jié)構(gòu)與馮·諾伊曼結(jié)構(gòu)區(qū)別以及X86體系
      單片機(jī)萬(wàn)年歷:公歷日期與農(nóng)歷日期的相互轉(zhuǎn)換程序
      AVR定時(shí)器1的CTC模式設(shè)置
      單片機(jī)超聲波視覺(jué)識(shí)別系統(tǒng)的測(cè)量軟件開(kāi)發(fā),超聲波測(cè)距
      請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語(yǔ)。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個(gè)字
      [ 查看全部 ] 網(wǎng)友評(píng)論
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁(yè)面
      下到頁(yè)底
      晶體管查詢
      主站蜘蛛池模板: 狠狠色丁香久久综合五月| 色综合久久一区二区三区| 精品综合一区二区三区| 婷婷亚洲综合一区二区| 五月天激情综合网丁香婷婷| 丁香六月婷婷综合激情动漫| 一本一道久久精品综合| 一本久道久久综合狠狠躁| 色99久久久久高潮综合影院| 久久93精品国产91久久综合| 色综合久久中文综合网| 久久综合亚洲色HEZYO国产| 亚洲av日韩av综合| 久久综合狠狠色综合伊人| 婷婷综合激六月情网| 久久综合久久精品| 日日狠狠久久偷偷色综合免费| 国产91色综合久久免费| 久久―日本道色综合久久| 亚洲精品第一国产综合境外资源 | 九九综合九九综合| 伊人色综合视频一区二区三区| 久久综合色之久久综合| 亚洲精品第一国产综合精品99| 色综合久久天天综合观看| 亚洲欧洲日韩国产综合在线二区| 香蕉国产综合久久猫咪| 亚洲色婷婷综合开心网| 一本丁香综合久久久久不卡网站| 国产综合在线观看视频| 亚洲人成网站999久久久综合| 亚洲综合精品香蕉久久网97| 伊人不卡久久大香线蕉综合影院| 一本色道久久88综合日韩精品 | 久久婷婷五月综合色国产香蕉| 久久综合狠狠综合久久97色| 伊人久久大香线蕉综合电影网| 狠狠色狠狠色综合日日不卡| 国产成人综合亚洲AV第一页| 色诱久久久久综合网ywww| 亚洲av永久综合在线观看尤物|