admin 管理员组文章数量: 887021
2024年1月25日发(作者:线条装饰)
利用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,510点阵字符;F=0,57点阵字符。
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 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1706197875h503844.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论