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

关于NUCLEO L496ZG的彩色0.96'OLED屏图片显示例程分享

[复制链接]
jinglixixi 发布时间:2020-8-18 14:09
OLED 屏有多种形式,既有单色、双色屏,也有彩色屏;既有I2C接口的,也有SPI接口的。
本次使用的是SPI接口的彩色屏,其分辨率是160*80点像素,16位色彩。
OLED 屏与AC7811的连接关系如下:
            SCL    ---PA5
             SDA    ---PA6
            RES    ---PA7
            DC    ---PD14
            CS     ---PD15
            BLK    ---F12

9 d) K+ Z9 C2 B- U+ ]$ S
8 l6 g- P. k7 |" r. P/ Y4 P
定义相关引脚输出高低电平的语句为:
#define OLED_SCLK_Clr()HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5, GPIO_PIN_RESET) //CLK
#define OLED_SCLK_Set()HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5, GPIO_PIN_SET)

2 V% G( c8 R' P2 @/ ~
#define OLED_SDIN_Clr()HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6, GPIO_PIN_RESET) //DIN
#define OLED_SDIN_Set()HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6, GPIO_PIN_SET)
% ^- n  x! n: E/ n1 \$ I- Y
#define OLED_RST_Clr()HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7, GPIO_PIN_RESET) //RES
#define OLED_RST_Set()HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7, GPIO_PIN_SET)

- {* o& K' n2 Z/ m$ w
#define OLED_DC_Clr()HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14, GPIO_PIN_RESET) //DC
#define OLED_DC_Set()HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14, GPIO_PIN_SET)
$ ~: C9 Q% ~. {; a
#define OLED_CS_Clr() HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15, GPIO_PIN_RESET) //CS
#define OLED_CS_Set() HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15, GPIO_PIN_SET)

; T+ ?; \, n( m
#define OLED_BLK_Clr() HAL_GPIO_WritePin(GPIOF,GPIO_PIN_12, GPIO_PIN_RESET) //BLK
#define OLED_BLK_Set() HAL_GPIO_WritePin(GPIOF,GPIO_PIN_12, GPIO_PIN_SET)
* ~& I( i: s' G

( w4 l+ H! _, Z+ v5 I* k
OLED屏的初始化函数为:
  1. void Lcd_Init(void)' P- M& q% `+ ^" m1 |. Z
  2. {: U5 K% p# B, r$ C
  3.   GPIO_InitTypeDef GPIO_InitStruct;. ?, ^$ \4 Y* u5 L. d

  4. 9 J# e3 o5 c0 g+ I) m
  5.   /* GPIO Ports Clock Enable */
    $ H8 A- v6 w4 X, m
  6.   __HAL_RCC_GPIOH_CLK_ENABLE();
    6 ?8 c2 [' s' Z/ r) r
  7.   __HAL_RCC_GPIOA_CLK_ENABLE();
    ! B7 t6 p  J+ L! C, ?. N
  8.   __HAL_RCC_GPIOC_CLK_ENABLE();$ f2 i; Z9 m  S; [* k" ?% O
  9.   __HAL_RCC_GPIOD_CLK_ENABLE();
    + u: [" w/ N4 D6 t
  10.   __HAL_RCC_GPIOB_CLK_ENABLE();
    6 H1 h) ^4 V) W  g+ s2 I" K
  11.          __HAL_RCC_GPIOF_CLK_ENABLE();
    " t8 d/ a9 w- Q4 t0 Z6 O; B
  12. : A  N# n' d: ~: z4 g. o! G3 q* z
  13.   /*Configure GPIO pin Output Level */
    ( v7 c* ^6 M$ ]+ j4 f9 H3 v5 D( J7 s
  14.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);2 v8 J! t- _1 N9 y( ?
  15. 0 D8 i  Z& N& m
  16.   /*Configure GPIO pin Output Level */
    " O& K; }2 l6 B8 J. o  r, w
  17.   HAL_GPIO_WritePin(GPIOF, GPIO_PIN_12, GPIO_PIN_SET);
    / C! a: S9 o( t1 J6 o8 ^# V4 {
  18. & H# E' u( u; Y
  19.   /*Configure GPIO pin Output Level */1 O% k6 b/ z/ A7 W
  20.   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_SET);) D$ v! u6 |) @% v' o  w" z
  21. 2 z) R% B0 ?/ {. D
  22.   GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
    ) }9 m1 t; I4 b4 t( ^* f" v! U
  23.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    ' V  F; s: H7 c5 }: A& \" R6 D
  24.   GPIO_InitStruct.Pull = GPIO_PULLUP;7 W4 O" E. M6 F. A
  25.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    ! p$ O4 s; P) b3 ]# P( w
  26.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    # b8 V/ O3 W. n
  27. 4 N6 o* B8 q3 S& l
  28.   GPIO_InitStruct.Pin = GPIO_PIN_12;9 }( D. @$ N6 X+ |  x* o/ n
  29.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;. q# @) N0 Q$ d6 y# v5 o
  30.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    * v; J! I" l9 Q( _2 t
  31.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;6 F+ v( U% o" U; E4 [) V; y
  32.   HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);( T- r1 Y5 d; L; F( v  `, @2 K" G2 ]
  33. , u6 n' A& v! X4 X
  34.   GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
    ; P- U* L: @" H+ y
  35.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    . x4 A, _8 N" ?) k; ^! g
  36.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    ( F' Q2 |) f9 }8 ?
  37.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;4 e( ~. n  b, E% G0 W/ z' j) K
  38.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);- X8 M  o/ T/ d; s+ W( w5 U2 K; e+ d
  39. - x4 r; V+ @( T" D
  40.   OLED_RST_Clr();4 i# `$ R8 a0 C1 S# {  G& e) i  [
  41.   HAL_Delay(200);
    % p1 l0 p& E+ K7 t% ~/ w) n/ H
  42.   OLED_RST_Set();0 R* s8 n" f& ]2 a4 B( {7 f# ?
  43.   HAL_Delay(200);
    , k8 x& Y  E. o) m
  44.         
      X4 K, n2 T2 D: d
  45.   LCD_WR_REG(0x11);
    . J+ G. h$ a+ E0 }
  46.   HAL_Delay(100);* y" Y3 t; y! T
  47. 8 j' p# H& o& ?9 L( x/ D: x
  48.   LCD_WR_REG(0x21);3 V4 o, u- N. L" _) ~- W# U

  49. 9 X7 f- Q+ B: W! j- `6 D
  50.   LCD_WR_REG(0xB1);! S9 x+ L( f& g' A; m3 U4 j, \6 j. c
  51.   LCD_WR_DATA8(0x05);) N7 P3 }; u5 X$ m  q. |% H
  52.   LCD_WR_DATA8(0x3A);) H& T/ W$ m0 u
  53.   LCD_WR_DATA8(0x3A);, C( e, W  ^: F
  54. 3 X0 g5 S! x5 x# t) ~
  55.   LCD_WR_REG(0xB2);
    " y3 ]/ q4 j* V- g5 O( q" d5 ]- P
  56.   LCD_WR_DATA8(0x05);2 ?2 l/ w) y$ l  q! ], ]5 S+ t% p
  57.   LCD_WR_DATA8(0x3A);
    ; |1 Q7 b+ x, g7 J1 P
  58.   LCD_WR_DATA8(0x3A);
    & ^# P( Q5 U# k3 H; M
  59. 0 ?; ?1 J% @  M( h7 x' c
  60.   LCD_WR_REG(0xB3);) l) y4 Q$ r0 q- E7 N" u) P
  61.   LCD_WR_DATA8(0x05);
    ) I5 y* w6 k6 o) z7 F, B
  62.   LCD_WR_DATA8(0x3A);
    # E! z$ w0 ~# V8 A* l/ }5 a
  63.   LCD_WR_DATA8(0x3A);
    . u; \4 Q! H( t  |# g- u" B5 ^. c2 P
  64.   LCD_WR_DATA8(0x05);! {2 Y/ x4 x. V, {  Y& i
  65.   LCD_WR_DATA8(0x3A);3 a3 X& k) W2 Z6 N; E, e+ U9 B
  66.   LCD_WR_DATA8(0x3A);/ I4 ]" M! r# P) o& p( v

  67. - i6 W$ v( o4 o- S: V4 z& H% o6 W
  68.   LCD_WR_REG(0xB4);8 _+ S# v$ |  ^8 o) ~! R
  69.   LCD_WR_DATA8(0x03);
    & h. u2 r7 `' m9 j+ I( J

  70. " O% `, R0 m4 w% g3 b0 q/ a
  71.   LCD_WR_REG(0xC0);/ Y1 {2 o5 O  G8 {/ U, M, `$ x# B
  72.   LCD_WR_DATA8(0x62);' F! o- s& G8 A5 w0 X4 R# W
  73.   LCD_WR_DATA8(0x02);+ ]0 \' X+ K* a% a2 q5 k
  74.   LCD_WR_DATA8(0x04);
    : h) l% w( K' V0 u% Y
  75. # M! a9 z1 F) C8 I/ Y! ^
  76.   LCD_WR_REG(0xC1);
    / I- n9 i( |0 M3 ]5 D& x, v3 {
  77.   LCD_WR_DATA8(0xC0);; n" N0 e" n3 C

  78. & b  \8 W% A7 }6 [
  79.   LCD_WR_REG(0xC2);
    " E9 b$ X. E1 K) D! r3 _! C
  80.   LCD_WR_DATA8(0x0D);6 I7 V6 u, @% U- B5 [
  81.   LCD_WR_DATA8(0x00);
    8 ]( r% K, ]* W1 @% `& ]' J* M) m1 g3 K

  82. 3 a6 q* U: n, u4 {
  83.   LCD_WR_REG(0xC3);' q3 u3 S7 {. _1 @% r5 X
  84.   LCD_WR_DATA8(0x8D);
    + @+ s9 m$ W: n. x) b
  85.   LCD_WR_DATA8(0x6A);  9 M4 s( s0 D/ ?

  86. ; ~  q( O% ]7 A; c3 F) _" t
  87.   LCD_WR_REG(0xC4);
    ) e9 A) I$ e/ E8 F: M2 Z0 ^
  88.   LCD_WR_DATA8(0x8D);
    # q" `5 p; r4 p2 y
  89.   LCD_WR_DATA8(0xEE);: K3 M8 T0 ?0 ~

  90. ) T2 ]: n9 w/ `7 Y$ {
  91.   LCD_WR_REG(0xC5);  /*VCOM*/% s0 ~- h8 Y& q6 m
  92.   LCD_WR_DATA8(0x0E);   5 C$ P6 I3 W3 J' y' `; Z$ d  A& X
  93. / B% S2 ]9 H# P! B9 r/ p- Q4 V
  94.   LCD_WR_REG(0xE0);$ f( }- \# d+ e: `& V5 b
  95.   LCD_WR_DATA8(0x10);
    ! Y) p% ~' g1 b, J0 {
  96.   LCD_WR_DATA8(0x0E);1 a# M' y) [4 v* \/ k2 U" i
  97.   LCD_WR_DATA8(0x02);- P5 q: q3 r8 ?  h
  98.   LCD_WR_DATA8(0x03);
    # i. F7 A6 V9 C+ Q+ I
  99.   LCD_WR_DATA8(0x0E);/ {% e$ g& V1 E. H7 m
  100.   LCD_WR_DATA8(0x07);$ H1 T* N! R# r: I1 J1 y
  101.   LCD_WR_DATA8(0x02);) `+ r+ K+ n0 f5 x1 m7 }
  102.   LCD_WR_DATA8(0x07);' m) m6 d5 d- l; A$ e
  103.   LCD_WR_DATA8(0x0A);
    / s6 \1 |4 h* t+ V/ b. j
  104.   LCD_WR_DATA8(0x12);
    4 ~% N" Y& E) W' }$ }1 d
  105.   LCD_WR_DATA8(0x27);
    3 _6 _$ Y0 H: I' d" L( v, z
  106.   LCD_WR_DATA8(0x37);
    5 F, l( c0 m5 M
  107.   LCD_WR_DATA8(0x00);+ P* D# c# w9 u+ R% i- N
  108.   LCD_WR_DATA8(0x0D);4 ^: l6 y7 s0 C! C) e% K. t: A
  109.   LCD_WR_DATA8(0x0E);
    % L1 O% P+ e% F
  110.   LCD_WR_DATA8(0x10);) \2 S+ t- H* N; [: f
  111. 5 Q! |9 s: B# Y8 T
  112.   LCD_WR_REG(0xE1);1 V2 `6 l3 o: L0 d. Z
  113.   LCD_WR_DATA8(0x10);& I4 s: s$ I/ N! S, N
  114.   LCD_WR_DATA8(0x0E);& U- \9 a3 ~3 t8 K: B* n
  115.   LCD_WR_DATA8(0x03);; G' k0 m& k& i" E
  116.   LCD_WR_DATA8(0x03);
    7 d0 z; ~- `) X+ D5 x
  117.   LCD_WR_DATA8(0x0F);
    - a5 M: ]) K7 \9 U% i) N2 _3 V  x* K" q
  118.   LCD_WR_DATA8(0x06);
    3 A7 i6 v3 F$ i" h9 H
  119.   LCD_WR_DATA8(0x02);. q+ ~. [9 P. \7 V
  120.   LCD_WR_DATA8(0x08);/ O) D2 e& k8 ]1 \
  121.   LCD_WR_DATA8(0x0A);! \' L" }/ t  f' j" O$ y$ {
  122.   LCD_WR_DATA8(0x13);  |2 v" e0 ~$ k
  123.   LCD_WR_DATA8(0x26);0 z: o- `& `$ E4 k) \6 e( c/ l: _
  124.   LCD_WR_DATA8(0x36);
    2 q. Z& S8 u- i% ]+ a
  125.   LCD_WR_DATA8(0x00);
    5 o3 o# b% n0 p
  126.   LCD_WR_DATA8(0x0D);. @5 p6 I! `5 m  i5 d5 u
  127.   LCD_WR_DATA8(0x0E);
      w0 c4 t& U. W9 g
  128.   LCD_WR_DATA8(0x10);, m- o# h, Q" z, ~  y$ {4 U( v
  129.   LCD_WR_REG(0x3A);
    ( T' d; Z3 S2 \1 j4 B! W, A
  130.   LCD_WR_DATA8(0x05);% k0 \0 [+ U! ?( C
  131.   LCD_WR_REG(0x36);
    5 A& s+ d! w& l; e3 O2 q# A' t5 D
  132.   LCD_WR_DATA8(0x78);( n* z, C1 @% m8 l  N3 g
  133.   LCD_WR_REG(0x29);7 r0 e8 ^; \0 t
  134. }
复制代码
2 `' j$ N, H3 X- `# d5 Z* J
图片显示函数为:
  1. void LCD_ShowPicture1(u16 x1,u16 y1,u16 x2,u16 y2), K3 D% V1 H4 ]) F1 @. m- e' u
  2. {
    $ I" x4 Q5 ^% Z9 y$ `5 L
  3.          int i;' l% I5 @5 R7 O* }& a  f
  4.            LCD_Address_Set(x1,y1,x2,y2);
    7 d3 `- U' R' L6 Z# n& j7 K- S
  5.            for(i=0;i<3808;i++)7 G- W$ r- p+ Z0 I& q9 o% Q% R
  6.            {' b+ T% h& G4 ^$ J
  7.                             LCD_WR_DATA8(gImage_jsj[i*2]);
    / g! X$ T& A8 I8 v6 W) m5 t
  8.                             LCD_WR_DATA8(gImage_jsj[i*2+1]);; q8 S  g# s5 E5 u  G
  9.            }                      2 {2 T) F1 a: i) a7 d0 U4 c& o! {+ w
  10. }% v1 Z0 {1 B& q+ X
  11. 9 t; b. V0 G) p" c' o3 }4 y% m$ o: j
  12. void LCD_ShowPicture2(u16 x1,u16 y1,u16 x2,u16 y2)$ w& I6 l8 k2 l/ ?% C1 W, S! ~: S
  13. {3 y6 L: Z# j1 R5 L; M% r
  14.            int i;; {. E+ q0 y! ]& P
  15.            LCD_Address_Set(x1,y1,x2,y2);  v* U/ x: `2 l; A+ s  s+ G( m! H
  16.            for(i=0;i< 12800;i++)1 {: l; x5 P& c" S9 y
  17.            {: ]3 w& J* [# {, _2 x
  18.                             LCD_WR_DATA8(gImage_moled[i*2]);. Z$ y. E  {' |3 q$ O
  19.                             LCD_WR_DATA8(gImage_moled[i*2+1]);
    / V& K5 d+ P4 z4 L% [
  20.            }" `. o/ e5 u( e2 A  Y$ z
  21. }
复制代码

4 r% Y4 e( \5 p8 n
实现显示测试的主程序为:
  1. int main()
    7 ~" }' O( M- E# t; |9 ~+ L
  2. {
    5 A1 x# T. Q# Q
  3.          float t=0;
    ' g" l7 t# ~6 D% }6 t# Y$ T
  4.          u8 i;
    6 C/ t% P) @# f: }; ?1 @
  5.          HAL_Init();  O4 X8 j6 \5 ~# z4 ~
  6.          SystemClock_Config();2 O& n6 i; g: ~  Y% L
  7.          Lcd_Init();; n6 ~) j& l# Z! G% J* |
  8.          LCD_Clear(0x043C);% @" i4 @, I1 D8 t6 ?
  9.          LCD_ShowPicture1(0,0,55,67);* s3 S* P: f7 E$ ^
  10.          HAL_Delay(1000);: t$ m- p+ Q9 L* m
  11.          LCD_ShowPicture2(0,0,159,79);& n6 N. T1 l* M4 Z$ M
  12.          while(1);3 j. i9 N& B* y! q1 ]
  13. }
复制代码
" R0 u+ Z6 R. Q& o* V  o. a; I
1.jpg
显示计算机图标
4 i/ |' n& M7 k% D# G8 |6 n
2.jpg
显示彩色图片& C! _( Q3 P( w

9 q: V- R1 M( b7 \: t; d* [工程代码:
7 m: s9 Q+ y# d+ o3 _7 M, l4 A

0.96_OLED.rar

下载

3.77 MB, 下载次数: 3

收藏 评论0 发布时间:2020-8-18 14:09

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版