18282|36

152

帖子

0

TA的资源

裸片初长成(初级)

楼主
 

液晶1602 显示汉字研究 [复制链接]

液晶1602显示字符研究

1602是一款最常用也是最便宜的液晶显示屏。最多可以显示两行标准字符,每行最多可以显示16个字符。

1602可以显示内部常用字符(包括阿拉伯数字,英文字母大小写,常用符号和日文假名等),也可以显示自定义字符(单或多个字符组成的简单汉字,符号,图案等,最多可以产生8个自定义字符)。

一、显示常用字符。

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是41H,显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”

十进制
十六进制
ASCII字符

十进制
十六进制
ASCII
字符

十进制
十六进制
ASCII字符
00
00
自定义字符1

56
38
8

96
60
`
01
01
自定义字符2

57
39
9

97
61
a
02
02
自定义字符3

58
3A
:

98
62
b
03
03
自定义字符4

59
3B
;

99
63
c
04
04
自定义字符5

60
3C
<

100
64
d
05
05
自定义字符6

61
3D
=

101
65
e
06
06
自定义字符7

62
3E
>

102
66
f
07
07
自定义字符8

63
3F
?

103
67
g
08
08
自定义字符1

64
40
@

104
68
h
09
09
自定义字符2

65
41
A

105
69
i
10
0A
自定义字符3

66
42
B

106
6A
j
11
0B
自定义字符4

67
43
C

107
6B
k
12
0C
自定义字符5

68
44
D

108
6C
l
13
0D
自定义字符6

69
45
E

109
6D
m
14
0E
自定义字符7

70
46
F

110
6E
n
15
0F
自定义字符8

71
47
G

111
6F
o
32
20
空格

72
48
H

112
70
p
33
21
!


73
49
I

113
71
q
34
22
"

74
4A
J

114
72
r
35
23
#

75
4B
K

115
73
s
36
24
$

76
4C
L

116
74
t
37
25
%

77
4D
M

117
75
u
38
26
&

78
4E
N

118
76
v
39
27
'

79
4F
O

119
77
w
40
28
(

80
50
P

120
78
x
41
29
)

81
51
Q

121
79
y
42
2A
*

82
52
R

122
7A
z
43
2B
+

83
53
S

123
7B
{
44
2C
,

84
54
T

124
7C
|
45
2D
-

85
55
U

125
7D
}
46
2E
.

86
56
V

126
7E
~
47
2F
/

87
57
W




48
30
0

88
58
X




49
31
1

89
59
Y




50
32
2

90
5A
Z




51
33
3

91
5B
[




52
34
4

92
5C
\




53
35
5

93
5D
]




54
36
6

94
5E
^




55
37
7

95
5F
_





显示操作的过程:

1、首先确认显示的位置,即在第几行,第几个字符开始显示。也就是要显示的地址,如下表所示的显示地址。


第一行的显示地址是0x80-0x8F,第二行的显示地址是0xC0-0xCF。例如想要在第2行,第3个位置显示一个字符,那么地址码就是 0xC2。在编程过程中,通常编写一个函数确定在某行某个位置显示数据。函数需要 行参数(y),和 列参数(x)来确定显示位置。程序参考如下:

/***************设置显示位置**************************/

void LCD_set_xy( unsigned char x, unsigned char y )

{

unsigned char address;


if (0 == y) x |= 0x80; //当要显示第一行时地址码+0x80;


else x |= 0xC0; //在第二行显示是地址码+0xC0;


Write_com(x); //发送地址码 0x80-0x8F 或者0xC0-0xCF

}



以上地址码,在显示过程中,可以直接应用,至于地址码的计算原理,如果想要研究,请参考其它资料,这里不做描述。

2、其次设置要显示的内容,即上面提到的CGROM内的字符编码。如显示“A”,将编码41H写入到液晶屏显示即可。通常设置地址和显示内容用一个函数来完成。代码参考如下:

//功能:按指定位置显示一个字符

//输入:列显示地址x(取值范围0-15) 行显示地址y(取值范围0-1), 指定字符

void DisplayOneChar(unsigned char x, unsigned char y, unsigned char Data)

{

    if (0 == y) x |= 0x80; //当要显示第一行时地址码+0x80;

    else x |= 0xC0; //在第二行显示是地址码+0xC0;

    Write_com(x); //发送地址码

    Write_dat(Data); //发送要显示的字符编码

}


显示字符“A”调用过程如下代码:

DisplayOneChar(0,0,0x41);//功能:在第1行 第1个字符 显示一个大写字母A

3、在C语言操作时,还可以显示整个字符串。定义一个字符串显示函数,可以通过直接输入字符方式进行显示。

//功能:按指定位置显示一串字符

//输入:列显示地址x(取值范围0-15) 行显示地址y(取值范围0-1), 指定字符串指针*p,要显示的字符个数count (取值范围1-16)

void Disp_1602(unsigned char x,unsigned char y,unsigned char *p,unsigned char count)

{

unsigned char i;


for(i=0;i


{



if (0 == y) x |= 0x80; //当要显示第一行时地址码+0x80;



else x |= 0xC0; //在第二行显示是地址码+0xC0;



Write_com(x); //发送地址码



Write_dat(*p); //发送要显示的字符编码



x++;



p++;


}


}  

调用方法如下:

DisplayListChar(0,0,"hello world",11);     //液晶1602第一行显示


DisplayListChar(0,1,"www.qm999.cn",12);  //液晶1602第二行显示

二、显示自定义字符。

1、首先取得想要的中文或者图形的字模数组。通过字模软件不能直接提取5*8点阵的字模数据,可以通过手动提取的方法。如下图所示,对应一个字符显示区域。每8个字节,组成一个点阵数组。


日”的点阵数组即为 {0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00}

2个点阵组成一个汉字取模举例:


车”字取模数组为:{0x00,0x0f,0x02,0x04,0x07,0x00,0x0f,0x00,





         0x10,0x1e,0x00,0x10,0x1c,0x10,0x1e,0x10}

2、将生成的点阵数组保存到CGRAM存储器中,生成自定义字符。1602内部CGRAM用于自定义的字符点阵的存储,总共64字节。由上一步点阵提取可知,每一个字符由8个字节数据组成。所以64字节CGRAM存储器,能够存储8组自定义字符的点阵数组。按照CGRAM地址划分为 0-7为第一组,8-15为第二组,依次类推56-63为第8组数据。把自定义字符的数组按8个字节一组存储到CGRAM中,程序代码参考如下。

//功能:将自定义字符的编码数组 写入到CGRAM中.

//输入:自定义字符的编码数组

void Write_CGRAM(unsigned char *p)

{

unsigned char i,j,kk;

unsigned char tmp=0x40;   //操作CGRAM的命令码

kk=0;

for(j=0;j<8;j++)        //64 字节存储空间,可以生成 8 个自定义字符点阵

{


for(i=0;i<8;i++)    // 8 个字节生成 1 个字符点阵


{



Write_com(tmp+i);     //操作CGRAM的命令码+写入CGRAM地址.



Write_dat(p[kk]);     //写入数据



kk++;


}


tmp += 8;

}

}

3、上一步中,自定义字符存储到CGRAM的任意一组以后,每一个组(8个字节)也有一个显示编码。按顺序依次为00H-07H 。显示时,只要调用每一组的编码,即可以显示相应的字符。



注:内部常用字符显示时,显示编码是从0x20开始的。0x00-0x0f是专门留给自定义字符显示的。0x00-0x07和0x08-0x0f内容是一样的。例如:调用0x01 位置和0x09位置,显示的内容是一样的。

4、直接按照单个字符的显示方式调用显示函数,就可以显示自定义字符了。代码参考如下:


//在第1行,第7个位置显示自定义汉字 “年”


DisplayOneChar(6,0,0);     //显示 "年"   //CGRAM 码 00

说明:此时“年”的8个字节点阵数组 ,存储空间为CGRAM的 00-07地址

也就是CGRAM的第1组数据存储区域,编码为0。 如果存储在CGRAM的08-15地址,那么编码就应该是 1了。

很多资料中,都没有详细介绍过CGRAM和CGROM的区别和用法,在1602调试过程中经常会被搞混。这里总结一点小技巧,希望能给需要的人一点帮助。

以下是显示效果:

常用字符显示:


单个和两个点阵的汉字显示:


图形显示效果:


总结:1602液晶屏价格低廉,显示常用字符操作简便,但是显示汉字效果并不理想,在工作中使用1602显示汉字意义不是很大。

[ 本帖最后由 救火车 于 2009-2-10 09:13 编辑 ]
查看精华帖全部内容,请登录或者注册
此帖出自单片机论坛

最新回复

  详情 回复 发表于 2013-9-22 19:06

赞赏

1

查看全部赞赏

点赞 关注
个人签名我是有火救火,无火灌水的救火车
救火车单片机工作室
http://www.qm999.cn
 

回复
举报

1583

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

Re: [原创] 液晶1602 显示汉字研究

不错的主意~~~~

就是1602中间老隔一个空白处,让人看起来那字有点怪怪的.
此帖出自单片机论坛
 
个人签名
 

回复

152

帖子

0

TA的资源

裸片初长成(初级)

板凳
 

Re: [原创] 液晶1602 显示汉字研究

自己顶一下
此帖出自单片机论坛
 
个人签名我是有火救火,无火灌水的救火车
救火车单片机工作室
http://www.qm999.cn
 
 

回复

63

帖子

0

TA的资源

纯净的硅(初级)

4
 

Re: [原创] 液晶1602 显示汉字研究

回帖是一种美德!
此帖出自单片机论坛
 
 
 

回复

56

帖子

0

TA的资源

纯净的硅(初级)

5
 

Re: [原创] 液晶1602 显示汉字研究

好好学习啊,C看不懂,老大的汇编的例子吗?最好是有分页显示的?方便的话发给我一份吧,想学,好难哦!WW168tech@126.com谢谢了!
此帖出自单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

6
 
研究ing...
此帖出自单片机论坛
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(高级)

7
 
学习中……………………
此帖出自单片机论坛
 
 
 

回复

77

帖子

0

TA的资源

纯净的硅(高级)

8
 
有这一篇

1602就算明白了
此帖出自单片机论坛
 
 
 

回复

51

帖子

0

TA的资源

纯净的硅(中级)

9
 
DDDDDDDDDDDDDDDDDDDDDDDDDD
此帖出自单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

10
 
谢谢啦真是好东西,谢谢!
此帖出自单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

11
 
好贴,学习ing。。。
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
楼主,你很强啊!
此帖出自单片机论坛
 
 
 

回复

802

帖子

23

TA的资源

五彩晶圆(中级)

13
 
嗯 可以勉强实现
但是 不够美观 用两个块表示的时候
中间的裂缝 让人不好接受呀
此帖出自单片机论坛
 
个人签名生活在激情中 ... 希望 哈哈

https://home.eeworld.com.cn/?80086
 
 

回复

41

帖子

0

TA的资源

纯净的硅(中级)

14
 

回复 楼主 救火车 的帖子

太有才了,便宜的价格,做不便宜的事……
此帖出自单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

15
 
haodongxi a  kexi mei jifen
此帖出自单片机论坛
 
 
 

回复

131

帖子

0

TA的资源

五彩晶圆(初级)

16
 
学习中 但是不太明白 哈哈
此帖出自单片机论坛
 
 
 

回复

6366

帖子

4896

TA的资源

版主

17
 
楼主牛人啊,以后要多多向大虾学习
此帖出自单片机论坛
 
 
 

回复

391

帖子

0

TA的资源

纯净的硅(高级)

18
 
哈哈
此帖出自单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

19
 
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

20
 
谢谢楼主!!!
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
ADI &文晔 探索季第一站,邀您在活动帖跟帖,ADI资深工程师将与您一道寻求解决之道! ...
春晚,最出圈当属穿着棉马甲跳秧歌的机器人”秧Bot”。
转手绢、飞手绢、变换队形,精准度和稳定性甚至超越人类,这背后少不了电机控制技术。

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表