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

关于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

4 M8 b' X9 i* l# }
( k" `* m8 g1 D
定义相关引脚输出高低电平的语句为:
#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)
$ h! D8 f! h2 |8 N; V. f
#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)

8 x. {, x' ?  Z! ^  w+ K* A
#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)
4 X/ N' A2 b' ^" i; D
#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)

7 M( ?4 s' q! l! ?
#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)
3 @7 Q/ l8 u$ Y& e2 ^; i
#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)
! B5 j0 P! d1 _' B9 u  o9 g

9 h' ^$ H0 k9 U' B
OLED屏的初始化函数为:
  1. void Lcd_Init(void)
    ; M* A" [0 C: l, E: H! U
  2. {
    9 w& }6 C: z, E0 r$ a
  3.   GPIO_InitTypeDef GPIO_InitStruct;
    : c' e& C3 E5 l- o3 v9 Y# x

  4. * V4 K* ~1 r4 s% J9 c/ i
  5.   /* GPIO Ports Clock Enable */: |' Q( K6 Q' ?& s; i
  6.   __HAL_RCC_GPIOH_CLK_ENABLE();) C1 w5 w* E9 H+ G
  7.   __HAL_RCC_GPIOA_CLK_ENABLE();
    ( c1 h. \, E" \$ v- t
  8.   __HAL_RCC_GPIOC_CLK_ENABLE();
    2 g! [4 d2 x# ?) \
  9.   __HAL_RCC_GPIOD_CLK_ENABLE();
    # R( ]- H8 I4 l& m3 s: O6 S; N/ S
  10.   __HAL_RCC_GPIOB_CLK_ENABLE();
    , |4 b# x& w: m# ]( @
  11.          __HAL_RCC_GPIOF_CLK_ENABLE();
    ) j: M- q5 p4 ]% [3 I1 e
  12. 5 c8 w7 O4 p( j, _  }3 V
  13.   /*Configure GPIO pin Output Level */2 E2 |8 l" F/ `
  14.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);
    3 }' X' E9 k1 @1 N

  15. ( ~8 Y( W$ I% ?# \5 q/ w
  16.   /*Configure GPIO pin Output Level */1 K1 B) T, v2 s
  17.   HAL_GPIO_WritePin(GPIOF, GPIO_PIN_12, GPIO_PIN_SET);
    - i3 _3 J! o! O. p: K( R6 Q

  18. ; J- A2 J% L5 ?/ H# W  q0 s
  19.   /*Configure GPIO pin Output Level */
    9 A. O' G3 e2 H
  20.   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_SET);) X; ^! n) t* r) ?4 |, m

  21. . C& M' [) K. K# k. `! T# W
  22.   GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;9 ?: y- n3 Y% ]7 |/ @% C. K
  23.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;) A* h" o' c, I- t
  24.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    5 b9 o' C! q& I6 ^* n. i
  25.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    # {- x6 ^. d- K2 z
  26.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);# \4 N6 j5 Z! H! Q; M. a

  27. ) N2 C4 j& |& b3 L! O! |& o8 c% K1 d+ K
  28.   GPIO_InitStruct.Pin = GPIO_PIN_12;( o( J/ J& z8 u. }: j" h+ A/ g% h* y
  29.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    / G8 i  x8 H: Z8 y8 |: G/ q
  30.   GPIO_InitStruct.Pull = GPIO_PULLUP;) w7 a8 h7 N7 u
  31.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;4 E! S4 ?3 \/ S! S) }
  32.   HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);, ?1 Q  r: h, D" ^4 M6 }) h

  33. 9 q' ~, |8 U) V
  34.   GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;) M7 {. j, i6 W. C2 ]! U6 h6 b
  35.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    ; ^+ N3 r3 T6 @2 X; p" a& [
  36.   GPIO_InitStruct.Pull = GPIO_PULLUP;  v" Q# A" z0 }7 g% Q
  37.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;  _4 i6 E5 g! Y# r3 w
  38.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
    * o  s& B; y3 u) U

  39. 4 o/ K& Q* A* a; N1 j" R
  40.   OLED_RST_Clr();8 [2 X$ Y3 Y0 P' s% a( s& F6 r  x
  41.   HAL_Delay(200);
      s2 }* b- ?" d
  42.   OLED_RST_Set();5 L6 b, B; r! L5 W3 r# v
  43.   HAL_Delay(200);
    & O9 m/ R- P+ j4 {) X0 d/ X2 j
  44.         
    $ z, D: e' U/ R$ F% M
  45.   LCD_WR_REG(0x11);5 ?  j: v+ Y9 b) ]# A  a7 g
  46.   HAL_Delay(100);- G4 s# L# r4 Y% T$ e$ u: `
  47. % O! _0 r1 Q) J# `' V
  48.   LCD_WR_REG(0x21);
    1 [( n0 p" c% }( J& i5 D8 m- X
  49. + e$ g# e* D; |- d' T7 }
  50.   LCD_WR_REG(0xB1);
    # v- q7 O- e9 c* K( B. V' Z
  51.   LCD_WR_DATA8(0x05);) G5 E1 t; }( w, e6 L
  52.   LCD_WR_DATA8(0x3A);$ A3 M' m+ n" g9 p3 u
  53.   LCD_WR_DATA8(0x3A);
    # i: X( j5 r! R$ X6 ]

  54. % n6 [' k# H+ ~. d# H: P) }
  55.   LCD_WR_REG(0xB2);+ ^0 x$ `. T- [9 R  x5 r; V
  56.   LCD_WR_DATA8(0x05);% x! e- J8 I; J" M* h% C+ [
  57.   LCD_WR_DATA8(0x3A);) a& C% a4 G7 {# F" h
  58.   LCD_WR_DATA8(0x3A);
    5 K( h3 }( X! S4 L  ]
  59. # w/ V$ \% W- Q% K' [& a9 K
  60.   LCD_WR_REG(0xB3);
    " {8 V% P) C2 r6 `  b5 P: |+ e
  61.   LCD_WR_DATA8(0x05); 7 Y& t5 V! F( e0 q' `6 ]8 Z
  62.   LCD_WR_DATA8(0x3A);
    8 }: Q+ v# g2 m* R
  63.   LCD_WR_DATA8(0x3A);
    & [  k" |% k* e; L1 w3 h$ |' u. }
  64.   LCD_WR_DATA8(0x05);
    9 r) z9 k! V2 x3 k2 u; X8 N
  65.   LCD_WR_DATA8(0x3A);
    . E1 f, t  m* ~; j  _, q
  66.   LCD_WR_DATA8(0x3A);
    / `  W2 `& |. I3 X3 r& n
  67. 8 {, C) c; P5 Q7 p' E* v$ H# m& C
  68.   LCD_WR_REG(0xB4);# F2 t  M3 n7 ~, X) z
  69.   LCD_WR_DATA8(0x03);
    3 y, S& n+ L, F9 r6 i4 V; l( ?- B
  70. # Q& ^4 S8 }4 z/ e# W; \
  71.   LCD_WR_REG(0xC0);
    . }( P! x; P, b
  72.   LCD_WR_DATA8(0x62);! |3 z6 F! S1 A
  73.   LCD_WR_DATA8(0x02);
    & x% ~1 X9 A( @& ?" n1 H
  74.   LCD_WR_DATA8(0x04);
    $ x; v3 m4 a4 B
  75. ) ?3 U; _$ }1 D; k* E4 }' E
  76.   LCD_WR_REG(0xC1);9 [* }7 i, J% U- D! r' l
  77.   LCD_WR_DATA8(0xC0);
    , w4 F6 {/ j3 u/ c9 o
  78. 8 ]4 g$ g4 f. T7 D5 k
  79.   LCD_WR_REG(0xC2);' W, b8 }0 v3 n1 c/ A8 ^  w2 i* {
  80.   LCD_WR_DATA8(0x0D);
    * t; O1 G2 h3 U
  81.   LCD_WR_DATA8(0x00);
    , U  ?! Q$ X$ B) `, {0 Y, S

  82. " K' \1 _" `- M. F) \
  83.   LCD_WR_REG(0xC3);! L' t# M# I' D
  84.   LCD_WR_DATA8(0x8D);
      E, Z, K2 M5 F2 m( h- ?- X' h
  85.   LCD_WR_DATA8(0x6A);  1 P+ j1 o, R0 {) ?- Y2 l

  86. 9 V' g% G. S. v8 z6 y! H
  87.   LCD_WR_REG(0xC4);
    * o" D4 {5 Q2 o* ^; ~
  88.   LCD_WR_DATA8(0x8D);
    3 t! s: L! t: M7 ^1 \: H; n, y' ?
  89.   LCD_WR_DATA8(0xEE);
    # ^6 K/ l( U9 w9 K: W" |' D& R4 {
  90. 4 E, {# D+ l4 h
  91.   LCD_WR_REG(0xC5);  /*VCOM*/
    ! ?* A  E: M$ e5 \; w: I6 Q, {9 G- V$ s
  92.   LCD_WR_DATA8(0x0E);   $ B% j, t/ P" n8 `5 V

  93. & N( o  L8 a& {* W: z
  94.   LCD_WR_REG(0xE0);
    ; e' W* `: W8 `  F7 V( h' ~
  95.   LCD_WR_DATA8(0x10);6 L6 J# ]) {0 ~. Y/ ~; d* ?7 @
  96.   LCD_WR_DATA8(0x0E);
    . |2 L+ N: ?& |# L4 W3 F: m2 w
  97.   LCD_WR_DATA8(0x02);9 [+ m" X+ R! ^+ x: g' R
  98.   LCD_WR_DATA8(0x03);: Z" n3 t4 L( g% |9 F, V# q4 D% ^7 B
  99.   LCD_WR_DATA8(0x0E);
    ( {+ f$ ~4 L2 {3 t$ q3 f
  100.   LCD_WR_DATA8(0x07);5 W6 ?% }( F; ?8 Y& T( p
  101.   LCD_WR_DATA8(0x02);
    , ~9 H1 b$ c( F) Q, L* W
  102.   LCD_WR_DATA8(0x07);
    * Z7 _( \/ J& d  c6 i8 {" f) n
  103.   LCD_WR_DATA8(0x0A);" h  U9 T; Z: \/ ~
  104.   LCD_WR_DATA8(0x12);
    4 H3 c0 i5 ?3 z& e6 c
  105.   LCD_WR_DATA8(0x27);& [- Q" T8 |) E8 K! k5 Z2 e
  106.   LCD_WR_DATA8(0x37);" I! j* k$ a6 \6 w. A" |+ y
  107.   LCD_WR_DATA8(0x00);8 A' y, C* {% g% Z1 H& {- d( O
  108.   LCD_WR_DATA8(0x0D);/ t& J2 v! d4 A1 Q
  109.   LCD_WR_DATA8(0x0E);; Y  {: W! a; {7 Y( O
  110.   LCD_WR_DATA8(0x10);6 n% B( |" \! H  b! {1 n  l
  111. 1 L6 V  E. K) B" t
  112.   LCD_WR_REG(0xE1);
    * f6 l8 j, ^* G5 S7 u5 E
  113.   LCD_WR_DATA8(0x10);
    $ t; D' j( \, ^, \" u
  114.   LCD_WR_DATA8(0x0E);
    3 @5 \% N; N! B8 [' B; r
  115.   LCD_WR_DATA8(0x03);1 I0 _2 q- R* H% A3 R+ [* k  o
  116.   LCD_WR_DATA8(0x03);. e9 `( H: P) c; o$ Z  _  o. i6 T
  117.   LCD_WR_DATA8(0x0F);5 _* @6 V  P( e8 M- O1 R1 G
  118.   LCD_WR_DATA8(0x06);: T1 j% a0 u& F1 q0 ^1 `+ c
  119.   LCD_WR_DATA8(0x02);6 I& m: O$ A$ g$ f
  120.   LCD_WR_DATA8(0x08);  u) x1 k+ V% O: c  y  r9 M
  121.   LCD_WR_DATA8(0x0A);
    " S* w. B9 O7 t& @6 y) S: z
  122.   LCD_WR_DATA8(0x13);
    3 F$ j1 m1 l6 {: M  J
  123.   LCD_WR_DATA8(0x26);
    ' }* L& C/ ]' [7 ]7 X6 P4 p* k- k
  124.   LCD_WR_DATA8(0x36);
    3 Y5 H4 H4 K2 A% S# w- o
  125.   LCD_WR_DATA8(0x00);( r9 @" a$ n0 N8 z$ N; y
  126.   LCD_WR_DATA8(0x0D);
    2 H8 g7 B8 e3 S5 q
  127.   LCD_WR_DATA8(0x0E);
    ; N) z5 ?+ N1 Q3 ?
  128.   LCD_WR_DATA8(0x10);4 [3 T- O6 i( S! U+ r5 I2 ?
  129.   LCD_WR_REG(0x3A);: w( W  f6 i/ s+ a! o
  130.   LCD_WR_DATA8(0x05);$ E, V- g% E; B
  131.   LCD_WR_REG(0x36);6 ~% S( Y2 K0 t
  132.   LCD_WR_DATA8(0x78);* i6 ~/ u$ l) n
  133.   LCD_WR_REG(0x29);+ F; x0 M8 }' b5 M6 Z5 c  z2 l9 N: f
  134. }
复制代码

4 d$ Y4 A% a3 d5 g+ d2 G9 C
图片显示函数为:
  1. void LCD_ShowPicture1(u16 x1,u16 y1,u16 x2,u16 y2)
    4 q6 j9 D6 K/ q5 q( A
  2. {
    $ x4 |0 e* ~- v, \5 y
  3.          int i;1 a4 Y1 S, {- F% g6 H- j6 W" `
  4.            LCD_Address_Set(x1,y1,x2,y2);* n0 M1 L- n2 A
  5.            for(i=0;i<3808;i++)
    # n1 P$ s2 Y3 H$ g$ b2 ~/ D+ x
  6.            {9 ]9 u0 F6 y" b" i- V: p3 E3 ?
  7.                             LCD_WR_DATA8(gImage_jsj[i*2]);
    1 u5 f. f' S$ O- a9 x  L
  8.                             LCD_WR_DATA8(gImage_jsj[i*2+1]);
    ! L& X6 `5 z% \2 {
  9.            }                      / @- {4 V% h7 O3 t# Q
  10. }+ j1 k" A2 L' a+ @9 `
  11. & r) B8 ]7 W( p2 F! r; J" P* N
  12. void LCD_ShowPicture2(u16 x1,u16 y1,u16 x2,u16 y2)3 X. |( O) D8 C$ C
  13. {. F3 i8 U+ i; A) Z, W( m
  14.            int i;
    , B4 X" U7 c) y# z( j
  15.            LCD_Address_Set(x1,y1,x2,y2);
    - w# ~- c- U* c9 S4 J
  16.            for(i=0;i< 12800;i++)
      G) n! I/ I- f3 c! t' N: w$ b
  17.            {
    ! N- N5 p7 }1 z. `
  18.                             LCD_WR_DATA8(gImage_moled[i*2]);; {7 w5 C( w$ J- U. |* F  P! i4 j: n0 i
  19.                             LCD_WR_DATA8(gImage_moled[i*2+1]);
    3 N; O2 Y/ t+ N: |+ d# w
  20.            }
    ! [5 r, Q" @- s# M2 e
  21. }
复制代码
2 b% r/ M' y" M- G% p& c
实现显示测试的主程序为:
  1. int main()/ A8 Z1 D* l  x- j
  2. {
    7 _$ q( j8 z5 z5 p
  3.          float t=0;2 P1 r, ?& X4 s
  4.          u8 i;
    7 [: E) D* X" c% G: l; w0 W* h- `
  5.          HAL_Init();) H0 S- ^0 ?4 \: t. Y! g$ s) p
  6.          SystemClock_Config();
    1 V% ^0 B4 a1 ~! D) U9 @
  7.          Lcd_Init();
    $ R& R. j2 R9 _$ }$ N) U
  8.          LCD_Clear(0x043C);% l; x& a/ ^; I8 Y$ Q! j$ H
  9.          LCD_ShowPicture1(0,0,55,67);% q4 G! C7 ?2 I& O- E3 J7 _
  10.          HAL_Delay(1000);* F! b7 u7 A" `- u
  11.          LCD_ShowPicture2(0,0,159,79);) y! c: H# t9 ]
  12.          while(1);0 ?  d$ ]# W  u' }
  13. }
复制代码
$ U# ~$ b( G0 U* `# ?1 W& O; U
1.jpg
显示计算机图标
# G7 x! w! h1 t5 Z$ Y4 b' D: b
2.jpg
显示彩色图片
; f) B! Q2 T' ]# }4 E! j5 a, j( e: L: Y) j0 g5 J2 G+ T' U* W8 e
工程代码:; a: b) ?) r' E( H3 p

0.96_OLED.rar

下载

3.77 MB, 下载次数: 3

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

举报

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