你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】stm32 LCD1602显示

[复制链接]
STMCU小助手 发布时间:2022-1-22 18:05
这几天一直被lcd1602困扰,就是不显示,开始一直纠结于stm32的3.3V能不能驱动,最后发现3.3v也是可以驱动的,下面是我的知识整理和方法,和大家分享一下。
+ ]! x$ [, W& H- a
首先,了解一下lcd1602:
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式 LCD,目前常用 16*1,
9 y3 }7 o4 [; B$ L16*2,20*2 和 40*2 行等的模块。硬件如图:

" n  G6 q- R% @3 H. N# O
1361589-20180327092350946-1597949974.png
6 s! \9 h7 V7 R+ ?0 b9 h2 r* a4 a
1602LCD 主要技术参数:
" a; }+ l. ~5 {6 g1 g" M: C6 S显示容量:16×2 个字符
5 j8 v( j/ f/ v8 i; m6 q1 f芯片工作电压:4.5—5.5V% X2 x- ]% X* N4 ^. {( D
工作电流:2.0mA(5.0V)+ d; D0 @0 |) r0 m3 o" Q. t* p* N
模块最佳工作电压:5.0V
" P6 E- B9 T8 \6 h! p8 a+ K9 V1 V字符尺寸:2.95×4.35(W×H)mm
好多网友都说3.3V无法驱动,其实3.3V可以驱动的,只是显示的不清楚而已,大家调节3脚的液晶显示偏压就能正常显示了,具体第三脚是什么下面再说。
引脚定义:
1361589-20180327093050328-224328927.png
第 1 脚:VSS 为地电源。
$ |6 D; `' I( B第 2 脚:VDD 接 5V 正电源。2 n. z/ o" Q5 \6 k* R# _
第 3 脚:VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对7 ]4 T; s; k/ m( w
比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度。, D. \& i5 J; ?( T  F' g; O3 D
第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
! |5 ?5 @* W' q5 m) o4 E1 C第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 R/W2 X. W4 U/ u3 v6 J( t
共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信$ h8 |  T! n4 H, g" _
号,当 RS 为高电平 R/W 为低电平时可以写入数据。
* m3 g' I6 t  Z/ V/ t第 6 脚:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。
& Q3 r4 c& J/ M2 k第 7~14 脚:D0~D7 为 8 位双向数据线。# B9 W5 M1 W$ K& B  `5 Y
第 15 脚:背光源正极。
2 W; I5 z) y( p( J7 @第 16 脚:背光源负极。
下面说说指令集:
1361589-20180327095617752-1747572247.png
1602 液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1 为
% {5 k1 J( I3 @高电平、0 为低电平)
! P- L3 ?' d$ f' {' P; y: L8 }' c
指令 1:清显示,指令码 01H,光标复位到地址 00H 位置。
$ a3 R; i# D7 K- B" }
& [1 Q; V7 u1 j; o/ M& g
指令 2:光标复位,光标返回到地址 00H。
5 ~. A4 d% H& y+ r9 y7 k. m; k
指令 3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有
  t" ]( {& t& A0 U文字是否左移或者右移。高电平表示有效,低电平则无效。
指令 4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显
) D% Z# J2 n$ ?/ O& T示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,
6 }, G  ^7 s& @% D  W9 G高电平闪烁,低电平不闪烁。
, ^! w, J7 [0 e' ^5 ]指令 5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。" J  [" Q6 h- T) S/ M
指令 6:功能设置命令 DL:高电平时为 4 位总线,低电平时为 8 位总线 N:低电平时为单6 z) p: F2 {. l. k2 z
行显示,高电平时双行显示 F: 低电平时显示 5x7 的点阵字符,高电平时显示 5x10 的点阵6 l9 Q1 C  A1 K" c
字符。% n5 x+ h) h& _3 n! S
指令 7:字符发生器 RAM 地址设置。+ `4 ^" m+ o/ p" A1 d
指令 8:DDRAM 地址设置。% T: Y# \% U) X0 b1 x
指令 9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或2 _3 Y- k- D% v6 ^1 w) {" H. j
者数据,如果为低电平表示不忙。
7 ?/ P- M& k1 X2 {/ U+ p. r  U指令 10:写数据。
& s8 Z+ o+ w' E3 T5 \" i6 d指令 11:读数据。; X/ }/ _/ ]) a4 M" E$ Z
5 u* o$ I. i4 B8 U( J+ }
如何显示:
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电
0 A) J7 Y2 q6 a平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在
4 q! r1 Q8 Q+ N2 k3 q! J哪里显示字符,下图是 1602 的内部显示地址。

" K; ^0 G& k" |% }' O
1361589-20180327095955046-2019895227.png
% D$ H7 |5 c/ V& A/ ]" N- t
例如第二行第一个字符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行4 ]0 U% P- }* N: e$ c
第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以' M& _$ s1 w# M5 z9 ^$ Q: J
实际写入的数据应该是 01000000B(40H)+10000000B(80H)=11000000B(C0H)。
8 [9 A" m! r  u$ m0 k
1602LCD 的一般初始化(复位)过程9 V3 K& j" C# g7 g2 m& d
延时 15mS
- b. p1 d8 H1 b9 _写指令 38H(不检测忙信号)' E% w5 Z9 f; \, u1 S
延时 5mS
: z* W2 o% W$ Q写指令 38H(不检测忙信号)
" ~, G* g7 Y9 W延时 5mS
- h+ u7 n. m$ R9 o1 d% G写指令 38H(不检测忙信号)
/ o2 U( m# }- @8 e6 G, s

% x! b+ |2 x) K) [$ Z4 H2 m
以后每次写指令、读/写数据操作均需要检测忙信号
2 Y" _8 }9 g  ?& C* {写指令 38H:显示模式设置
" Z, Z. _) ^, a9 P写指令 08H:显示关闭: `2 `3 }9 {; Y5 c3 }
写指令 01H:显示清屏  a) i: {9 c3 M  C0 Y
写指令 06H:显示光标移动设置
' x* j9 e5 v. U" L5 J写指令 0CH:显示开及光标设置0 S# S0 N9 P! J4 P* y" c) q
% x7 r9 k5 O# Z) L, X
总结:
1.因为51单片机是直接输出5V所以可以直接驱动1602,stm32系列是输出3.3v电压,所以不能正常驱动1602,我的解决 办法是将二脚vcc接5V,其他脚还是用3.3v驱动,结果就能正常显示了。
2.还有一个问题,就是液晶显示偏压的问题,上面说了接地对比度最高,接vcc对比度最低,或者接可变电阻器进行调节,开始的时候就是这个显示偏压接了vcc倒是我一直看到不清楚,文档看到不仔细啊!

. A6 ]1 A  Z  w: ]
下面是我的显示效果:
1361589-20180327102435488-496736788.png

0 e0 ]3 L0 q2 x, m
赞 收藏 评论0 发布时间:2022-1-22 18:05

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版