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

【经验分享】STM32 OLED简介

[复制链接]
STMCU小助手 发布时间:2022-3-29 10:18
01. OLED概述% i! C5 M( J3 B% @- c9 b
OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(OrganicElectroluminesence Display, OELD)。OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
) M+ a+ V5 p$ d
/ q9 S: P$ \+ {LCD 都需要背光,而 OLED 不需要,因为它是自发光的。这样同样的显示,OLED 效果要来得好一些。以目前的技术,OLED 的尺寸还难以大型化,但是分辨率确可以做到很高。) [! @2 K$ Y1 V+ Y* X  k: b
# P4 S2 n- j* y$ A+ Q
02. OLED特性参数
$ M, _* B# k0 o* xATK-0.96’ OLED 模块是 ALIENTEK 推出的一款小尺寸(0.96 寸)、高亮、自带升压电路的高性能 OLED 显示模块,分辨率为 128*64,该模块采用原装维信诺高亮 OLED 屏,采用SSD1306 驱动 IC,该芯片内部集成 DCDC 升压,仅需 3.3V 供电,即可正常工作,无需用户再添加升压 DCDC 电路。  O5 z; j. r7 e

' ~# t, B. d: k6 b1 o模块支持:8 位 6800 并口、8 位 8080 并口、IIC 以及 4 线 SPI 等 4 种通信接口,通过模块背面的 BS1,BS2 焊盘,可以自行设置模块的接口方式。默认为:8 位 8080 并口。该模块各参数如表 1.1 和表 1.2 所示:
  c& X- h8 S0 T* ?% T0 ^/ |
4 Q$ Q1 }( Y' k/ }5 B! h3 p ]L05UF0K35JTEGMCHVFZK%J.png 2 U0 B! H! z* i* j+ t2 k& q& ~
L4Q1ZX5O`@OOQB(5)W5B2`C.png 0 ^: z- A4 S9 u, x0 t
1 E8 b: o3 O# y% {! e
ATK0.96’ OLED 模块支持多种通信接口,通过模块背面的 BS1,BS2,可以自行设置模块的通信接口方式,见表 1.3:
3 d+ u3 d1 v, Q( N
+ N: C, `6 {0 q 20200904151042418.png
2 a. N5 n  u' X* K  @; [# u+ j) b( O
03. OLED模块描述
- O! [. s* ^3 m) t* E9 x/ qATK-0.96’ OLED 模块是 ALIENTEK 推出的一款高性能 OLED 显示模块,尺寸小巧(27mm*26mm),结构紧凑,模块通过 1 个 2*8P 的 2.54mm 间距排针与外部连接,模块外观如图 2.1.1 所示:3 n9 M0 c/ V0 k" I5 K% ]7 ]5 ?

: H) y! c. \" U$ ` _O)V]%O2RIKC8@9}OWC)O`B.png
9 c; C6 G7 |- ]! k9 y
7 p; `9 q) o  I; |+ L- h% F( W该模块具有如下特点:( D/ f0 ]1 E7 R2 [
 双色可选,提供纯蓝色或黄蓝双色两种模块
6 Z$ Z7 s, `& e  w2 g 高分辨率,分辨率为:128*64
" T2 F6 E. E0 l 超小尺寸,OLED 显示屏为 0.96 寸,模块尺寸仅为 27mm*26mm
; r6 b& E  j, [; X% p' \ 多种接口方式,提供 8086 并口、6800 并口、4 线 SPI 和 IIC 等五种接口方式
  ~$ Z' [& @8 Y 集成 DCDC,无需外部高压,仅需提供 3.3V 电源,即可正常工作
/ T. }3 G: X8 v1 Q$ S: `6 D图 2.1.1 中,左侧的图片是模块的背面图,右侧的是正面图。
* A8 q4 x# ?) N
) o+ z% t% e6 P- B04. OLED模块原理图
+ k& I: a6 u, m$ l. @# w; e0 z
* _  w, k# V8 E0 n) [  n4 u IRH0D6U9JP$H[66SXXCK@}X.png
5 L, u9 L6 D+ x1 i
$ v, c' ~/ g4 c3 V0 c05. OLED模块引脚说明
5 a# F% U- `  U/ J1 G9 @2 i5 QATK-0.96’ OLED 模块通过 2*8 的 2.54 排针同外部单片机通信,各引脚的详细描述如下表所示# e" z- x2 J5 r1 w+ a  E# q; G& h

* q: L. P' P; s: k2 P9 d L}4{)B69_9JUWWOC@{@T{IF.png
, }) J! _# s! K! P) P' e0 q$ x1 v4 D7 X8 j0 X) k
0BE5%]]@%J~(PUK8CKOSPMY.png
0 T7 i1 ]  ~: G9 S6 i# W: V. N/ ?
温馨提示
5 `0 {: V. U7 R# ~: @  j5 [7 w% |! C) K! O5 q
模块在使用 IIC 模式或者 4 线 SPI 模式的时候,是不支持读操作的,所以如果你需要读操作,只能选择 6800 或者 8080 并口模式。模块默认是:8080 并口模式,大家根据自己选择的接口模式,来接线。
: w, h+ i' p/ K+ }4 s* k& n% i+ N5 B3 U! `' Y# o; h
06. OLED模块使用- R$ L: _( C1 g. j1 b
ATK-0.96’ OLED 模块的控制器是 SSD1306,支持多种接口方式,我们模块支持 4 种连接方式,这里我们介绍其中 8080 并口模式。
2 E! ]$ u6 A" V3 \5 O" {
' |2 P0 L  g8 k# j- t8 }/ e0 i2 \8080并口模式
5 h0 j9 R" Q- k. e3 J( X
1 e, I9 s# W+ k  I) _- C% [4 }ATK-0.96’ OLED 模块支持 8 位 8080 并口模式,总共需要 13 根信号线通信,这些信号线如下:1 t  R. {6 g" o6 f! ]/ i% _

) Z  R) {! D! f/ ]CS:OLED 片选信号。
4 v: K2 S8 S+ ]( sWR(RW):向 OLED 写入数据。
# X; h8 F! o& F$ `" g2 O/ @7 CRD:从 OLED 读取数据。
2 k% O8 F! H, y3 \. LD[7:0]:8 位双向数据线。6 F6 Z5 g" q9 V* v3 N0 i3 n) P
RST(RES):硬复位 OLED。
4 h, H; u  y: Q4 v+ J% x- g- s- S* dDC:命令/数据标志(0,读写命令;1,读写数据)。
- l1 ~" s' }2 i; Q# e1 ?  }; x模块的 8080 并口读/写的过程为:先根据要写入/读取的数据的类型,设置 DC 为高(数据)/低(命令),然后拉低片选,选中 SSD1306,接着我们根据是读数据,还是要写数据置RD/WR 为低,然后:3 {3 n" t" @+ u3 M2 i

5 S0 ?' u, |4 t# t. U6 r在 RD 的上升沿, 使数据锁存到数据线(D[7:0])上;1 u( z3 g. e! L6 F$ v, A0 n
0 [( ^6 V' O% F' Q) F# s2 ?
在 WR 的上升沿,使数据写入到 SSD1306 里面;! `1 j; Y- m3 }. o, S6 {, y

; o4 s) \7 c8 ^6 P9 KSSD1306 的 8080 并口写时序如图所示:
+ b# {- r8 K/ y% s  C" d1 [7 R7 n* h, s; P6 D
PFRY_B]]_DUUWCHFCHHO(6B.png
) h/ {; f* V/ [- ]& n! ]/ Q4 p- j: z1 {0 {$ ^: N4 F; v2 h
SSD1306 的 8080 并口读时序如图 2.3.1.2 所示:
$ _' H# H" t& b7 P, e# ^1 J2 K; p$ v# \; k
C)@3Y@%HI$B4K9JNOFY(P0Z.png
  `: G2 l) B/ T, ?1 k
# d1 A( N5 k  s" {SSD1306 的 8080 接口方式下,控制脚的信号状态所对应的功能如表所示:
. |8 H: w. n3 H
" g5 r8 Z7 b2 S. e2 {3 c3 | 4{RQQP_GIXRED{607VK38]S.png
/ {! q. s' \" x* b5 v* ]# m
7 ~4 [7 y0 T/ g注 1:H 代表高电平(VCC),L 代表低电平(GND),↑代表上升沿。) K1 H! F/ |+ Q# n. K! B- g
, i0 X" g% j3 `# R1 m, h$ J
在 8080 方式下读数据操作的时候,我们有时候(例如读显存的时候)需要一个假读命(Dummy Read),以使得微控制器的操作频率和显存的操作频率相匹配。在读取真正的数据之前,由一个的假读的过程。这里的假读,其实就是第一个读到的字节丢弃不要,从第二个开始,才是我们真正要读的数据。
$ P- X( ^* t8 b, q- G# d
; g0 V/ }, |4 H, P& r1 u一个典型的读显存的时序图,如图所示:9 e) l& ^4 W  M( z. o( J7 L$ I/ z

0 n' X+ `- y& V$ [0 P J]936{C0(YL05(6}X{Z({6P.png
3 W; J. i) Q; g. e! ~4 Z1 D* U3 e. |8 B+ k8 k& W
可以看到,在发送了列地址之后,开始读数据,第一个是 Dummy Read,也就是假读,我们从第二个开始,才算是真正有效的数据。9 x/ p" D7 r5 L# w! D8 S
, O: F/ P1 J6 S& X5 Z
显存, C4 b: i6 U- ~% `1 z) \

3 b4 r; j; A# ^+ H+ WSSD1306 的显存总共为 128*64bit 大小,SSD1306 将这些显存分为了 8 页,其对应关系如表所示:: o0 L+ V/ e) m5 a
& q$ o5 M. p: y; h1 S+ C  s( {# _& T
8DU{OM_DNGPX5]_70F_V$IB.png 5 G5 H3 _, e3 q# K0 `: w, l9 B9 P9 L
1 H$ T2 P4 G) ]. c! A! G
SSD1306 的每页包含了 128 个字节,总共 8 页,这样刚好是 128*64 的点阵大小。因为每次写入都是按字节写入的,这就存在一个问
* b; G/ B" I5 d3 x8 b) }0 a0 t9 m: r" b6 s$ t6 H4 l' t7 u
题,如果我们使用只写方式操作模块,那么,每次要写 8 个点,这样,我们在画点的时候,就必须把要设置的点所在的字节的每个位都搞
1 W; R9 v  i; `/ z- {( S  q" ~! k6 T! y- L
清楚当前的状态(0/1?),否则写入的数据就会覆盖掉之前的状态,结果就是有些不需要显示的点,显示出来了,或者该显示的没有显
# _* D6 ?6 _3 A. ^( l1 o
& d" v$ J, X6 g5 I4 W8 k* u示了。这个问题在能读的模式下,我们可以先读出来要写入的那个字节,得到当前状况,在修改了要改写的位之后再写进 GRAM,这样就  u+ V6 `  x4 j) u1 p* B! x
4 O/ ^$ i( k9 g! l" a4 j
不会影响到之前的状况了。但是这样需要能读 GRAM,对于 4 线 SPI 模式或者 IIC 模式来说,模块是不支持读的,而且读->改->写的方式
. X' ?! p2 c; ^9 V' \" K" B+ q( O0 l3 @# ?+ P
速度也比较慢。1 t$ v4 Y$ g$ M0 W) W, K
) @8 m/ H8 {+ W9 G, L/ `& q) E
我们推荐采用的办法是在单片机的内部建立一个 OLED 的 GRAM(需要 128*8 个字节),在每次修改的时候,只是修改单片机上的 GRAM(实际上就是 SRAM),在修改完了之后,一次性把单片机内部的 GRAM 写入到 OLED 的 GRAM。当然这个方法也有坏处,就是对于那些 SRAM 很小的单片机(比如 51 系列)就比较麻烦了,如果内存不够,那就推荐还是采用并口模式,这样可以节约内存。" P- r4 E" R; G* P$ `. `9 Y
! r1 U+ `% q" e9 d( y4 ]# F' F
指令
* g6 I) c7 k' p8 c7 l  B0 ?4 _4 f1 c* ^
SSD1306 的指令比较多,这里我们仅介绍几个比较常用的命令
4 S) C# \( N1 \0 Y" {& e$ {9 A  z7 e+ P( e# t: U
(1RNB@KEV13@5UO6}4{]1JR.png
# k0 q. H/ i6 }7 s5 z, a0 S, \4 T" v0 P0 f3 `9 e4 x
第一个命令为 0X81,用于设置对比度的,这个命令包含了两个字节,第一个 0X81 为命令,随后发送的一个字节为要设置的对比度的值。这个值设置得越大屏幕就越亮。
% O& O9 S) Y- |! X2 S8 a
# ~& r7 y; x0 i* V$ l第二个命令为 0XAE/0XAF。0XAE 为关闭显示命令;0XAF 为开启显示命令。3 [' R4 W5 U0 @9 A/ _6 O. X

