LCD1中文资料Word文档格式.docx
《LCD1中文资料Word文档格式.docx》由会员分享,可在线阅读,更多相关《LCD1中文资料Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
4)Nokia5110工作电压3.3V,正常显示时工作电流200uA以下,具有掉电模式,适合电池供电的便携式移动设备。
可以在市场上买到Nokia5110的裸屏和带PCB的Nokia5110屏幕,因为Nokia5110是不带背光的,所以通常商家会在PCB上按了几个背光LED,上电就能亮,建议大家还是买那种连上PCB的5110。
Nokia5110原理图:
7貼T•NOKIA5110g位脚
/CS-片选引脚
D/C・数据和命令切换脚
D1N-娴输入
CU(■州申引脚
VDD・电源正
BLC-背光控制开关(低电平打开背光
GND-电源地
SCL-扩展用字库EEPROM时神
SDA^扩展用EEPROM1数据引制
商家把该引出的管脚都引出了,下面就可以连接C8051F的相应管脚,写程序驱动5110了。
Nokia5110和Nokia3110是兼容的,用的都是同一款驱动芯片PHILIPSPCD8544。
⑴SPI接口时序写数据/命令
Nokia5110(PCD8544)的通信协议是一个没有MISO只有MOSI的SPI协议,如果单片机有富裕的SPI接口,也可以利用硬件SPI,但通常没有必要,只需要软件程序模拟即可。
SCE
JL
SCLK
曲IN
pBfl)
(DB5)(DB4]
(DB3:
(DB2]
[DBiXDBDX
MGL630
圈询串行总线协议一
一传送1个宇节
/***********************************************************
函数名称:
LCD_write_byte
函数功能:
模拟SPI接口时序写数据/命令LCD入口参数:
data:
写入的数据;
command:
写数据/命令选择;
出口参数:
无
备注:
***********************************************************/
voidLCD_write_byte(unsignedchardat,unsignedcharcommand)
{
//5110片选有效,允许输入数据//写命令
//写数据
〃传送8bit数据
unsignedchari;
LCD_CE=0;
if(command==0)
LCD_DC=0;
elseLCD_DC=1;
for(i=0;
i<
8;
i++)
if(dat&
0x80)SDIN=1;
else
SDIN=0;
SCLK=0;
dat=dat<
<
1;
SCLK=1;
}
〃禁止5110
LCD_CE=1;
管脚D/C(LCD_DC)用于选择写的是命令(D/C=O)还是数据(D/C=1)
(2)Nokia5110的初始化
接通电源后,内部寄存器和RAM的内容是不确定的,这需要一个RES低电平脉冲复位一下。
当VDD变为高电平,达到VDDmin(或更高)之后,最多100ms,RST输入低电平(电平幅度V0.3VDD)。
VDD
ES
r—1RW—*
|
5110复位时序
LCD_init
5110初始化
入口参数:
voidLCD」nit(void){
LCD_RST=0;
delay_1us();
LCD_RST=1;
LCD_CE=0;
delay_1us();
//产生一个让LCD复位的低电平脉冲
//关闭LCD
//使能LCD
LCD_write_byte(0x21,
LCD_write_byte(0xc8,
LCD_write_byte(0x06,
LCD_write_byte(0x13,
LCD_write_byte(0x20,LCD_clear();
LCD_write_byte(0x0c,
0);
//使用扩展命令设置LCD模式
//设置液晶偏置电压
//温度校正
0);
//1:
48
//使用基本命令,V=0,水平寻址
//清屏
//设定显示模式,正常显示
//关闭LCD
⑶设置Nokia5110液晶的坐标
Nokia5110(PCD8544)的命令集:
表】指令集
指令
2字
DB7
DB6
DB4DB3
DB2DB1
D60
(H=0or1)
NOP0
0,
r-,
剳能蛙直0
■0^
1
矿
PD
LI
苑逍控习h逅丸橈式r扩曲令设直<
]:
)
写垃誓1
(H=0)基本捋令集
Dr
比
□s
C:
Di
02
e
Do
耳盂:
諾》址扳FtV-l
[o-
X
半可悝用
'
c
Q
□
E
设置RAM的、比址
C
G
Vj
¥
厂
%
设蚩赋疔Y"
0£
V^5
世矍旳kt扯
&
Xg
Xi
心
Xo
览兰血帕叮宅E:
0<
X<
93
(H-n扩展拒令集
a
不可便用
眇便舟
ill度档馆
TCi
rec
:
j
和■便用
po"
J
0X
es;
BStX
0SCX
农二r兰霰绮(RST不可便用
%P6
Vqps
VOP(
VqPi
VOP:
頁pp生倚住•匹
命令字符解释:
BFT
上甘绘二
居片'
处于芷电按式
V
*苹#左:
2產右.厂
H
■1史崔护些护令農
0andE
00
01
显示空白善通環式尸所有議示段氐转溟基摸式
■C-mndf亡匚
Vlcd温度系JE0
VtCp幣氓丟號1
Vlco混度瓯IS2
VlCD狂度寒浪3
要注意的是“功能设置”命令的“H”和“V”。
o
X-addresE
B3
H=0使用基本指令集命令,H=1使用扩展指令集命令V=0水平寻址,V=1垂直寻址。
图4格式和寻址
48*84点阵的格式如上图,数据以字节8bit为单位下载到PCD8544的4
8*84bit显示数据RAM矩阵。
列通过地址指针寻址,地址范围为X0~83(1010011),Y0~5(101)。
地址不允许超过这个范围。
■I
■
if
电
fl
Y-address
u
■fl
用垂直寻址方式CV=1)往RA\I写数寺的次序
在垂直寻址(V=1),Y地址在每个字节之后递增,经最后的Y地址(丫=5)之后,丫绕回0,X递增到下一列的地址。
图6用水平寻址方式(\=0)往RAM写入数据的次序
在水平寻址模式(V=0),X地址在每个字节之后递增,经最后的X地址(X
=83)之后,X绕回0,Y递增到下一行的地址。
经每一个最后地址之后(X=83,Y=5),地址指针绕回地址(X=0,Y=0)。
*********************************************************
LCD_set_XY
设置
LCD坐标函数
0-83
Y
0-5
备注:
voidLCD_set_XY(unsigned
charX,unsignedcharY)
LCD_write_byte(0x40
Y,0);
//column
LCD_write_byte(0x80
X,0);
//row
(4)显示英文字符
英文字符占用6*8个点阵,通过建立一个ASCII的数组font6x8[][6]来寻址。
而这个数字的行号对应(字符ASCII码-32)。
ASCII码表如下:
HxOctChair
0000NUL
(null)
1001S0H
(starto£
heading)
2002STX
(startq£
text)
3003ETX
(endofteKtJ
4004EOT
(endoftransmissic
500>
5ENQ
(enwiEY)
6
6006ACK
(acknowledgeJ
7
700*7BEL
(bEll)
8
3010BS
(backspace)
9
9OilTAB
(horizonta丄cab)
A012LF
(NLlinefeed,new
B013VT
(vertical匸曰b)
C014FF
(NPfocBfeed,new
D015CR
(carriagee皂cutn)
14
E016SO
(shiflbDutJ
15
F017SI
(shiftin)
16
10020DLE
(datalinkescape]
17
11021DC1
(dt^icecontrol1)
18
12022DC2
(devicecontrol2)
19
13023DC3
(devicecontrol3)
20
14024DC4
(devicecontrol4)
line)
DecHxOHHtnrtlChr
D@cHxOctHtmlChr
1A
IB
1C
IDIE
IF
025
Q26
027
030
031
032
033
MAKSWETBCA>
TEMSUBESC
034FS
035GS
036R5
037US
(negativeacknowledge}(synchEcmcnasidle}(endoftrans・block)(cancelJ
(endatmedium)(substitute)
(escape)
(fileseparator](groupseparator)(recordsepacator](unitSEpazator)
040
041
042
043
04^
045
046
047
Q50
051
052;
053
054
055
056
057
060061
062
063
064
06S
066
067
070
071
072
073
074
075
076
077
崔畑;
£
#33;
^#34;
4#3S;
«
36;
^37;
^#39;
曲40;
i#41;
4*42;
^#44;
4f45;
曲47;
348;
“叱
£
#50;
6r#Sl;
4#52;
^#54;
#55;
s*57;
*#58;
#60j<
店1;
=
>
?
Space
4S5
67
68
69
70
71
72
73
74
75
76
77
78
79
60
31
B2
83
34
S5
96
B8
B9
90
91
92
94
95
40
41
42
43
44
45
46
47
49
4A
4B
4C
4D
4E
4F
50
51
52
53
54
■55
56
57
59
5A
5B
5C
5D
5E
5F
100
101
102
103
A#S4;
104*#68;
105
106
107
110
111
112
113
#69;
#72;
*#73;
*#74;
114*#76;
115
116
117
120
121
122
123
i#77;
i#78;
*#79;
咖0;
i#02;
*#S3;
1Z4A#34;
125
LZG
127
130
131
132
133
4#S5;
*#07;
加Cl;
i#91;
134*#92;
135*#93;
136*#94;
137*#95;
BCD
F
I
HN0P
P
T
U
W
97
98
99
104
108
109
114
118
119
124
126
61
62
63
64
65
66
6k
6B
6C
6D
6E
6F
7B
7A
7C
7D
7E
7F
140
141
142
143
144
145
146
147
15Q
151
152
153
154
155
156
157
160
161
162
163
164
165
166
167
170
171
172
173
1T4
1?
176
177
*#96;
护8:
小99=
fl00;
*#101;
*#103;
#105;
^#106;
*#107;
*#106;
*#1101;
*#113;
fiHlS;
*#117;
^#115;
*#120;
4flZl;
*#124;
4*125;
*#12"
?
;
m
n
DEL
函数名称
LCDwritechar
函数功能
入口参数
出口参数
显示英文字符
显示的字符
voidLCD_write_char(unsigned
charc)
unsignedcharline;
c-=32;
//数组的行号
for(line=0;
line<
6;
line++)LCD_write_byte(font6x8[c][line],1);
如要在NOKIA5110输出大写“A”,对应数组的行号为33,对应的元素为
0000000010ooooooood00000000600000000^0•OOO«
OOO5oeooeooo-oooooooop
{0x00,0x7C,0x12,0x11,0x12,0x7C},水平寻址(V=0)
NOKIA5110一行可以显示14个字符,可以显示六行
(5)显示汉字
显示汉字可以采用两种点阵方式,一种是12*12点阵,一种是16*16点阵,网上也有一个自动提取字模的小软件“3310液晶显示屏汉字提取程序”,这个
下载:
小程序只适用于水平寻址(V=0)。
3310液晶显示屏汉字提取程序
采用12*12点阵汉字时,由于不是8的整数倍数,因此行与行之间只能隔开,这样才能完整显示一个汉字。
〃欢{0x0A,0x92,0x62,0x9E,0x02,0x18,0x87,0x74,0x84,0x14,0x0C,0x00,0x02,0x01,0x00,0x04,0x05,0x02,0x01,0x00,0x01,0x02,0x04,0x00},
ooooooo一/
OOOOOQ
・
00・£
。
000|・000000一込
ooeooo・o・
•••00002000000
oooeeooo^ooooooo
・2
ooooon
o・oo・0OoooQ
OOQC
6O•->
0000000^060000000-^
oeoooee0-0000o・oo・ooe・oooo0・o・ooo
•OOOOO
12*12点阵
(6)显示图形
显示的图形像素大小不能超过84*48。
也有一个字模提取小软件Zimo21可以帮助我们得到图像的像素数组。
但要注意Zimo21软件的设置,不然的
话就显示不了想要的图片。
Zimo21设置
要注意选中“纵向取模”“字节倒序”这样才能在5110上显示正确的图像。
LCD_draw_bmp_pixel
位图绘制函数
X、Y
位图绘制的起始X、丫坐标
*map
位图点阵数据;
Pix_x
位图像素(长)
Pix_y
位图像素(宽)
voidLCD_draw_bmp_pixel(unsignedcharX,unsignedcharY,unsignedcha
r*map,unsignedcharPix_x,unsignedcharPix_y)
unsignedinti,n;
unsignedcharrow;
//计算位图所占行数
if(Pix_y%8==0)〃如果为位图所占行数为整数
row=Pix_y/8;
else
row=Pix_y/8+1;
〃如果为位图所占行数不是整数
LCD_set_XY(X,Y);
for(n=0;
n<
row;
n++)〃换行
for(i=0;
Pix_x;
LCD_set_XY(X+i,Y+n);
LCD_write_byte(map[i+n*Pix_x],1);
要显示的图像
NOKIA5110显示出来的效果