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

【经验分享】STM32 OLED简介

[复制链接]
STMCU小助手 发布时间:2022-6-14 18:32
01. OLED概述% L2 t' n& L! o# C# u6 D# W7 v! v
OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(OrganicElectroluminesence Display, OELD)。OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。' R: T/ I) p: Z$ e+ J5 [* e

1 k! l4 t" H2 {* M* a4 Q, o$ {% Q( K, OLCD 都需要背光,而 OLED 不需要,因为它是自发光的。这样同样的显示,OLED 效果要来得好一些。以目前的技术,OLED 的尺寸还难以大型化,但是分辨率确可以做到很高。
, ]- o2 v2 Z  e' m# R# N- [. D0 B6 G- T& @
02. OLED特性参数
4 y) `" i% Z5 ?2 z* N" G  r- XATK-0.96’ OLED 模块是 ALIENTEK 推出的一款小尺寸(0.96 寸)、高亮、自带升压电路的高性能 OLED 显示模块,分辨率为 128*64,该模块采用原装维信诺高亮 OLED 屏,采用SSD1306 驱动 IC,该芯片内部集成 DCDC 升压,仅需 3.3V 供电,即可正常工作,无需用户再添加升压 DCDC 电路。. |" O0 W: R, K) N0 C! C: F. M
3 F6 l: x. ^5 h! x7 o- C$ Y
模块支持:8 位 6800 并口、8 位 8080 并口、IIC 以及 4 线 SPI 等 4 种通信接口,通过模块背面的 BS1,BS2 焊盘,可以自行设置模块的接口方式。默认为:8 位 8080 并口。该模块各参数如表 1.1 和表 1.2 所示:9 o; {- s9 ?9 d& j$ |% l
, X% D1 [! v; J3 J# v
Y8}C]KV%8YQP0`H)8%~5U[N.png $T1J}87@LI2N{RRREDZOS~Y.png
% e( g3 @7 h( M9 T4 X
) c+ z' [8 h/ t+ K) AATK0.96’ OLED 模块支持多种通信接口,通过模块背面的 BS1,BS2,可以自行设置模块的通信接口方式,见表 1.3:" W' i$ r, i9 I* D
# K4 O$ x* ^- {& `: l! l
20200904151042418.png & O9 o$ r, ^+ Z$ d( u  A2 u: L
, F0 N, Q* `* l! @6 e, s8 T2 H; F% B+ N
03. OLED模块描述

- C0 l  c8 ?5 N- m' M- [' j8 d! pATK-0.96’ OLED 模块是 ALIENTEK 推出的一款高性能 OLED 显示模块,尺寸小巧(27mm*26mm),结构紧凑,模块通过 1 个 2*8P 的 2.54mm 间距排针与外部连接,模块外观如图 2.1.1 所示:
+ K8 w2 C* h) g/ Y. K% M: z
4 f/ L& G4 l2 Y4 e# t0 G XVS545ZPV930PL)_KW_8Y{D.png ) M8 \: |+ T- m

: G& U3 E' _* R' a% T/ j1 D" M该模块具有如下特点:7 `: y; _/ n6 s4 t2 F; K7 e
 双色可选,提供纯蓝色或黄蓝双色两种模块3 e& R/ G! v9 v0 D, G- y/ s- ~
 高分辨率,分辨率为:128*64
8 H8 e$ P2 i' ~$ ? 超小尺寸,OLED 显示屏为 0.96 寸,模块尺寸仅为 27mm*26mm
/ l% _7 Q" @( m: S! v/ P! Y0 O 多种接口方式,提供 8086 并口、6800 并口、4 线 SPI 和 IIC 等五种接口方式
( @7 l, W  ^# U5 B. t 集成 DCDC,无需外部高压,仅需提供 3.3V 电源,即可正常工作9 T+ v3 P! O1 }4 s! K, a
图 2.1.1 中,左侧的图片是模块的背面图,右侧的是正面图。. D9 P8 N& v* n: T; I

+ _3 \) k$ ^; n# P& T1 o/ _04. OLED模块原理图$ b: X/ P1 p0 R
' M- M8 a7 v  H# q# O& x
CBF}7]%3{N8]F`_S}~ZUCQ7.png
8 j$ C- ]" t" J' h0 n3 H3 H# ^5 h% B6 T: O, m
05. OLED模块引脚说明7 U' |: z9 I6 o. A
ATK-0.96’ OLED 模块通过 2*8 的 2.54 排针同外部单片机通信,各引脚的详细描述如下表所示% e, q# y$ ~1 D, X
9 P) o' C3 @/ I; T, ~
_8UJ9B(H)WFRP8SA5LH1.png
! F1 f# f4 R4 ?- O+ w% p& |8 i3 t2 H9 s" o
II(@[Y$UF6WW9}_F@@YUSBR.png
* i9 x) e) m3 H. ~) ^9 K) e
; F/ G! S8 e( Q0 \2 t! j温馨提示
0 ^: l7 k% R9 A0 X- |! J
. \: J* f6 X( s1 e: ]* w模块在使用 IIC 模式或者 4 线 SPI 模式的时候,是不支持读操作的,所以如果你需要读操作,只能选择 6800 或者 8080 并口模式。模块默认是:8080 并口模式,大家根据自己选择的接口模式,来接线。
' I( u& S& }5 A7 B" D0 X  h+ o1 W3 F2 z2 u( Z: p0 ^, Y) V
06. OLED模块使用

# C: o4 Q- a3 @2 X% RATK-0.96’ OLED 模块的控制器是 SSD1306,支持多种接口方式,我们模块支持 4 种连接方式,这里我们介绍其中 8080 并口模式。; e  U$ y5 F  q" T9 m6 ~

' _# U" ^2 F1 B/ s: I6 H' j8080并口模式
9 D# p/ T, ^9 y  ]) w$ K" b# s0 [1 m4 D
ATK-0.96’ OLED 模块支持 8 位 8080 并口模式,总共需要 13 根信号线通信,这些信号线如下:
6 C' Z3 H8 J/ g9 j) R& S& x& b: O8 _CS:OLED 片选信号。4 |# s' g) L  }6 p4 f2 q4 t2 Y( H  ?
WR(RW):向 OLED 写入数据。  m) A, l7 a! Q$ H7 G: m
RD:从 OLED 读取数据。5 A4 ]3 c3 {4 ~( W% d
D[7:0]:8 位双向数据线。+ I$ c! o/ N: P6 S! h) R
RST(RES):硬复位 OLED。
# M' X$ u* ^2 \6 S9 J' x7 c# IDC:命令/数据标志(0,读写命令;1,读写数据)。
: B5 u) s3 K) ^$ @, e+ l- D; ?+ T. t. b
模块的 8080 并口读/写的过程为:先根据要写入/读取的数据的类型,设置 DC 为高(数据)/低(命令),然后拉低片选,选中 SSD1306,接着我们根据是读数据,还是要写数据置RD/WR 为低,然后:2 ^! b( V9 b, [( H& V4 U
+ W4 Z9 d9 V( I: {, F; |) e
在 RD 的上升沿, 使数据锁存到数据线(D[7:0])上;
: ]" p! @! ^: E3 {& l8 Y* ^- J5 W8 K6 x/ t/ G0 S
在 WR 的上升沿,使数据写入到 SSD1306 里面;. w0 h# P0 q( B4 G$ B2 T
& i/ r, U6 E7 \8 i9 E
SSD1306 的 8080 并口写时序如图所示:" H5 M3 ?0 E7 H. ]5 x7 W8 C$ h
. W8 I# c( n3 U$ M# d* \
9K@$W[))3$V1@]1KVCH]Y12.png
: e& f3 J# i# `( G* E% _2 E
  g" E) H/ H. b  D  @' F1 |' kSSD1306 的 8080 并口读时序如图 2.3.1.2 所示:
0 B+ A( d" p8 T" }7 y  v  k& d' b; j& n

3 S+ f* `3 G/ C7 {
5 X, |% ?) l( f, L0 FSSD1306 的 8080 接口方式下,控制脚的信号状态所对应的功能如表所示:, h, A2 U& y4 E; T( v0 O8 R, J: R

, D6 u$ A  M- ^) D! i3 \ 6(NP87G}6@91@28D7F%_RBU.png 8 F9 l2 D, ]. ]& Z( f$ Y
4 P. B/ I, i% _3 N: I
注 1:H 代表高电平(VCC),L 代表低电平(GND),↑代表上升沿。
( P7 y! F. d1 ]$ S. E; D: R( i2 L9 k% h2 h4 u+ j
在 8080 方式下读数据操作的时候,我们有时候(例如读显存的时候)需要一个假读命(Dummy Read),以使得微控制器的操作频率和显存的操作频率相匹配。在读取真正的数据之前,由一个的假读的过程。这里的假读,其实就是第一个读到的字节丢弃不要,从第二个开始,才是我们真正要读的数据。
7 e. }$ s, }; ^; s6 x: W- R$ ]% {2 [5 E+ M' S( H4 C7 h" }; {" J- Y
一个典型的读显存的时序图,如图所示:
2 C$ W4 i4 ~. o1 D0 T  B0 }. c: J
) D$ p' \. Y; n% I- q {S4Y]]CJ]NXMSJXKDZ%DOW9.png
5 S- @3 D! r. q7 W& V5 c$ r: |+ r8 `7 z* r- d7 @: V
可以看到,在发送了列地址之后,开始读数据,第一个是 Dummy Read,也就是假读,我们从第二个开始,才算是真正有效的数据。" B" u# X$ N: ]+ w! K" Q
9 A! E& o7 E  h9 y$ v; M
显存* g8 U2 |# k, Z
+ D5 P8 p3 v2 H
SSD1306 的显存总共为 128*64bit 大小,SSD1306 将这些显存分为了 8 页,其对应关系如表所示:3 L% W' j1 C4 g

: f8 \/ b( Y6 l% Y) Z 1BUUCI7~6ZRPS8(WQ_EJFY2.png ( e$ B: t( s/ s( ?# G

9 S+ ~7 |5 c) P8 `8 F; ISSD1306 的每页包含了 128 个字节,总共 8 页,这样刚好是 128*64 的点阵大小。因为每次写入都是按字节写入的,这就存在一个问: o9 [5 k  V5 \( g* X6 G4 ?# ?
! B5 [4 h3 B) G
题,如果我们使用只写方式操作模块,那么,每次要写 8 个点,这样,我们在画点的时候,就必须把要设置的点所在的字节的每个位都搞8 q0 q; y! z- |/ g
  S+ n- ?! t" D. b8 E
清楚当前的状态(0/1?),否则写入的数据就会覆盖掉之前的状态,结果就是有些不需要显示的点,显示出来了,或者该显示的没有显0 c" G, h" Q" \1 F4 W

2 u$ L- c9 v, l; W, W6 u示了。这个问题在能读的模式下,我们可以先读出来要写入的那个字节,得到当前状况,在修改了要改写的位之后再写进 GRAM,这样就
  j' x/ j3 [, b0 |
+ ?# ~* n9 W& @& \不会影响到之前的状况了。但是这样需要能读 GRAM,对于 4 线 SPI 模式或者 IIC 模式来说,模块是不支持读的,而且读->改->写的方式
5 [; A4 a3 H5 P1 L
7 k" U1 j) u$ J: Q; Y' n2 K速度也比较慢。
9 L. n5 Q  `7 h- v  y
( {6 Y$ Y4 K* G6 N我们推荐采用的办法是在单片机的内部建立一个 OLED 的 GRAM(需要 128*8 个字节),在每次修改的时候,只是修改单片机上的 GRAM(实际上就是 SRAM),在修改完了之后,一次性把单片机内部的 GRAM 写入到 OLED 的 GRAM。当然这个方法也有坏处,就是对于那些 SRAM 很小的单片机(比如 51 系列)就比较麻烦了,如果内存不够,那就推荐还是采用并口模式,这样可以节约内存。
: U% x" L5 \) k" n& `; B$ h& Z# V2 u
指令
4 Q; p" j. q( H" ]+ E6 s2 X& Q: ?# g9 \2 o  L2 c
SSD1306 的指令比较多,这里我们仅介绍几个比较常用的命令/ r" b2 {. g9 p3 x. Q; m

2 z! U" x5 ~- a8 K NHBHR@8WBNEFTASVI`2FK}J.png
: I, R2 h- L% N# S* B5 {/ x) W3 F2 n, w
第一个命令为 0X81,用于设置对比度的,这个命令包含了两个字节,第一个 0X81 为命令,随后发送的一个字节为要设置的对比度的值。这个值设置得越大屏幕就越亮。
5 Y1 }7 K; s- s/ w: _: T" n% `  j) B8 T4 F' V
第二个命令为 0XAE/0XAF。0XAE 为关闭显示命令;0XAF 为开启显示命令。
+ `) z: B+ W  g  S' k0 t9 ~5 _3 A5 q# ?
第三个命令为 0X8D,该指令也包含 2 个字节,第一个为命令字,第二个为设置值,第二个字节的 BIT2 表示电荷泵的开关状态,该位为 1,则开启电荷泵,为 0 则关闭。在模块初始化的时候,这个必须要开启,否则是看不到屏幕显示的。
. r% y) }, B% O! t) }/ Q, w6 l$ w6 O- e* X
第四个命令为 0XB0~B7,该命令用于设置页地址,其低三位的值对应着 GRAM 的页地址。
$ T8 s: F2 R5 K2 R- E
) I. r3 r& E' Z7 V第五个指令为 0X00~0X0F,该指令用于设置显示时的起始列地址低四位。0 g! f$ u* K( G# H) u- B& X5 r
- x7 V0 A0 q1 p
第六个指令为 0X10~0X1F,该指令用于设置显示时的起始列地址高四位。
" L# \7 y& d8 ]: H' p* \, R, }5 d$ Z5 s* e$ F; J
其他命令,我们就不在这里一一介绍了,大家可以参考 SSD1306 datasheet 的第 28 页。从这页开始,对 SSD1306 的指令有详细的介绍。3 m' ~- \1 C7 T7 M  H

" c, h% n1 h9 T8 }5 E5 [, i% G5 j, B$ z1 [. o% H! {
  D% W. r# X7 q* m  d# E, l* ^
0 R/ S6 e7 n( |% d
赞 收藏 评论0 发布时间:2022-6-14 18:32

举报

0个回答

所属标签

相似技术帖

官网相关资源

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