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

【经验分享】STM32 OLED简介

[复制链接]
STMCU小助手 发布时间:2022-6-14 18:32
01. OLED概述% D# _7 t5 P6 E* E( b  r  j2 b& K
OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(OrganicElectroluminesence Display, OELD)。OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。1 Q$ f5 e" Z7 i+ H7 ~
( i( P% b/ {* U& Z- O
LCD 都需要背光,而 OLED 不需要,因为它是自发光的。这样同样的显示,OLED 效果要来得好一些。以目前的技术,OLED 的尺寸还难以大型化,但是分辨率确可以做到很高。- L" @$ b# Z& m$ o" S8 F9 J/ ~" O

: D- X- N1 w4 \: U% N! s1 ?02. OLED特性参数$ L  I& ^1 E$ V* Y  b4 Z
ATK-0.96’ OLED 模块是 ALIENTEK 推出的一款小尺寸(0.96 寸)、高亮、自带升压电路的高性能 OLED 显示模块,分辨率为 128*64,该模块采用原装维信诺高亮 OLED 屏,采用SSD1306 驱动 IC,该芯片内部集成 DCDC 升压,仅需 3.3V 供电,即可正常工作,无需用户再添加升压 DCDC 电路。" G  G/ O$ w: e# S' }
- U7 ]( Y- [) s8 y& {4 P
模块支持:8 位 6800 并口、8 位 8080 并口、IIC 以及 4 线 SPI 等 4 种通信接口,通过模块背面的 BS1,BS2 焊盘,可以自行设置模块的接口方式。默认为:8 位 8080 并口。该模块各参数如表 1.1 和表 1.2 所示:( S  D1 h2 |3 n9 J$ W
! N- z! e* M8 m8 Q
Y8}C]KV%8YQP0`H)8%~5U[N.png $T1J}87@LI2N{RRREDZOS~Y.png
; B$ x8 p# s7 R( Y- B% F
8 Y) v+ ~( X6 D( M3 i3 K6 uATK0.96’ OLED 模块支持多种通信接口,通过模块背面的 BS1,BS2,可以自行设置模块的通信接口方式,见表 1.3:, X; ?3 N7 T3 E4 M( l; h! j3 z, A
0 K; e3 B* f4 s
20200904151042418.png ( i- u" U( f+ ?! Y/ _6 K

& b3 K# ~. {6 M) f; C2 k8 e03. OLED模块描述
" L0 `0 y6 u/ H- \: H7 W7 p5 ]; X7 _
ATK-0.96’ OLED 模块是 ALIENTEK 推出的一款高性能 OLED 显示模块,尺寸小巧(27mm*26mm),结构紧凑,模块通过 1 个 2*8P 的 2.54mm 间距排针与外部连接,模块外观如图 2.1.1 所示:
! \- L3 {0 z5 K& L0 y
$ k) c8 i+ D# J5 j' k* T XVS545ZPV930PL)_KW_8Y{D.png 1 e4 z1 W9 d+ X0 q7 e2 ~& X2 j/ z
- p0 F; |# ^' \! ]
该模块具有如下特点:) R0 J' h' I/ \# ^% g
 双色可选,提供纯蓝色或黄蓝双色两种模块
! j: s' D  ^' `; l# o% h 高分辨率,分辨率为:128*64
" f, a* T( {. D& A 超小尺寸,OLED 显示屏为 0.96 寸,模块尺寸仅为 27mm*26mm
1 g( O) y# i3 v% c% N& a" I 多种接口方式,提供 8086 并口、6800 并口、4 线 SPI 和 IIC 等五种接口方式
3 g: t' v/ X9 V5 D# }+ r' m- o* [ 集成 DCDC,无需外部高压,仅需提供 3.3V 电源,即可正常工作6 B$ |2 C1 Y" J- w6 c
图 2.1.1 中,左侧的图片是模块的背面图,右侧的是正面图。( K! A+ a7 r+ K0 D6 u- l0 A6 H
& T$ N/ r+ K- |% ^9 K5 h( l
04. OLED模块原理图2 c/ ?' S1 F# o* M4 r
/ \9 ?& @* Q, k5 A( x
CBF}7]%3{N8]F`_S}~ZUCQ7.png 3 G; L& _- Q5 C4 a% k- ?

