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

【经验分享】stm32 LCD1602显示

[复制链接]
STMCU小助手 发布时间:2022-1-22 18:05
这几天一直被lcd1602困扰,就是不显示,开始一直纠结于stm32的3.3V能不能驱动,最后发现3.3v也是可以驱动的,下面是我的知识整理和方法,和大家分享一下。
/ j1 u+ r  s3 ]  C/ n6 j' M3 u
首先,了解一下lcd1602:
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式 LCD,目前常用 16*1,( B/ B3 Q( S# F+ i* v+ w' ]
16*2,20*2 和 40*2 行等的模块。硬件如图:
/ Z4 k: }: U# P9 f# V
1361589-20180327092350946-1597949974.png
0 W* z! c- O* A1 J7 ]7 N
1602LCD 主要技术参数:  ]" M* q6 {5 @- W9 J% C3 F
显示容量:16×2 个字符
3 b: y! e  E0 {% s# p% I芯片工作电压:4.5—5.5V3 \; k8 y+ o& U
工作电流:2.0mA(5.0V)& Q1 b6 k1 o. f2 H$ h, `. P
模块最佳工作电压:5.0V
  ^$ k% ^' n5 q, A字符尺寸:2.95×4.35(W×H)mm
好多网友都说3.3V无法驱动,其实3.3V可以驱动的,只是显示的不清楚而已,大家调节3脚的液晶显示偏压就能正常显示了,具体第三脚是什么下面再说。
引脚定义:
1361589-20180327093050328-224328927.png
第 1 脚:VSS 为地电源。
5 Y; d5 p0 s. ?6 n8 E第 2 脚:VDD 接 5V 正电源。
. D& s3 G9 q* O! {: n0 B第 3 脚:VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对
& g- H$ f. `$ L- t: }1 p比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度。- o) ]" p, c8 y3 m9 u& Y
第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。* y8 t3 G' {4 l; B4 q8 x. l
第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 R/W
$ N& J1 c" x) I共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信4 j8 N; E: M) _- f1 ]4 E
号,当 RS 为高电平 R/W 为低电平时可以写入数据。
; U" V1 o. q' k  |第 6 脚:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。+ v1 O2 j' q& {
第 7~14 脚:D0~D7 为 8 位双向数据线。
9 c& C4 D! \1 f" [7 U第 15 脚:背光源正极。$ S) O  l4 z5 o, t/ C
第 16 脚:背光源负极。
下面说说指令集:
1361589-20180327095617752-1747572247.png
1602 液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1 为6 m& i4 Z6 R5 H( @, U
高电平、0 为低电平)$ a. c) K$ M! P% f1 H
指令 1:清显示,指令码 01H,光标复位到地址 00H 位置。3 x+ y- x$ Y1 l' S) Z: @: a. V  v5 p

4 j! H0 D% c8 C0 Y1 w) b8 Z2 s
指令 2:光标复位,光标返回到地址 00H。, p5 E2 X7 E. l  m( i
指令 3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有& L. w7 Z9 Z; }1 v$ x3 I9 {0 a) ?
文字是否左移或者右移。高电平表示有效,低电平则无效。
指令 4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显
3 W  y# y% d4 L% [0 z7 t示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,
; s. t& F0 F1 i7 G* `7 `高电平闪烁,低电平不闪烁。! X5 r  N" Z$ S3 R$ ~1 ~
指令 5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。' S$ M* }; x, f: H" Y/ ?4 o" V
指令 6:功能设置命令 DL:高电平时为 4 位总线,低电平时为 8 位总线 N:低电平时为单* J8 B* f; z8 Z5 Y# O" [2 Q
行显示,高电平时双行显示 F: 低电平时显示 5x7 的点阵字符,高电平时显示 5x10 的点阵
0 R7 @+ U+ J' f; p0 r字符。+ }( F4 B: C6 K. n4 ^& a
指令 7:字符发生器 RAM 地址设置。
. k9 y6 v8 N7 @指令 8:DDRAM 地址设置。1 b1 O& ?8 x# ]: Z) h
指令 9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或
; C7 ~% T/ X# v$ \6 Y4 t7 y  X+ ]- p者数据,如果为低电平表示不忙。
( @- g. B8 u# g2 G% l/ L指令 10:写数据。
! f/ D+ v; M4 A6 Q6 g指令 11:读数据。
  K' t4 \  ?& x7 s3 q1 N$ w  M6 z7 S; B: M! ]- W- [
如何显示:
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电) `, X# y+ U4 N
平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在4 e# a( g4 Q" H
哪里显示字符,下图是 1602 的内部显示地址。

0 _( v- j; t( M/ q8 @$ ]! P
1361589-20180327095955046-2019895227.png
7 O+ l. c$ T5 y1 p8 Z0 o2 l
例如第二行第一个字符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行( `2 I0 O  E5 v
第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以
2 E5 ^) t9 J  |7 Y实际写入的数据应该是 01000000B(40H)+10000000B(80H)=11000000B(C0H)。
( x$ ^* b* d5 Y9 O1 ^' o
1602LCD 的一般初始化(复位)过程
  _  F9 f- g/ U+ [3 M延时 15mS
( [0 C* Y1 y0 w- ~  b( J写指令 38H(不检测忙信号)
! o+ l! X- ?+ f/ b. p延时 5mS
3 b" r: v8 R( E写指令 38H(不检测忙信号)
5 P( y2 [5 Z" X" t7 c) p5 h延时 5mS$ d" Y* {. [7 V9 x0 Q% A
写指令 38H(不检测忙信号)
9 _8 d" u  Q4 n+ V2 O0 b$ b9 I

* w! n% R/ G0 _& M
以后每次写指令、读/写数据操作均需要检测忙信号0 m' e4 y: @- `" F
写指令 38H:显示模式设置
5 E8 U; R) s! f5 ?# N4 O6 h; _写指令 08H:显示关闭6 ?; N6 N# \3 Z9 N, ?1 P# u
写指令 01H:显示清屏
5 {6 y' z8 a( B) M; U( n写指令 06H:显示光标移动设置, p  i8 G" ^- [7 B, P
写指令 0CH:显示开及光标设置8 Z, e! H  \. S" D8 o6 T
) |  Z7 r4 O/ e( X; B& C
总结:
1.因为51单片机是直接输出5V所以可以直接驱动1602,stm32系列是输出3.3v电压,所以不能正常驱动1602,我的解决 办法是将二脚vcc接5V,其他脚还是用3.3v驱动,结果就能正常显示了。
2.还有一个问题,就是液晶显示偏压的问题,上面说了接地对比度最高,接vcc对比度最低,或者接可变电阻器进行调节,开始的时候就是这个显示偏压接了vcc倒是我一直看到不清楚,文档看到不仔细啊!
) T  c5 C7 |4 g# m" c4 r1 f
下面是我的显示效果:
1361589-20180327102435488-496736788.png

4 B, o3 U0 q! c0 Z2 @
收藏 评论0 发布时间:2022-1-22 18:05

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版