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

关于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
$ j3 d0 A1 ~- ~

4 V/ D7 z6 [& d5 u
定义相关引脚输出高低电平的语句为:
#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)

) ?! n+ ]5 P- z+ ]0 v7 i$ B( S
#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)

$ k$ c3 F$ Q8 O0 I5 N
#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)
) |5 u# A' o% `  ]
#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)
  j" G) i% S; B  D
#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)

6 T1 T4 A/ Q9 P: a
#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)
2 Q( {% {; z$ a0 k

/ o4 Z7 N; G* j$ i) {
OLED屏的初始化函数为:
  1. void Lcd_Init(void)
    ) O, o( r3 R' a! y: O7 V( Z1 l. w
  2. {8 @+ v& x, C: {* q
  3.   GPIO_InitTypeDef GPIO_InitStruct;
    ' w) U, O( K2 F$ T. X
  4. % J9 ~' X: a6 T! z6 {
  5.   /* GPIO Ports Clock Enable */3 k. x' L/ z$ y2 L. s
  6.   __HAL_RCC_GPIOH_CLK_ENABLE();6 U7 f+ \0 G8 y5 o9 Q' X# f
  7.   __HAL_RCC_GPIOA_CLK_ENABLE();
      o7 C! i6 x7 e' N. ?& {
  8.   __HAL_RCC_GPIOC_CLK_ENABLE();9 y4 G! i" p9 x& X  b
  9.   __HAL_RCC_GPIOD_CLK_ENABLE();
    - n% V) b& x1 w4 f/ W* o" ]9 D
  10.   __HAL_RCC_GPIOB_CLK_ENABLE();
    - }/ ?4 z! @0 o0 M/ j, K
  11.          __HAL_RCC_GPIOF_CLK_ENABLE();8 R1 ]3 u4 k. P2 ]0 k9 F

  12. 9 g5 r' c- t! i
  13.   /*Configure GPIO pin Output Level */
    9 z3 q1 ^1 k  Y) l4 a7 C
  14.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);
    ! K; f5 d# w! X! q$ G4 y

  15. & i) B' h5 Y8 A# G2 |
  16.   /*Configure GPIO pin Output Level */
    ( Y9 J- m4 j  y) B+ o  C
  17.   HAL_GPIO_WritePin(GPIOF, GPIO_PIN_12, GPIO_PIN_SET);
    - |8 P! z  z0 L2 d$ C* X, o8 h
  18. 2 {  B4 l; S+ ?/ Y3 Z
  19.   /*Configure GPIO pin Output Level */
    / x9 g6 `4 l7 s& i8 v
  20.   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_SET);% Y" U+ H6 j6 s  F1 u
  21. # D7 O) M6 o7 O  ]  S  }* f
  22.   GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;% t. t6 X% ~( f
  23.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    * l3 g, j5 V. B6 k% n1 C( k
  24.   GPIO_InitStruct.Pull = GPIO_PULLUP;% D% {: k0 s* V  g' P# j. }; s3 Q
  25.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;  O2 Z9 u# R! _2 Z5 ]. ]
  26.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    2 ^5 e/ P/ T; J3 \* m- O* j6 f

  27. ! g8 V- p/ H" n- u
  28.   GPIO_InitStruct.Pin = GPIO_PIN_12;) t% m! W7 x  [" f
  29.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;" H% I: d4 g0 v: w
  30.   GPIO_InitStruct.Pull = GPIO_PULLUP;' F+ l  W7 x" W' O: ~
  31.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;% i' E8 z3 x" y7 _
  32.   HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
    . ^- t) f8 Z/ M
  33. 7 P' k8 I+ {8 H$ f1 B% f5 z4 K
  34.   GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
    8 @0 ]$ f% O4 y8 N" R; R% H9 Q
  35.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    5 q. q& a2 [1 [4 j- k
  36.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    3 m* k& N5 d- g
  37.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;3 `% V" Y: C& P3 P' A  b
  38.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
    ( k( E' K/ V. B1 I0 n2 @

  39. 5 F8 o) L0 ]/ \8 h. X
  40.   OLED_RST_Clr();8 T2 G6 t; a6 B$ |) H
  41.   HAL_Delay(200);# l1 y0 W/ M! W: k
  42.   OLED_RST_Set();
    ( p, M" u9 a8 Y& I( D! V: ?2 E) ^
  43.   HAL_Delay(200);  L8 O( `, g6 ?* h9 p6 p, T* T$ N
  44.         
    " n# B+ ?+ A, i" Z) E/ b# F" K% `7 l
  45.   LCD_WR_REG(0x11);
    ) Y9 I) Y) {. l1 C6 w, \
  46.   HAL_Delay(100);
    9 Z" N# X5 ~5 t1 R: o, |+ t/ j
  47. 6 W% @; _6 k) x8 f( V
  48.   LCD_WR_REG(0x21);" V! n8 ]) J4 h4 i# y" r
  49. : W' M' ~. G, p' p' s
  50.   LCD_WR_REG(0xB1);8 U1 k/ w" Y# K. l: g% A" F
  51.   LCD_WR_DATA8(0x05);' L$ {. s; x2 `- |. H1 I" h
  52.   LCD_WR_DATA8(0x3A);2 g1 F0 f. E1 }/ X$ Q# D1 {- U( [- X8 b; K
  53.   LCD_WR_DATA8(0x3A);
    ' A, _, M# I7 @0 z

  54. . M1 n" A% G. o( b
  55.   LCD_WR_REG(0xB2);
    , h- i; F  f( C2 P! _
  56.   LCD_WR_DATA8(0x05);
    7 F0 T3 B( \: `% b
  57.   LCD_WR_DATA8(0x3A);
    8 `' X4 z) Q/ E/ K
  58.   LCD_WR_DATA8(0x3A);( h3 N' v* |5 S$ r  j2 c

  59. : {& l$ n3 e: m- ?1 ]8 c
  60.   LCD_WR_REG(0xB3);; b+ F% _7 t* W0 v  I# W, @' u
  61.   LCD_WR_DATA8(0x05); 3 O* C0 K9 y# A2 `: R/ B
  62.   LCD_WR_DATA8(0x3A);
    7 \6 c* f. w7 Z' K$ |9 a  h
  63.   LCD_WR_DATA8(0x3A);
    : E" J/ c& y0 K9 H( Y2 J0 D
  64.   LCD_WR_DATA8(0x05);
    - ~+ H, G8 M3 o
  65.   LCD_WR_DATA8(0x3A);- w1 q4 e; |3 l4 h4 s
  66.   LCD_WR_DATA8(0x3A);* r- ?$ g3 {# u1 _
  67. ) }) w- m4 w" z: X  B$ h$ P3 C. A1 d5 i
  68.   LCD_WR_REG(0xB4);& A$ G4 l8 s6 [8 }
  69.   LCD_WR_DATA8(0x03);
    ; }4 O$ \+ `; }( l' S

  70. 0 X# H9 q* J% l. f0 W
  71.   LCD_WR_REG(0xC0);8 ~* [; C- |& r' F# `3 U
  72.   LCD_WR_DATA8(0x62);4 F) _* D0 y3 k/ }9 U
  73.   LCD_WR_DATA8(0x02);
    / H# s$ V8 R4 O  Z6 e
  74.   LCD_WR_DATA8(0x04);' J3 b' W- q/ W* v3 ^
  75. 8 Z/ g; `+ f" [" ]" H- a
  76.   LCD_WR_REG(0xC1);( q# J0 H. v) c6 K
  77.   LCD_WR_DATA8(0xC0);: G+ s* ~9 F( i3 Q3 D/ S* E( q

  78. 5 g% f, O% g& r1 ~* t% V* E
  79.   LCD_WR_REG(0xC2);
    3 b/ d2 u$ T) Z2 s
  80.   LCD_WR_DATA8(0x0D);% P; Y; t0 Y5 o' B7 C( t5 V; [
  81.   LCD_WR_DATA8(0x00);3 t/ t$ K  {; q; _

  82. 4 Q- O8 p  [' ~3 H( @
  83.   LCD_WR_REG(0xC3);
    ( \4 j, {( x9 W$ m& G
  84.   LCD_WR_DATA8(0x8D);% `" j4 n: w, y7 A9 e
  85.   LCD_WR_DATA8(0x6A);  
    4 Q$ q' p* Q# n  E9 x
  86. * T* Q* ]0 `! t: G3 ~: S+ j
  87.   LCD_WR_REG(0xC4);3 L. S' w1 n0 \* m$ N0 ~% y5 v! Z
  88.   LCD_WR_DATA8(0x8D);( X+ [$ K+ M$ ?( F' f
  89.   LCD_WR_DATA8(0xEE);. z0 a; |- ~1 d1 f: A

  90. ( Z1 j0 c! Q, q2 _
  91.   LCD_WR_REG(0xC5);  /*VCOM*/
    ' J) Q- L8 `# N$ u
  92.   LCD_WR_DATA8(0x0E);   9 @( h. t9 K$ f, r, q2 x
  93. # X7 ~) J; ?# s0 A/ ^
  94.   LCD_WR_REG(0xE0);
    ) u% b9 M1 L2 D- p
  95.   LCD_WR_DATA8(0x10);' }: B7 }  b9 |1 G* @
  96.   LCD_WR_DATA8(0x0E);7 q# M; D7 t( K  ~7 F
  97.   LCD_WR_DATA8(0x02);% `$ y1 y0 v( N1 C$ t" k3 n/ ^+ o
  98.   LCD_WR_DATA8(0x03);, S/ w; E: `5 [* i( K
  99.   LCD_WR_DATA8(0x0E);
    & ~$ Z7 ?+ G; `9 A( v
  100.   LCD_WR_DATA8(0x07);! O0 e/ b& ^1 u
  101.   LCD_WR_DATA8(0x02);; G" q4 k0 v! E* `
  102.   LCD_WR_DATA8(0x07);7 Q: J8 g0 j0 M( t5 `, Y$ Z
  103.   LCD_WR_DATA8(0x0A);
    ) N1 M7 \! R: ]+ X
  104.   LCD_WR_DATA8(0x12);4 L' A8 q* V. I+ n
  105.   LCD_WR_DATA8(0x27);: D/ X0 ?, U2 q" a: ^
  106.   LCD_WR_DATA8(0x37);
    & T& X5 K- M  B" d! H1 s( S. j# G
  107.   LCD_WR_DATA8(0x00);
    . b3 h1 F8 Z. }5 V
  108.   LCD_WR_DATA8(0x0D);/ N% H) ]  z- P8 W% ~: a) b4 U
  109.   LCD_WR_DATA8(0x0E);0 ~2 K# V2 K1 w. q+ k3 E$ s
  110.   LCD_WR_DATA8(0x10);
    / O! Y) K% M  B8 {* n4 S
  111. - F$ x) d+ F- H" p: z
  112.   LCD_WR_REG(0xE1);$ Y3 R+ E' y' Y; \9 Y; l
  113.   LCD_WR_DATA8(0x10);
    ; g/ j5 P% }6 ?8 X
  114.   LCD_WR_DATA8(0x0E);
    8 Q, K3 n; d- j9 D8 R+ r; j
  115.   LCD_WR_DATA8(0x03);8 U$ w. U4 `" ^% X$ Q
  116.   LCD_WR_DATA8(0x03);
    ) `6 r# C5 X. V: }
  117.   LCD_WR_DATA8(0x0F);# h4 C7 T9 s& P" g  M; f5 h
  118.   LCD_WR_DATA8(0x06);
    1 z& D, W  U+ G9 Z& y
  119.   LCD_WR_DATA8(0x02);9 y" ^* H. M, X5 h2 I0 I
  120.   LCD_WR_DATA8(0x08);* D& l! S  [- W. v/ l
  121.   LCD_WR_DATA8(0x0A);
      @& `8 t5 j; U! E9 L
  122.   LCD_WR_DATA8(0x13);
    1 Y- v' x1 O7 v& j. ]
  123.   LCD_WR_DATA8(0x26);
    2 Y/ j& S* A, `% |& X. [
  124.   LCD_WR_DATA8(0x36);
    ! N; a- m# ^$ T5 a7 E5 v1 V
  125.   LCD_WR_DATA8(0x00);; P3 ^  X: R* f7 L: c" f# V! n
  126.   LCD_WR_DATA8(0x0D);
    2 r" p" M% C2 W& K2 |7 g# i
  127.   LCD_WR_DATA8(0x0E);
    2 x& z7 s6 V/ `. @
  128.   LCD_WR_DATA8(0x10);
    # T5 i2 \$ T3 C. W) D  ?# _0 v
  129.   LCD_WR_REG(0x3A);
    ' Q3 {8 W8 M: F1 _" B
  130.   LCD_WR_DATA8(0x05);
    : C9 @* G7 G8 L) I# m( \( ?4 c
  131.   LCD_WR_REG(0x36);7 D0 c, d! G! T" I  t
  132.   LCD_WR_DATA8(0x78);7 m* F, [3 B8 ?3 E8 T' z
  133.   LCD_WR_REG(0x29);! q) a0 c4 a" P1 y
  134. }
