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

关于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
0 ^3 d) C2 u( z8 X- s
; b$ ^. C! w2 |( Z/ l' ?
定义相关引脚输出高低电平的语句为:
#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)
6 o  e* _# r" I  ^4 ^
#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)

% ]' V5 ^7 v" ?- P
#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)

: X$ T7 b6 C/ x0 J0 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)

/ k3 V& y- Y, O" r3 Y
#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)

% U" d: |& S. p4 t, q7 o1 _
#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)

" w! F) `, C- B# k- V' {: A! C8 \  V% x+ Y! v5 N( L/ O
OLED屏的初始化函数为:
  1. void Lcd_Init(void)
    ) H+ v& _  [4 b
  2. {" o2 y* K/ F$ P4 M/ S' G; W
  3.   GPIO_InitTypeDef GPIO_InitStruct;
    " o/ Z, G' w  J, U3 L" a
  4. ! z3 Z8 G" }% {8 ]
  5.   /* GPIO Ports Clock Enable */! t! d" s; D: P4 i% h
  6.   __HAL_RCC_GPIOH_CLK_ENABLE();
    0 Y) u3 T9 h3 [. h
  7.   __HAL_RCC_GPIOA_CLK_ENABLE();; l+ N5 B4 ?  t9 _- @- @) R: Y0 L; G7 ~
  8.   __HAL_RCC_GPIOC_CLK_ENABLE();, s- s2 v! ~0 L1 f5 x: \) M
  9.   __HAL_RCC_GPIOD_CLK_ENABLE();
    4 a# ~& g7 D5 J, H3 ^' K
  10.   __HAL_RCC_GPIOB_CLK_ENABLE();. l& N, Q% u7 x  z
  11.          __HAL_RCC_GPIOF_CLK_ENABLE();
    & S! t. U$ G1 e: n2 t2 T
  12. ' z- Z7 b+ e# Y1 D! X
  13.   /*Configure GPIO pin Output Level */
    - ?# k& L0 I1 S  m$ M
  14.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);
      r0 w7 }1 P. M6 l$ Z

  15. " g$ g4 p6 {! Q( u2 `' m- X1 T
  16.   /*Configure GPIO pin Output Level */
    " M2 e* I$ k  ~8 K& M
  17.   HAL_GPIO_WritePin(GPIOF, GPIO_PIN_12, GPIO_PIN_SET);
    + Q  A7 n( h8 P/ g* ^: E4 h; L; X

  18. + V4 g2 S7 S# _4 D6 S
  19.   /*Configure GPIO pin Output Level */
    4 H1 F9 z" b" q
  20.   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_SET);
    9 U4 o2 b3 U, \/ H: f

  21. / x' D0 }  e) C
  22.   GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
    * @* d! B8 A: O0 N+ R% C5 v2 u
  23.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;! J( Q. w5 x5 P+ p) A( M: W4 T
  24.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    3 v  K; z/ q9 y0 K! Z" O
  25.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;$ K- n: I$ f. T3 z" ~
  26.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    5 h3 i9 ~' u' S8 l8 h
  27. & W; j* x1 C% b
  28.   GPIO_InitStruct.Pin = GPIO_PIN_12;% {, y1 e) I1 C4 k: X: H
  29.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;4 ?: Z# u# ?* ]1 {) d5 m
  30.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    6 X, Z9 r7 k0 C- {
  31.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;; {9 C2 S# O: I) G& x
  32.   HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
    ( W3 [+ r" {2 B  Y) s
  33. , y8 H2 _1 S- W9 M
  34.   GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;. f3 u- O# y& O/ `! T
  35.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    ' f/ m( q4 i6 x6 w
  36.   GPIO_InitStruct.Pull = GPIO_PULLUP;! v/ d5 i$ ?( @
  37.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    ( B* e8 b; ~0 }- B
  38.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);  L% m5 x* H, @+ \) g" h
  39. 0 Y" V: v/ f" Z% F$ h
  40.   OLED_RST_Clr();
    . D5 i- @% R0 j; _' T+ K: {
  41.   HAL_Delay(200);' H+ L- P" k8 O; T9 b+ T% Q
  42.   OLED_RST_Set();
    ! D$ y7 J- q- W: U& n" k- y
  43.   HAL_Delay(200);& U8 s1 m' @) V" B+ \6 e
  44.         , e- q' r) T# y+ @$ Z. x
  45.   LCD_WR_REG(0x11);+ s- {+ V1 H1 D; p/ b5 ?6 a
  46.   HAL_Delay(100);6 x8 P$ G2 H1 e& R2 T( T  c
  47. , W% `+ ~' G+ A; @* b: J: }5 _" Z
  48.   LCD_WR_REG(0x21);
    0 N! ~. [) {' N3 G
  49. , C  K2 l* ^0 q* y7 Q- Y. I- a
  50.   LCD_WR_REG(0xB1);
      B$ ]9 X7 d  `5 s+ }3 _
  51.   LCD_WR_DATA8(0x05);4 m5 L! c0 P5 D1 k" B# s3 G
  52.   LCD_WR_DATA8(0x3A);! h+ }' U& b  b5 v; W( R  F2 r
  53.   LCD_WR_DATA8(0x3A);: j. j- g( r0 g2 ?9 Q/ n: J

  54. ! j( s  w( A9 \) m- r! r4 N! [
  55.   LCD_WR_REG(0xB2);
    ' y; z* M$ `5 x2 S" L8 U
  56.   LCD_WR_DATA8(0x05);0 p. E# }3 `  g& |' x# x; {
  57.   LCD_WR_DATA8(0x3A);
    2 H6 W5 v9 T2 y, @! M, v6 P
  58.   LCD_WR_DATA8(0x3A);
    ) s# k9 ?) v8 |7 U2 o& d( B$ s

  59. 6 r3 {2 i+ a5 z% f' C" Z$ S
  60.   LCD_WR_REG(0xB3);
    6 w' l) U9 f+ K- J8 N
  61.   LCD_WR_DATA8(0x05);
    ) M, U5 T- z7 ~
  62.   LCD_WR_DATA8(0x3A);- Z+ H' ?7 e, U( l' K" b
  63.   LCD_WR_DATA8(0x3A);
    4 J; ^+ z$ _# H4 m+ p9 {8 L
  64.   LCD_WR_DATA8(0x05);2 A/ O2 F( [3 H0 M9 p+ e
  65.   LCD_WR_DATA8(0x3A);* l! _6 D3 l- w! G/ @
  66.   LCD_WR_DATA8(0x3A);$ t( D+ x! ?9 _" o% H
  67. 2 |5 n8 z* `9 E% u$ S1 A  i
  68.   LCD_WR_REG(0xB4);# x* r" e& M; j/ o: x* K5 u, C, ~1 a; a
  69.   LCD_WR_DATA8(0x03);- u5 x. U8 M! d# u

  70. / @. [9 E& ~# p5 x6 i- D
  71.   LCD_WR_REG(0xC0);1 K1 X$ ~4 t- X$ Q' ?
  72.   LCD_WR_DATA8(0x62);1 c  d4 L( S$ j+ f
  73.   LCD_WR_DATA8(0x02);" a2 `, @2 ?& N; p
  74.   LCD_WR_DATA8(0x04);- X( x: y$ E' E0 [5 \

  75. : g9 k/ d8 M! Z
  76.   LCD_WR_REG(0xC1);
    ; f0 E" F7 U! E& a3 C
  77.   LCD_WR_DATA8(0xC0);
      e$ ?4 L/ F+ S
  78. / d! J% y! O# L& ^/ X
  79.   LCD_WR_REG(0xC2);4 ^$ a( w" }- Q; Z9 [
  80.   LCD_WR_DATA8(0x0D);
    $ j9 [% r) t* A
  81.   LCD_WR_DATA8(0x00);
      I( P( a; A) l. Z6 p/ j

  82. 8 o$ l0 v1 ^7 I# d
  83.   LCD_WR_REG(0xC3);
    ) s" w( u7 b8 Q3 `+ x* Y
  84.   LCD_WR_DATA8(0x8D);/ _$ Y1 t( ]& p7 z# H' h" U, z
  85.   LCD_WR_DATA8(0x6A);  
    - }8 U/ N: T3 p6 N  u
  86. : B5 F/ ~3 b  r
  87.   LCD_WR_REG(0xC4);5 s/ i7 v( Y5 `( F- j' X. _+ ]
  88.   LCD_WR_DATA8(0x8D);8 V  u/ O# `. P
  89.   LCD_WR_DATA8(0xEE);; R8 ?8 h2 `. n, V& e3 e6 A
  90. ; _0 e7 j4 }' G- e! R
  91.   LCD_WR_REG(0xC5);  /*VCOM*/' j' v- y# x( o5 ?5 c3 ~0 N' z
  92.   LCD_WR_DATA8(0x0E);   
    & a# U: p, c2 \* A1 m* w
  93. : Z& z& |9 I; n" @7 |# M
  94.   LCD_WR_REG(0xE0);6 V$ P' u/ w: \
  95.   LCD_WR_DATA8(0x10);9 V4 d, ^2 U4 D' u# n1 f
  96.   LCD_WR_DATA8(0x0E);
    * q- u" z8 b  w& k' G) o
  97.   LCD_WR_DATA8(0x02);* c7 t$ @: _  R* t' \% g, F
  98.   LCD_WR_DATA8(0x03);. D( }( M, B) d" j6 P0 g# e
  99.   LCD_WR_DATA8(0x0E);4 j2 |4 U7 ?; G5 y1 i: w
  100.   LCD_WR_DATA8(0x07);) I: c( X, ^2 |+ ^. O2 B+ ]
  101.   LCD_WR_DATA8(0x02);
    ' }; x# _$ |* n9 X! G, N
  102.   LCD_WR_DATA8(0x07);/ h7 F( w' b2 \+ f/ J8 c- h; r6 t
  103.   LCD_WR_DATA8(0x0A);
    5 M! C; _- a2 e0 A4 Z4 ?
  104.   LCD_WR_DATA8(0x12);
    0 D2 E( E0 e' q) \3 b
  105.   LCD_WR_DATA8(0x27);
    # _9 a7 l" i! e. l0 t1 P/ s
  106.   LCD_WR_DATA8(0x37);1 f) b5 O5 }$ M, @4 d& Y0 x
  107.   LCD_WR_DATA8(0x00);
    ) L3 {. z, p* T
  108.   LCD_WR_DATA8(0x0D);
    ) E9 }9 b" C1 D
  109.   LCD_WR_DATA8(0x0E);
    0 B7 Y' Z% p2 O/ Q+ L
  110.   LCD_WR_DATA8(0x10);
    5 G5 b$ m6 i7 e  ], @# @& d
  111. 5 U0 F/ }+ ~# l  z
  112.   LCD_WR_REG(0xE1);# v* r, L$ m4 A) Z! x$ q# ?
  113.   LCD_WR_DATA8(0x10);1 D4 h' D. `! e7 u8 ]+ _9 n
  114.   LCD_WR_DATA8(0x0E);
    5 f# S0 X. j. K) B1 p5 W
  115.   LCD_WR_DATA8(0x03);
      C" d3 ?3 j- Q. f% X
  116.   LCD_WR_DATA8(0x03);# x; X1 K' G( m: P/ ^4 V
  117.   LCD_WR_DATA8(0x0F);
    " k( ^) Q/ k# n3 P% ~/ [" j
  118.   LCD_WR_DATA8(0x06);* Q+ @# I! U9 d$ [5 [* X) m% u
  119.   LCD_WR_DATA8(0x02);
    + ?1 h+ B- T3 ]# V
  120.   LCD_WR_DATA8(0x08);% y, G- H) \+ M% ~+ {4 C' Z) v
  121.   LCD_WR_DATA8(0x0A);
    ! R3 @1 y/ u: b) w) i/ ~0 g
  122.   LCD_WR_DATA8(0x13);
    8 Z8 a# G0 H7 Q5 l
  123.   LCD_WR_DATA8(0x26);
    " V5 s  l7 V; C5 T$ C2 ]4 r3 r
  124.   LCD_WR_DATA8(0x36);% [9 \- H9 g# W$ A4 V1 J# `. d
  125.   LCD_WR_DATA8(0x00);# d$ y) {0 K. [* R5 u8 t" S
  126.   LCD_WR_DATA8(0x0D);
    7 s  R% L/ ~$ e7 }
  127.   LCD_WR_DATA8(0x0E);+ m# {* B7 ~7 K8 Y4 u  ?
  128.   LCD_WR_DATA8(0x10);0 n8 ^6 J" x3 I2 _1 z9 r
  129.   LCD_WR_REG(0x3A);! v* @1 R5 g4 o
  130.   LCD_WR_DATA8(0x05);
    " `9 w, p7 _# u& N4 F
  131.   LCD_WR_REG(0x36);# N) ?# t( y- l. _. y6 t+ t! A% r
  132.   LCD_WR_DATA8(0x78);2 h. x( T* _6 o3 n& a
  133.   LCD_WR_REG(0x29);2 r% p! k1 X: \
  134. }
复制代码

$ W! k5 r( z3 K  U
图片显示函数为:
  1. void LCD_ShowPicture1(u16 x1,u16 y1,u16 x2,u16 y2), q5 d7 Z( e" t$ H) H1 z3 O6 i
  2. {
    ' l' m- W$ \; P$ L
  3.          int i;
    / W- w" _- A1 C! d( w% w' i6 A6 n
  4.            LCD_Address_Set(x1,y1,x2,y2);  s3 A  n& w9 ^, Y7 d* E1 o, H$ p
  5.            for(i=0;i<3808;i++)2 w- E" `1 v2 ]; z6 R
  6.            {
    ( Z5 K# I* _3 ]1 _- W" a  j
  7.                             LCD_WR_DATA8(gImage_jsj[i*2]);
    ' a' E. A3 D4 y+ f' M
  8.                             LCD_WR_DATA8(gImage_jsj[i*2+1]);
    0 K; k% Y( ~: k, ^! g4 i
  9.            }                      4 H; G+ |& v/ x1 Y4 Z& q# Z
  10. }
    7 A+ a. y1 D) W$ a' k# p

  11. 8 @* Z6 b4 W. v1 k4 j
  12. void LCD_ShowPicture2(u16 x1,u16 y1,u16 x2,u16 y2)0 X2 h9 x7 ]6 s  E
  13. {, x2 p7 T! ?4 q1 h0 K3 N' w) y
  14.            int i;% i. s& M1 I( j$ Q  d3 }% S
  15.            LCD_Address_Set(x1,y1,x2,y2);
    5 p0 Y. b6 e/ t" W# i* n
  16.            for(i=0;i< 12800;i++)* @/ V3 [8 K! r/ T) ]" H9 V. K4 `7 p
  17.            {* d" s4 o/ u+ M, W( u
  18.                             LCD_WR_DATA8(gImage_moled[i*2]);
    9 {6 l  ]: P# W
  19.                             LCD_WR_DATA8(gImage_moled[i*2+1]);
    , Q9 W! w; E& ?4 s7 R5 o
  20.            }! E* a, |3 A$ `! w% D. b
  21. }
复制代码

8 i! b  J- @5 l
实现显示测试的主程序为:
  1. int main()+ }+ G" G3 n2 P. p
  2. {7 B6 `) B8 t3 F! Q2 v6 f
  3.          float t=0;$ x0 U1 Q. k- P7 A( A* u1 c7 w" \
  4.          u8 i;
    $ T* ?3 s" V3 ^% }/ ~
  5.          HAL_Init();
    ( @' X: e9 J% N( A- @
  6.          SystemClock_Config();
    ; L/ n1 O1 b7 J7 [
  7.          Lcd_Init();
    8 A+ S; _% n+ k. m/ C7 ~4 u  ]
  8.          LCD_Clear(0x043C);
    & a8 d3 A7 j& W' v( K# y
  9.          LCD_ShowPicture1(0,0,55,67);& ?8 S2 E* ^, P5 D& y9 L# y1 A
  10.          HAL_Delay(1000);" S* S! S5 ]) o/ H) d& y
  11.          LCD_ShowPicture2(0,0,159,79);
    ' G  S0 z' ~1 C' }' @: {: G& o4 t
  12.          while(1);
    ; J+ Q  F- B, l  Z- f0 {( q
  13. }
复制代码
9 `3 k0 g6 `7 Q4 K& y+ Y) E
1.jpg
显示计算机图标

" z8 M, i$ j* l. }
2.jpg
显示彩色图片
* C, K1 v) y7 o  O0 }4 @+ [1 P
+ O8 s& B" O! a工程代码:3 f4 ~" H( C2 |" F* Z

0.96_OLED.rar

下载

3.77 MB, 下载次数: 3

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

举报

0个回答

所属标签

相似分享

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