您的当前位置:首页利用STC89C52单片机控制LCD1602

利用STC89C52单片机控制LCD1602

2023-07-30 来源:爱问旅游网
利用STC89C52单片机控制LCD1602(不带中文字库)显示的中文 一、设计原理 使用STC89C52单片机控制1602LCD(不带中文字库的);利用1602LCD(不带中文字库的)中的存储器(64个字节00H-3FH)自建立8个5×8点阵的字符从而显示中文字符。 二、LCD1602的指令集:RS R/W 0 0 1、清屏 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 1 运行时间(250Khz):1.64ms; 功能:清DDRAM和AC值。 2、归位 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 1 * 运行时间(250Khz):1.64ms; 功能:AC=0,光标、画面回HOME位。 3、输入方式设置 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 1 I/D S RS R/W 0 0 RS R/W 0 0 运行时间(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”。该段程序没来得及优化,没有充分利用单片机做重复的事情的优点;并且使代码量增大,可读较差(重复的,看起来头晕);注释少也致使可读

性差!

因篇幅问题不能全部显示,请点此查看更多更全内容