复制代码
+ s8 R6 L+ g' {8 k$ `' n
图片显示函数为:
  1. void LCD_ShowPicture1(u16 x1,u16 y1,u16 x2,u16 y2), w+ M9 t0 n6 R1 e4 i1 @% N6 K) ]
  2. {4 A3 u, O4 A3 v) b( j
  3.          int i;
    ) [1 o# P0 Q( w7 G5 i+ X
  4.            LCD_Address_Set(x1,y1,x2,y2);
    $ I' j0 E% B. @. _7 `7 h: u
  5.            for(i=0;i<3808;i++)5 ]2 e# f, I9 g+ K
  6.            {
    ( s7 O1 ?& Q* D
  7.                             LCD_WR_DATA8(gImage_jsj[i*2]);
    8 u4 Z9 M/ A8 _
  8.                             LCD_WR_DATA8(gImage_jsj[i*2+1]);
    " x8 a2 l0 z, N8 L; m# l4 Q7 C5 Y% J4 I
  9.            }                     
    : h3 {% d: F, |
  10. }4 a' ^0 s' M; m2 R8 z+ d
  11. 0 i0 S8 P( E5 s! W( B* T
  12. void LCD_ShowPicture2(u16 x1,u16 y1,u16 x2,u16 y2)
    . s) M3 G8 ^% x3 C  j# v
  13. {
    - m  o+ @6 V/ Z
  14.            int i;3 Q! V# K# t- U/ r3 l
  15.            LCD_Address_Set(x1,y1,x2,y2);
    - P! }+ M. |. B$ f9 J. ~0 b
  16.            for(i=0;i< 12800;i++)
    0 _. ^$ T9 N) T6 F& b  [
  17.            {
      v( Q# Q8 G% u% x* ?# N9 [; Y5 T
  18.                             LCD_WR_DATA8(gImage_moled[i*2]);) P$ D$ _6 k  m6 S( f! L
  19.                             LCD_WR_DATA8(gImage_moled[i*2+1]);
    9 j; q+ e- i( [" t+ w3 O  z
  20.            }
    & P4 S* n9 K8 j" }
  21. }
复制代码
/ n- }' m: M9 S) y' l# h* i
实现显示测试的主程序为:
  1. int main()
    ! m# w; b: e$ \3 @2 }" l  ?
  2. {
    / i) V) ^) Q7 t
  3.          float t=0;7 J9 {: t) G4 v% _0 M
  4.          u8 i;& V' Q+ u( C2 ]( T3 w0 Z
  5.          HAL_Init();6 |' j- B# @& F8 K+ V; y# a
  6.          SystemClock_Config();; N7 y# j* C* ~# d6 G5 g
  7.          Lcd_Init();
    % k3 W5 Z: U: Q* D+ S) n% S+ h
  8.          LCD_Clear(0x043C);: d; X( `" q1 }
  9.          LCD_ShowPicture1(0,0,55,67);' H5 q2 {3 C/ L8 F* ?) t
  10.          HAL_Delay(1000);
    . n/ z; j- Z2 c2 j. c
  11.          LCD_ShowPicture2(0,0,159,79);1 C* U7 w1 z! ^# \5 Q# K
  12.          while(1);( ^4 G7 {1 t. h$ h
  13. }
复制代码
% E  W5 m# e% Y$ q
1.jpg
显示计算机图标

6 a) ~: |/ M% ?4 t
2.jpg
显示彩色图片5 Q& n' |. Z2 z+ \0 P

# [: c2 G; I1 `工程代码:9 P/ j1 `. d. B# F# c! c

0.96_OLED.rar

下载

3.77 MB, 下载次数: 3

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

举报

0个回答

所属标签

相似分享

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