新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 利用STC89C52單片機控制LCD1602(不帶中文字庫)顯示的中文

        利用STC89C52單片機控制LCD1602(不帶中文字庫)顯示的中文

        作者: 時間:2016-11-13 來源:網絡 收藏
        一、設計原理

        使用STC89C52單片機控制1602LCD(不帶中文字庫的);利用1602LCD(不帶中文字庫的)中的存儲器(64個字節00H-3FH)自建立8個5×8點陣的字符從而顯示中文字符。

        本文引用地址:http://www.104case.com/article/201611/316492.htm

        二、LCD1602的指令集:

        1、清屏

        RSR/W

        DB7DB6DB5DB4DB3DB2DB1DB0

        00

        00000001

        運行時間(250Khz):1.64ms;

        功能:清DDRAM和AC值。

        2、歸位

        RSR/W

        DB7DB6DB5DB4DB3DB2DB1DB0

        00

        0000001*

        運行時間(250Khz):1.64ms;

        功能:AC=0,光標、畫面回HOME位。

        3、輸入方式設置

        RSR/W

        DB7DB6DB5DB4DB3DB2DB1DB0

        00

        000001I/DS

        運行時間(250Khz):40us;

        功能:設置光標、畫面移動方式。

        其中:I/D=1:數據讀、寫操作后,AC自動增一;

        I/D=0:數據讀、寫操作后,AC自動減一;

        S=1:數據讀、寫操作,畫面平移;

        S=0:數據讀、寫操作,畫面不動;

        4、顯示開關控制

        RSR/W

        DB7DB6DB5DB4DB3DB2DB1DB0

        00

        00001DCB

        運行時間(250Khz):40us;

        功能:設置顯示、光標及閃爍開、關。

        其中:D表示顯示開關:D=1為開,D=0為關;

        C表示光標開關:C=1為開,C=0為關;

        B表示閃爍開關:B=1為開,B=0為關。

        5、光標、畫面位移

        RSR/W

        DB7DB6DB5DB4DB3DB2DB1DB0

        00

        0001S/CR/L**

        運行時間(250Khz):40us;

        功能:光標、畫面移動,不影響DDRAM。

        其中:S/C=1:畫面平移一個字符位;

        S/C=0:光標平移一個字符位;

        R/L=1:右移;R/L=0:左移。

        6、功能設置

        RSR/W

        DB7DB6DB5DB4DB3DB2DB1DB0

        00

        001DLNF**

        運行時間(250Khz):40us;

        功能:工作方式設置(初始化指令)。

        其中:DL=1,8位數據接口;DL=0,四位數據接口;

        N=1,兩行顯示;N=0,一行顯示;

        F=1,5´10點陣字符;F=0,5´7點陣字符。

        7、CGRAM地址設置

        RSR/W

        DB7DB6DB5DB4DB3DB2DB1DB0

        00

        01A5A4A3A2A1A0

        運行時間(250Khz):40us;

        功能:設置CGRAM地址。A5~A0=0~3FH。

        8、DDRAM地址設置

        RSR/W

        DB7DB6DB5DB4DB3DB2DB1DB0

        00

        1A6A5A4A3A2A1A0

        運行時間(250Khz):40us;

        功能:設置DDRAM地址。

        N=0,一行顯示A6~A0=0~4FH;

        N=1,兩行顯示,首行A6~A0=00H~2FH,

        次行A6~A0=40H~67H。

        9、讀BF及AC值

        RSR/W

        DB7DB6DB5DB4DB3DB2DB1DB0

        01

        BFAC6AC5AC4AC3AC2AC1AC0

        功能:讀忙BF值和地址計數器AC值。

        其中:BF=1:忙;BF=0:準備好。

        此時,AC值意義為最近一次地址設置(CGRAM或DDRAM)定義。

        10、寫數據

        RSR/W

        DB7DB6DB5DB4DB3DB2DB1DB0

        10

        數據

        運行時間(250Khz):40us;

        功能:根據最近設置的地址性質,數據寫入DDRAM或CGRAM內。

        11、讀數據

        RSR/W

        DB7DB6DB5DB4DB3DB2DB1DB0

        11

        數據

        運行時間(250Khz):40us;

        功能:根據最近設置的地址性質,從DDRRAM或CGRAM數據讀出。

        三、程序:

        //液晶顯示中文-版本0.0

        //作者:pcdian

        //定義液晶的一些功能位

        //RS 為數據、指令寄存器選擇位

        //RW 為讀寫選擇位

        //E 為使能位

        RS BIT p2.5

        RW BIT P2.6

        E BIT P2.7

        ORG 0000H

        SJMP START

        ORG 000BH

        LJMP Timer_IT

        ORG 0030H

        START:MOV SP,#60H

        MOV TMOD,#01H

        MOV TH0,#0A6H

        MOV TL0,#00H

        SETB EA

        SETB ET0

        CLR TR0

        MAIN:MOV P0,#01H //清屏

        ACALL ENABLE

        MOV P0,#38H //顯示模式設置為16字*2行

        ACALL ENABLE

        MOV P0,#0CH //不顯示光標

        ACALL ENABLE

        MOV P0,#06H //顯示方向正向且屏不移動

        ACALL ENABLE

        DISPLAY:ACALL DISPLAY_C0

        //我

        MOV P0,#80H

        ACALL ENABLE

        MOV P0,#00H

        ACALL WRITE

        MOV P0,#81H

        ACALL ENABLE

        MOV P0,#01H

        ACALL WRITE

        MOV P0,#82H

        ACALL ENABLE

        MOV P0,#02H

        ACALL WRITE

        MOV P0,#0C0H

        ACALL ENABLE

        MOV P0,#03H

        ACALL WRITE

        MOV P0,#0C1H

        ACALL ENABLE

        MOV P0,#04H

        ACALL WRITE

        MOV P0,#0C2H

        ACALL ENABLE

        MOV P0,#05H

        ACALL WRITE

        LCALL DELAY1S

        MOV P0,#01H

        ACALL ENABLE

        ACALL DISPLAY_C1

        //們

        MOV P0,#83H

        ACALL ENABLE

        MOV P0,#00H

        ACALL WRITE

        MOV P0,#84H

        ACALL ENABLE

        MOV P0,#01H

        ACALL WRITE

        MOV P0,#85H

        ACALL ENABLE

        MOV P0,#02H

        ACALL WRITE

        MOV P0,#0C3H

        ACALL ENABLE

        MOV P0,#03H

        ACALL WRITE

        MOV P0,#0C4H

        ACALL ENABLE

        MOV P0,#04H

        ACALL WRITE

        MOV P0,#0C5H

        ACALL ENABLE

        MOV P0,#05H

        ACALL WRITE

        LCALL DELAY1S

        MOV P0,#01H

        ACALL ENABLE

        ACALL DISPLAY_C2

        //的

        MOV P0,#86H

        ACALL ENABLE

        MOV P0,#00H

        ACALL WRITE

        MOV P0,#87H

        ACALL ENABLE

        MOV P0,#01H

        ACALL WRITE

        MOV P0,#88H

        ACALL ENABLE

        MOV P0,#02H

        ACALL WRITE

        MOV P0,#0C6H

        ACALL ENABLE

        MOV P0,#03H

        ACALL WRITE

        MOV P0,#0C7H

        ACALL ENABLE

        MOV P0,#04H

        ACALL WRITE

        MOV P0,#0C8H

        ACALL ENABLE

        MOV P0,#05H

        ACALL WRITE

        LCALL DELAY1S

        MOV P0,#01H

        ACALL ENABLE

        ACALL DISPLAY_C3

        //0

        MOV P0,#89H

        ACALL ENABLE

        MOV P0,#00H

        ACALL WRITE

        MOV P0,#8AH

        ACALL ENABLE

        MOV P0,#01H

        ACALL WRITE

        MOV P0,#0C9H

        ACALL ENABLE

        MOV P0,#02H

        ACALL WRITE

        MOV P0,#0CAH

        ACALL ENABLE

        MOV P0,#03H

        ACALL WRITE

        LCALL DELAY1S

        MOV P0,#01H

        ACALL ENABLE

        ACALL DISPLAY_C4

        //7

        MOV P0,#8BH

        ACALL ENABLE

        MOV P0,#00H

        ACALL WRITE

        MOV P0,#8CH

        ACALL ENABLE

        MOV P0,#01H

        ACALL WRITE

        MOV P0,#0CBH

        ACALL ENABLE

        MOV P0,#02H

        ACALL WRITE

        MOV P0,#0CCH

        ACALL ENABLE

        MOV P0,#03H

        ACALL WRITE

        //3

        MOV P0,#8DH

        ACALL ENABLE

        MOV P0,#04H

        ACALL WRITE

        MOV P0,#8EH

        ACALL ENABLE

        MOV P0,#05H

        ACALL WRITE

        MOV P0,#0CDH

        ACALL ENABLE

        MOV P0,#06H

        ACALL WRITE

        MOV P0,#0CEH

        ACALL ENABLE

        MOV P0,#07H

        ACALL WRITE

        LCALL DELAY1S

        MOV P0,#01H

        ACALL ENABLE

        LJMP DISPLAY

        DISPLAY_C0:MOV DPTR,#TAB0

        MOV R2,#48

        ACALL DISPLAY_C

        RET

        DISPLAY_C1:MOV DPTR,#TAB1

        MOV R2,#48

        ACALL DISPLAY_C

        RET

        DISPLAY_C2:MOV DPTR,#TAB2

        MOV R2,#48

        ACALL DISPLAY_C

        RET

        DISPLAY_C3:MOV DPTR,#TAB3

        MOV R2,#32

        ACALL DISPLAY_C

        RET

        DISPLAY_C4:MOV DPTR,#TAB4

        MOV R2,#64

        ACALL DISPLAY_C

        RET

        DISPLAY_C:MOV P0,#40H

        ACALL ENABLE

        MOV R3,#0

        DISPLAY_CC:MOV A,R3

        MOVC A,@A+DPTR

        MOV P0,A

        LCALL WRITE

        INC R3

        DJNZ R2,DISPLAY_CC

        RET

        ENABLE:

        CLR RS

        CLR RW

        CLR E

        ACALL DELAY

        SETB E

        RET

        WRITE:

        SETB RS

        CLR RW

        CLR E

        ACALL DELAY

        SETB E

        RET

        DELAY1S:SETB TR0

        CJNE R0,#20,DELAY1S

        CLR TR0

        MOV R0,#0

        RET

        DELAY:MOV R5,#08H

        L1:MOV R4,#0FAH

        L0:DJNZ R4,L0

        DJNZ R5,L1

        RET

        Timer_IT:MOV TH0,#0A6H

        MOV TL0,#00H

        INC R0

        RETI

        TAB0: //我

        DB 0x00,0x07,0x01,0x01,0x01,0x1F,0x01,0x01

        DB 0x19,0x01,0x01,0x01,0x01,0x1F,0x01,0x01

        DB 0x00,0x08,0x04,0x04,0x00,0x1F,0x00,0x04

        DB 0x01,0x07,0x19,0x01,0x01,0x01,0x05,0x02

        DB 0x18,0x00,0x00,0x01,0x06,0x00,0x00,0x00

        DB 0x14,0x18,0x10,0x08,0x09,0x05,0x03,0x01

        TAB1: //們

        DB 0x01,0x01,0x02,0x02,0x06,0x04,0x0c,0x14

        DB 0x08,0x04,0x06,0x04,0x10,0x10,0x10,0x10

        DB 0x00,0x00,0x1e,0x02,0x02,0x02,0x02,0x02

        DB 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00

        DB 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00

        DB 0x02,0x02,0x02,0x02,0x02,0x0a,0x04,0x00

        TAB2: //的

        DB 0x02,0x02,0x04,0x0f,0x08,0x08,0x08,0x0f

        DB 0x02,0x02,0x02,0x13,0x14,0x14,0x18,0x12

        DB 0x00,0x00,0x00,0x1e,0x02,0x02,0x02,0x02

        DB 0x08,0x08,0x08,0x08,0x0f,0x08,0x08,0x00

        DB 0x11,0x11,0x10,0x10,0x10,0x10,0x00,0x00

        DB 0x02,0x12,0x12,0x02,0x02,0x14,0x08,0x00

        TAB3: //0

        DB 0x00,0x00,0x03,0x04,0x08,0x08,0x08,0x08

        DB 0x00,0x00,0x18,0x04,0x02,0x02,0x02,0X02

        DB 0x08,0x08,0x08,0x08,0x04,0x03,0x00,0x00

        DB 0x02,0x02,0x02,0x02,0x04,0x18,0x00,0x00

        TAB4: //7

        DB 0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00

        DB 0x00,0x00,0x1E,0x1E,0x06,0x06,0x06,0X06

        DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

        DB 0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00

        //3

        DB 0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x0F

        DB 0x00,0x00,0x1E,0x1E,0x06,0x06,0x06,0X1E

        DB 0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00

        DB 0x1E,0x06,0x06,0x06,0x1E,0x1E,0x00,0x00

        END

        四、總結:

        雖然LCD1602可以利用自建字符顯示中文,但最多不能超過8個字符位。所以實際應用中,無法同時顯示“我們的073”。該段程序沒來得及優化,沒有充分利用單片機做重復的事情的優點;并且使代碼量增大,可讀較差(重復的,看起來頭暈);注釋少也致使可讀性差!



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 通河县| 文昌市| 涡阳县| 襄樊市| 玉山县| 封开县| 呼伦贝尔市| 綦江县| 诸暨市| 阿勒泰市| 梁平县| 东丽区| 荔波县| 蒙阴县| 天祝| 丰镇市| 康保县| 济源市| 外汇| 微山县| 南华县| 香港| 安义县| 禄丰县| 贵南县| 海宁市| 砀山县| 邹城市| 固原市| 潞西市| 永福县| 崇左市| 莱西市| 化州市| 鹤岗市| 安康市| 湘潭市| 岢岚县| 南溪县| 亳州市| 绥德县|