# R- Q  A6 Y0 h* m+ W% Z. A2 |. E: A第三个命令为 0X8D,该指令也包含 2 个字节,第一个为命令字,第二个为设置值,第二个字节的 BIT2 表示电荷泵的开关状态,该位为 1,则开启电荷泵,为 0 则关闭。在模块初始化的时候,这个必须要开启,否则是看不到屏幕显示的。
( Z2 W. O. j5 o: @: `% P6 M3 U" O2 ?% |. j5 l$ Q
第四个命令为 0XB0~B7,该命令用于设置页地址,其低三位的值对应着 GRAM 的页地址。
; z* b; t& n) Y+ x" T* i8 B2 A" c" d
第五个指令为 0X00~0X0F,该指令用于设置显示时的起始列地址低四位。
% `4 w8 {! w* n" I8 C  E" I; ?3 V9 P6 o2 g! V/ p2 \8 u  H
第六个指令为 0X10~0X1F,该指令用于设置显示时的起始列地址高四位。% F, T7 J0 ?4 y) h+ _7 W

; }3 K' C& D3 {: M6 F: g$ o/ _2 z其他命令,我们就不在这里一一介绍了,大家可以参考 SSD1306 datasheet 的第 28 页。从这页开始,对 SSD1306 的指令有详细的介绍。
: Q! I! _3 b- z5 v7 q; v- F
) H. a# e( [! J$ c
0 M: P- {' ]$ a8 ~1 @" D3 t5 F2 s6 j1 U" {4 j$ d
赞 收藏 评论0 发布时间:2022-3-29 10:18

举报

0个回答

所属标签

相似技术帖

官网相关资源

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