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

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

% e- F0 x) G& e, M$ Z! ^$ v* X- I
定义相关引脚输出高低电平的语句为:
#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)
. j9 g* R; U  n" ?: y/ B8 S$ ~( G
#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)
# o7 o! Y  j) b5 T- w* k
#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)

! \( [: [8 q, |3 L/ I6 q
#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)
1 M& t4 J8 l; N' W9 ?
#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)

. s9 o( N7 _1 F2 x
#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  X4 k2 r
6 b. s, z! `$ P8 g5 c4 [3 c& x7 ]: B( X
OLED屏的初始化函数为:
  1. void Lcd_Init(void)
    . B( T" ~( A& f% y* Q
  2. {
    2 M8 z- _( ?3 X& D
  3.   GPIO_InitTypeDef GPIO_InitStruct;! n; X- a+ R, q! d+ [, y8 w" v

  4. + o* ^' H$ D" U  l( W4 x+ P/ K0 v
  5.   /* GPIO Ports Clock Enable */  ^8 \7 i0 b! N
  6.   __HAL_RCC_GPIOH_CLK_ENABLE();& W3 R. V% j" g9 \
  7.   __HAL_RCC_GPIOA_CLK_ENABLE();% Y* u, b5 U, [9 S& ^! e* x
  8.   __HAL_RCC_GPIOC_CLK_ENABLE();3 W4 F! c4 ~* V6 j9 F$ X
  9.   __HAL_RCC_GPIOD_CLK_ENABLE();  y1 G. W; p; _4 i
  10.   __HAL_RCC_GPIOB_CLK_ENABLE();3 F+ c) T" B# C4 a
  11.          __HAL_RCC_GPIOF_CLK_ENABLE();+ r+ X* C7 K8 n3 s7 u% ?

  12. ! T# p# {9 M, E
  13.   /*Configure GPIO pin Output Level */
    & V0 N" T( w" o3 T4 z& H+ P( k( }
  14.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);
    . g+ s  W& K4 m+ M/ y- W- m
  15. 0 ?* |0 A* t$ w4 A+ G
  16.   /*Configure GPIO pin Output Level */2 x- s1 _8 z) e7 |# f- m
  17.   HAL_GPIO_WritePin(GPIOF, GPIO_PIN_12, GPIO_PIN_SET);. {8 y1 ^; l. X/ @3 G
  18. ' Y0 Y* ]9 t" K
  19.   /*Configure GPIO pin Output Level */+ l+ w8 u  G  k* q0 |5 m/ ^
  20.   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_SET);
    3 s. P0 k# K/ n
  21.   I1 P) P4 U+ Y6 ]
  22.   GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
    2 C3 s, _! A6 T. p$ Z* E
  23.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    2 n3 R9 t" c1 v) S9 ]
  24.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    $ U( l1 u' i+ Z3 P9 O9 _5 [4 _/ y) N
  25.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    : e$ O2 m- h* ~
  26.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    ( Q- q  x" g2 D8 z- H' u

  27. 9 y* o$ d% e3 M
  28.   GPIO_InitStruct.Pin = GPIO_PIN_12;
    . m; _  @8 A+ z' J0 g
  29.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    ; D- H' O& Q  B' \& }0 g
  30.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    2 Q" V* P: S' w
  31.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    % C* l0 Y4 h! ?, V
  32.   HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
    5 z/ w7 Q, I$ S6 k) t, L! Q
  33. 0 ^5 F: l* y0 e( m5 J1 W1 D
  34.   GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
    ! X* D6 }) ^, ?4 i$ ~
  35.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    . y6 j9 ^& d6 o  N& X
  36.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    & A2 Z" V6 \0 T; M9 K5 y
  37.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;6 I4 d( ^2 Q5 k0 Y, w! e: V
  38.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);' W9 S$ r' ^' t2 m1 m: Y

  39. ; N) U; ~2 V2 l; ~# n
  40.   OLED_RST_Clr();3 n/ T' O3 p' e% K9 k
  41.   HAL_Delay(200);0 F3 h8 C- Z2 u; P0 A; b
  42.   OLED_RST_Set();' A: x7 S7 j- O) e
  43.   HAL_Delay(200);) B/ C9 F! d9 W( z
  44.         
    " R3 Y8 ]- X! ]
  45.   LCD_WR_REG(0x11);# o% M, @( P4 y  o% b9 f- r# ~; y; o, y
  46.   HAL_Delay(100);) X. [4 Z" b# E) T; @$ m
  47. $ V* \* d+ h, l( W" X0 I; L- o
  48.   LCD_WR_REG(0x21);2 ^6 d  e$ X9 p1 G) h- D2 F
  49. : m" E; V4 s8 [/ \1 q( Q
  50.   LCD_WR_REG(0xB1);
    # [% y/ P! s" V6 R5 q6 w& v
  51.   LCD_WR_DATA8(0x05);1 a2 U$ _( E8 o' f) `! n
  52.   LCD_WR_DATA8(0x3A);
    ' _4 j, d, L, p4 A/ ~, Y
  53.   LCD_WR_DATA8(0x3A);
    ) o; u9 X7 Q+ p, V& [2 @, ]! Q
  54. ; S0 d9 |7 W! \/ W
  55.   LCD_WR_REG(0xB2);
    9 |4 [6 h: |' ~0 ]/ z6 F6 d- p3 U: [! o
  56.   LCD_WR_DATA8(0x05);
    3 \1 Q; E9 d+ v6 T) b+ d3 D
  57.   LCD_WR_DATA8(0x3A);! A7 W8 z! Z6 {2 A9 ^- V' J. m( G
  58.   LCD_WR_DATA8(0x3A);" S& f. V' j8 H  m4 k
  59. 1 X8 O* \" r! c7 }% j  p7 }: k  U
  60.   LCD_WR_REG(0xB3);( X. o8 j& ], a
  61.   LCD_WR_DATA8(0x05); + e. k+ ^# E3 X* b
  62.   LCD_WR_DATA8(0x3A);* d' u' G+ y  A! a2 V# ?- \
  63.   LCD_WR_DATA8(0x3A);1 k1 ~: c' ^0 j  D
  64.   LCD_WR_DATA8(0x05);
    0 p; C- {! |- G6 c5 z
  65.   LCD_WR_DATA8(0x3A);6 N% y: g# R& l# K9 Q8 k( g
  66.   LCD_WR_DATA8(0x3A);; c3 e0 y$ ~! {' {3 P
  67. 8 ]/ ?& q* T; G: m
  68.   LCD_WR_REG(0xB4);* T' K( x- L/ c! }3 N' v
  69.   LCD_WR_DATA8(0x03);
    7 C6 `5 Y1 A3 H
  70. 2 j, T3 z! L0 V+ u, r
  71.   LCD_WR_REG(0xC0);
      T/ y& t1 y! `6 N' h5 L! {
  72.   LCD_WR_DATA8(0x62);
    , M' p. I* K8 i3 Z2 M
  73.   LCD_WR_DATA8(0x02);; U% w' B1 U) O$ f  k
  74.   LCD_WR_DATA8(0x04);* c' l& L) j* l
  75. : O0 ~) Z2 ?* E+ Y: G. a9 P7 q% H
  76.   LCD_WR_REG(0xC1);' h3 G. C- p9 f) u: I
  77.   LCD_WR_DATA8(0xC0);$ J2 J: P4 q/ `% E1 d3 ~3 c, w

  78. ( b  B7 l3 C" E. D5 @# E
  79.   LCD_WR_REG(0xC2);* e+ L" S1 F% t" G; b9 G; N8 X- ^
  80.   LCD_WR_DATA8(0x0D);4 i, g# P7 y, q
  81.   LCD_WR_DATA8(0x00);- ^7 p8 c) M: z0 [2 d2 r' r

  82. - ?: [/ B6 l% ?5 ^- S0 C  M3 [
  83.   LCD_WR_REG(0xC3);  q5 F7 ~* T  G" b
  84.   LCD_WR_DATA8(0x8D);; F. `' E! b2 S4 S+ {
  85.   LCD_WR_DATA8(0x6A);  
    $ j' {* ~$ c2 P3 @8 `

  86. : W7 P% p/ ]" [! D5 w
  87.   LCD_WR_REG(0xC4);
    ; g( `3 X+ g7 N0 Y
  88.   LCD_WR_DATA8(0x8D);
    8 U/ F, a5 P/ [0 ?8 V7 X+ L
  89.   LCD_WR_DATA8(0xEE);  c& M2 B0 q4 I/ N: y5 Q9 n
  90. ; O5 y1 U+ F2 O5 K1 F
  91.   LCD_WR_REG(0xC5);  /*VCOM*/
    # v. Z( `, Z0 t* B; @, C3 S! I* l
  92.   LCD_WR_DATA8(0x0E);   4 N2 J; B7 J4 x  S
  93. - M: `0 A# d' W5 ^- |* m* j
  94.   LCD_WR_REG(0xE0);
    - x" ]  `! y7 C" {7 x3 _9 z
  95.   LCD_WR_DATA8(0x10);5 ~  R: i- F+ b. k6 A: q9 r# |* ^, [
  96.   LCD_WR_DATA8(0x0E);
    3 K8 I, a% m% K' m
  97.   LCD_WR_DATA8(0x02);: [- T3 B, v# O6 M' l7 N9 i; H* v# G
  98.   LCD_WR_DATA8(0x03);
    - y# b  ^- T5 D( [+ a
  99.   LCD_WR_DATA8(0x0E);' g3 F) s1 f0 L# {! H7 F5 u
  100.   LCD_WR_DATA8(0x07);* q2 p: m2 p" _% a
  101.   LCD_WR_DATA8(0x02);: ]$ \3 }( J8 B- T3 W' c+ B
  102.   LCD_WR_DATA8(0x07);5 f, x% S4 ^$ i6 o/ c) y6 l
  103.   LCD_WR_DATA8(0x0A);
    1 Y& v' t+ n; m  e4 B
  104.   LCD_WR_DATA8(0x12);
    0 ~1 w' I& c& f/ H" E* i! q) f
  105.   LCD_WR_DATA8(0x27);% ?$ G( |, K3 `& f$ G9 j+ ^
  106.   LCD_WR_DATA8(0x37);! j6 w- W  v! X0 J
  107.   LCD_WR_DATA8(0x00);
    8 A) {3 }- X' O+ w
  108.   LCD_WR_DATA8(0x0D);
    : B  q" t( s& |% a1 R
  109.   LCD_WR_DATA8(0x0E);' M# `+ D' S' x! r. i
  110.   LCD_WR_DATA8(0x10);
    5 R9 ~3 `2 t4 J6 r7 X

  111. 7 @$ Y0 `$ a1 K# E' h
  112.   LCD_WR_REG(0xE1);
    & q( e4 U; y! m6 R1 R: B5 j7 `9 Z
  113.   LCD_WR_DATA8(0x10);
    : j0 d% O- d1 [# ~
  114.   LCD_WR_DATA8(0x0E);) M- F0 P8 J' [7 [# F2 P
  115.   LCD_WR_DATA8(0x03);2 |9 j4 F8 q; ^6 ?  }# _1 k
  116.   LCD_WR_DATA8(0x03);' g! B( P7 R4 B8 h) n% ?, C
  117.   LCD_WR_DATA8(0x0F);
    ) u! ]' Y  L; X
  118.   LCD_WR_DATA8(0x06);" {# M- b' V( p% [  h- e
  119.   LCD_WR_DATA8(0x02);
    8 W; P( V$ A% Q% I+ `4 X
  120.   LCD_WR_DATA8(0x08);2 u! p$ n6 }3 v5 h! `7 J$ O
  121.   LCD_WR_DATA8(0x0A);% p% g5 ^! m: m/ T# l
  122.   LCD_WR_DATA8(0x13);
    $ Y( y" P/ m, i; T4 V$ ?
  123.   LCD_WR_DATA8(0x26);, J4 t. R) O" G: _' r& g2 f
  124.   LCD_WR_DATA8(0x36);
    + q! P2 m; O7 `6 S$ F6 p1 d
  125.   LCD_WR_DATA8(0x00);: t0 v" O$ r" |
  126.   LCD_WR_DATA8(0x0D);! J! H  y8 {9 [% n
  127.   LCD_WR_DATA8(0x0E);
    6 V  u0 \3 o9 Q; g$ M" R5 `( V
  128.   LCD_WR_DATA8(0x10);
    ' }$ |2 D/ R6 e1 @; P1 L8 z
  129.   LCD_WR_REG(0x3A);
    ; u* M' C$ Y. N  v+ z- B
  130.   LCD_WR_DATA8(0x05);9 b) Q- w+ A) g# ], R4 M
  131.   LCD_WR_REG(0x36);( V; L$ j& O8 F" I: U
  132.   LCD_WR_DATA8(0x78);
    , D& K" t) x+ x6 b; t/ T! x
  133.   LCD_WR_REG(0x29);: R  e5 K2 [: X, B: i' G
  134. }
复制代码
# w! t" Y4 O; L5 |+ e; W" T) l: d% X
图片显示函数为:
  1. void LCD_ShowPicture1(u16 x1,u16 y1,u16 x2,u16 y2)  p3 L! Y- P" E  |2 x) L2 l
  2. {
    2 H8 r+ N4 R$ V* G; w) ^
  3.          int i;
    4 ]5 z# \7 Z/ u! H! N
  4.            LCD_Address_Set(x1,y1,x2,y2);
    ; b$ }- m/ p* Z& l# P& x7 v
  5.            for(i=0;i<3808;i++)- L0 e. r- D0 U& q# d- _: h
  6.            {- E% J6 B: M6 s: }& t8 O
  7.                             LCD_WR_DATA8(gImage_jsj[i*2]);
    ; [2 O2 S% Q) c: A4 r1 z8 c
  8.                             LCD_WR_DATA8(gImage_jsj[i*2+1]);2 z0 e% D7 g1 O0 X) }! K1 E: E
  9.            }                      4 ]7 m% V$ c' B* v. P& X
  10. }
    . f- f. c/ z6 T

  11. % ^( q. ~" n7 y5 D% K% j! v9 ^
  12. void LCD_ShowPicture2(u16 x1,u16 y1,u16 x2,u16 y2)
      K& L( ^( _# S3 x4 b5 Z+ d+ B
  13. {
    9 p# M! y" g$ m! x9 i4 m9 Q$ ~# y
  14.            int i;: F; K8 ^: c0 A, F7 P, F; l
  15.            LCD_Address_Set(x1,y1,x2,y2);0 K: |+ k, k# _+ u( K" z/ [* n) F& J
  16.            for(i=0;i< 12800;i++)) x1 Z+ k+ g8 H( U1 z
  17.            {) H5 k, ]1 _% g& M7 C
  18.                             LCD_WR_DATA8(gImage_moled[i*2]);2 f* d4 a; }9 G6 O" i
  19.                             LCD_WR_DATA8(gImage_moled[i*2+1]);
    & u8 F6 o9 F5 I! O& a  K. a( u
  20.            }( I/ j7 ]5 \9 U% Z" x
  21. }
复制代码

$ a2 y  O: Y  [9 L# S0 \* }
实现显示测试的主程序为:
  1. int main()
      E* g; T6 |9 }# m
  2. {8 ?; W+ `0 {' p5 ^' P, [5 Z
  3.          float t=0;+ P, ^( y4 l+ ~: b- A. i
  4.          u8 i;9 Q0 N& P9 s- y  O2 r+ P
  5.          HAL_Init();
    8 q) m* F0 K) R2 Z- v
  6.          SystemClock_Config();  u! U5 u. }' ~& g" \
  7.          Lcd_Init();
    ! i  x4 s& E; D8 n+ l. Q
  8.          LCD_Clear(0x043C);
    3 a- _2 A2 d/ j# `9 g/ z
  9.          LCD_ShowPicture1(0,0,55,67);* O# x7 l1 K3 }* e9 x$ Y; A
  10.          HAL_Delay(1000);& R1 _& Q+ e. c( s0 {; e) b- b
  11.          LCD_ShowPicture2(0,0,159,79);
    ! E/ t3 x4 q# r" ~* b: G& v% T( f9 J- [
  12.          while(1);& s8 H5 u5 n4 p9 ?. x1 x
  13. }
复制代码
& G& g- a9 f7 d& B
1.jpg
显示计算机图标
. w# ?2 D2 m  v5 T2 [7 }2 z! O
2.jpg
显示彩色图片4 M6 c* d; }/ n% v9 u7 z

+ n4 _. b. j. A/ V工程代码:5 B, ?3 Z+ W- V; R

0.96_OLED.rar

下载

3.77 MB, 下载次数: 3

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

举报

0个回答

所属标签

相似分享

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