×
单片机 > 单片机程序设计 > 详情

利用STC89C52单片机控制LCD1602(不带中文字库)显示的中文

发布时间:2020-05-26 发布时间:
|
一、设计原理

使用STC89C52单片机控制1602LCD(不带中文字库的);利用1602LCD(不带中文字库的)中的存储器(64个字节00H-3FH)自建立8个5×8点阵的字符从而显示中文字符。

 

 

二、LCD1602的指令集:

1、清屏

RS    R/W

DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

0      0

 0    0    0    0    0    0    0    1

运行时间(250Khz):1.64ms;

功能:清DDRAM和AC值。

 

2、归位

RS    R/W

DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

0      0

 0    0    0    0    0    0    1    *

运行时间(250Khz):1.64ms;

功能:AC=0,光标、画面回HOME位。

3、输入方式设置

RS    R/W

DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

0      0

 0    0    0    0    0    1   I/D   S

运行时间(250Khz):40us;

功能:设置光标、画面移动方式。

其中:I/D=1:数据读、写操作后,AC自动增一;

I/D=0:数据读、写操作后,AC自动减一;

  S=1:数据读、写操作,画面平移;

  S=0:数据读、写操作,画面不动;

4、显示开关控制

RS    R/W

DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

0      0

 0    0    0    0    1    D    C    B

运行时间(250Khz):40us;

功能:设置显示、光标及闪烁开、关。

其中:D表示显示开关:D=1为开,D=0为关;

C表示光标开关:C=1为开,C=0为关;

B表示闪烁开关:B=1为开,B=0为关。

5、光标、画面位移

RS    R/W

DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

0      0

 0    0    0    1   S/C  R/L   *    *

运行时间(250Khz):40us;

功能:光标、画面移动,不影响DDRAM。

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

S/C=0:光标平移一个字符位;

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

   6、功能设置 

RS    R/W

DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

0      0

 0    0    1   DL    N    F   *    *

 运行时间(250Khz):40us;

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

   其中:DL=1,8位数据接口;DL=0,四位数据接口;

         N=1,两行显示;N=0,一行显示;

         F=1,5´10点阵字符;F=0,5´7点阵字符。

7、CGRAM地址设置

RS    R/W

DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

0      0

 0    1   A5   A4   A3   A2   A1   A0

运行时间(250Khz):40us;

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

8、DDRAM地址设置

RS    R/W

DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

0      0

 1   A6   A5   A4   A3   A2   A1   A0

运行时间(250Khz):40us;

功能:设置DDRAM地址。

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

      N=1,两行显示,首行A6~A0=00H~2FH,

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

9、读BF及AC值

RS    R/W

DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

0      1

BF   AC6  AC5  AC4  AC3  AC2  AC1  AC0

功能:读忙BF值和地址计数器AC值。

其中:BF=1:忙;BF=0:准备好。

此时,AC值意义为最近一次地址设置(CGRAM或DDRAM)定义。

 

10、 写数据

RS    R/W

DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

1      0

数           据

运行时间(250Khz):40us;

功能:根据最近设置的地址性质,数据写入DDRAM或CGRAM内。

 

11、读数据

RS    R/W

DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

1      1

数           据

运行时间(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”。该段程序没来得及优化,没有充分利用单片机做重复的事情的优点;并且使代码量增大,可读较差(重复的,看起来头晕);注释少也致使可读性差!

关键字:STC89C52  单片机控制  LCD1602 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil(MDK-ARM)系列教程(七)_菜单