/ i2 i/ F  N0 ^# i( i05. OLED模块引脚说明
: g2 Y$ b/ K9 Q4 ]& oATK-0.96’ OLED 模块通过 2*8 的 2.54 排针同外部单片机通信,各引脚的详细描述如下表所示
0 x, ^! V; h/ ^7 S& P: m
' _- z! S. n# i: c$ g1 U/ |9 Y- g8 s) Y _8UJ9B(H)WFRP8SA5LH1.png
# L; c) i! s7 L1 q7 j$ W( P
* y5 u8 Y* r5 | II(@[Y$UF6WW9}_F@@YUSBR.png
& A# p6 a* b& I7 r& @7 k$ G
6 [* B1 p7 M" E2 C3 n* \& n温馨提示7 i& P- p( F- t7 {

- I5 k( F, K) L; W8 o9 n) I模块在使用 IIC 模式或者 4 线 SPI 模式的时候,是不支持读操作的,所以如果你需要读操作,只能选择 6800 或者 8080 并口模式。模块默认是:8080 并口模式,大家根据自己选择的接口模式,来接线。4 w6 r8 e. ~& @' {( E9 r, y: y3 p
* `5 Y2 J# q( h- o8 g3 d
06. OLED模块使用

2 {4 ^% F+ @* j$ m5 K, o' iATK-0.96’ OLED 模块的控制器是 SSD1306,支持多种接口方式,我们模块支持 4 种连接方式,这里我们介绍其中 8080 并口模式。. [- q" i- K; _

$ |- D2 J" X% B8080并口模式! a/ n9 e7 a$ y$ m) N

. g$ G* J% `9 \5 ?' L3 L& G( J$ cATK-0.96’ OLED 模块支持 8 位 8080 并口模式,总共需要 13 根信号线通信,这些信号线如下:
$ {7 g. Y5 U) W" ?CS:OLED 片选信号。' X! N6 n, y! }/ H0 [9 J
WR(RW):向 OLED 写入数据。3 w! o: H% J9 \$ A9 a! M
RD:从 OLED 读取数据。
0 k1 R  z4 \% {  x* kD[7:0]:8 位双向数据线。
" S2 D& e/ H6 Q6 d2 jRST(RES):硬复位 OLED。  `' n9 r1 d6 A: g
DC:命令/数据标志(0,读写命令;1,读写数据)。
: ?- J4 p6 b  _) q2 b9 q' j9 U0 D: g$ J9 \$ u- K8 E/ |
模块的 8080 并口读/写的过程为:先根据要写入/读取的数据的类型,设置 DC 为高(数据)/低(命令),然后拉低片选,选中 SSD1306,接着我们根据是读数据,还是要写数据置RD/WR 为低,然后:
$ Z- C7 ?1 C8 y, [7 B3 V) x
- M  m6 R( A& j/ b6 {在 RD 的上升沿, 使数据锁存到数据线(D[7:0])上;
$ ?: n7 c6 S: K8 a8 [5 R% I& S
# m3 _  V/ z" q( E在 WR 的上升沿,使数据写入到 SSD1306 里面;
& N& s  _+ t: y9 Z) H; B7 e- P" I; ^, J* ~# m+ ~/ Z
SSD1306 的 8080 并口写时序如图所示:9 C8 p, J+ H+ J( T! J

  q* Z5 @4 R1 m* n 9K@$W[))3$V1@]1KVCH]Y12.png . F+ r$ w" L1 H( b4 C

' q. C2 G/ E8 [3 U5 }% x) RSSD1306 的 8080 并口读时序如图 2.3.1.2 所示:' R$ Y! q* P4 g/ Q5 g6 B/ W
6 o, I# X3 {: J/ D: Z
8 ]1 @' ?9 c; {+ q7 i( X
, W+ K- ?0 v/ s2 Z+ G# _% Q+ o: Q
SSD1306 的 8080 接口方式下,控制脚的信号状态所对应的功能如表所示:
/ t- k, t' a8 H% J1 }: d. v9 }; K7 f
6(NP87G}6@91@28D7F%_RBU.png 6 V8 v. l- @* B) C
+ _" n, Q6 i2 p+ Y2 q- E- l1 ~6 B
注 1:H 代表高电平(VCC),L 代表低电平(GND),↑代表上升沿。
  C. T% V( d7 n: B4 k$ B# R' ^$ m6 z
在 8080 方式下读数据操作的时候,我们有时候(例如读显存的时候)需要一个假读命(Dummy Read),以使得微控制器的操作频率和显存的操作频率相匹配。在读取真正的数据之前,由一个的假读的过程。这里的假读,其实就是第一个读到的字节丢弃不要,从第二个开始,才是我们真正要读的数据。
/ T1 d2 L% {- q, j! p, K
9 ]% Z) F5 Q$ J0 m4 ]4 J( K: ]一个典型的读显存的时序图,如图所示:/ ]; W4 n4 G6 I6 h' B- E. I2 t
, t7 @0 M, W5 Z
{S4Y]]CJ]NXMSJXKDZ%DOW9.png & o) ^7 t/ F% R1 u# o. S* z  e
2 o# M" M1 v; r  l: t
可以看到,在发送了列地址之后,开始读数据,第一个是 Dummy Read,也就是假读,我们从第二个开始,才算是真正有效的数据。" H8 @1 w! K5 f2 ?6 L
% V+ s4 h6 v$ y+ B* a6 W1 D) F0 M
显存
+ z$ f; ]! k2 \( d& t/ u1 y% s- S5 {7 s
SSD1306 的显存总共为 128*64bit 大小,SSD1306 将这些显存分为了 8 页,其对应关系如表所示:
/ d0 V& {9 E$ t$ ?1 q6 n" P& W9 }2 M( u7 B4 Y9 z4 u2 }
1BUUCI7~6ZRPS8(WQ_EJFY2.png
$ W2 M* d2 ^* A
5 D5 \+ O& d' Y- J" w3 a/ KSSD1306 的每页包含了 128 个字节,总共 8 页,这样刚好是 128*64 的点阵大小。因为每次写入都是按字节写入的,这就存在一个问, ?9 ~2 _; v& d  E% }( S

4 p8 U7 p* u9 `( I; E' \; w! O1 S" L题,如果我们使用只写方式操作模块,那么,每次要写 8 个点,这样,我们在画点的时候,就必须把要设置的点所在的字节的每个位都搞2 n+ O$ \, e; g. E8 p6 E
% P$ Y+ k! }$ @: I$ r8 i
清楚当前的状态(0/1?),否则写入的数据就会覆盖掉之前的状态,结果就是有些不需要显示的点,显示出来了,或者该显示的没有显
. s4 Y5 ~/ w) U: O! T) k3 \3 n0 \5 S4 K, ]1 `5 w
示了。这个问题在能读的模式下,我们可以先读出来要写入的那个字节,得到当前状况,在修改了要改写的位之后再写进 GRAM,这样就
5 b4 l: t' {! p& @) d, v& T
+ d8 ?7 \/ E1 [/ t+ ]! U+ ~不会影响到之前的状况了。但是这样需要能读 GRAM,对于 4 线 SPI 模式或者 IIC 模式来说,模块是不支持读的,而且读->改->写的方式$ `3 _& M! F+ n& U( z7 r

6 |9 M+ l' J# D' Z: i+ ?. y: {0 x速度也比较慢。
" C! E6 g1 C/ ^
- _% N; d! g0 l4 G9 `7 w我们推荐采用的办法是在单片机的内部建立一个 OLED 的 GRAM(需要 128*8 个字节),在每次修改的时候,只是修改单片机上的 GRAM(实际上就是 SRAM),在修改完了之后,一次性把单片机内部的 GRAM 写入到 OLED 的 GRAM。当然这个方法也有坏处,就是对于那些 SRAM 很小的单片机(比如 51 系列)就比较麻烦了,如果内存不够,那就推荐还是采用并口模式,这样可以节约内存。
# n, D) n! q! @8 b/ o& B, ?+ T; U  q4 Q  w- F
指令
* H4 B6 I, w0 ?. E5 \1 N% I6 ?
) k. D6 t7 i  mSSD1306 的指令比较多,这里我们仅介绍几个比较常用的命令
# r0 c- ~5 }5 E- X0 w% s" z
% C$ }0 h% ?, c/ a; s NHBHR@8WBNEFTASVI`2FK}J.png
5 F) |  }* h$ D- L) f. J( l5 c8 @
第一个命令为 0X81,用于设置对比度的,这个命令包含了两个字节,第一个 0X81 为命令,随后发送的一个字节为要设置的对比度的值。这个值设置得越大屏幕就越亮。
( }5 a. Q- K- ~4 k% f( H. B  A  g
% K$ f! L3 f+ q0 l# o# O2 q) ^第二个命令为 0XAE/0XAF。0XAE 为关闭显示命令;0XAF 为开启显示命令。
' l& {9 I0 c) A8 j( g/ j' w+ j) G( z; o7 G( x4 M! E' a' ~* V
第三个命令为 0X8D,该指令也包含 2 个字节,第一个为命令字,第二个为设置值,第二个字节的 BIT2 表示电荷泵的开关状态,该位为 1,则开启电荷泵,为 0 则关闭。在模块初始化的时候,这个必须要开启,否则是看不到屏幕显示的。
2 }: S, i+ S/ B7 `: _
) n& d% W* H  \% {& [& Y1 ?7 e第四个命令为 0XB0~B7,该命令用于设置页地址,其低三位的值对应着 GRAM 的页地址。
1 n4 b% Q8 z  l$ {$ |2 n$ Z$ l/ l+ x
( @: n$ V5 v  b( e: U第五个指令为 0X00~0X0F,该指令用于设置显示时的起始列地址低四位。5 F3 d2 z5 V) ]9 m1 M

) S6 l& W2 f9 \4 f$ l第六个指令为 0X10~0X1F,该指令用于设置显示时的起始列地址高四位。
. j+ C6 e6 @& r5 K3 ^! M
# X" ?2 B3 _) p+ Q& L  E其他命令,我们就不在这里一一介绍了,大家可以参考 SSD1306 datasheet 的第 28 页。从这页开始,对 SSD1306 的指令有详细的介绍。
3 g8 @. w+ x* ^' F
& L1 @3 U! U: @0 t1 T' Y) C$ r" q8 ^: l. d* {

" s) j) F' z7 w2 x6 d5 m% a  |! w6 v, x% {1 G
收藏 评论0 发布时间:2022-6-14 18:32

举报

0个回答

所属标签

相似分享

官网相关资源

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