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

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

) h9 s: }: o" o8 j! G& i
; ]- k0 M7 A7 ]8 D/ S! B
定义相关引脚输出高低电平的语句为:
#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)

9 a1 N/ h: s3 a+ L1 ^
#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)
2 T6 y  T' T, f" J
#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)
( R% x# e' Q: A% |/ P
#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 Y: F- E6 \' i4 q2 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)

1 O: N8 r# c9 K, D9 k1 G3 G" 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)
5 i% A3 h- h. ?* V+ C1 E

1 B( r# p# o* U: b
OLED屏的初始化函数为:
  1. void Lcd_Init(void)
    9 H$ T' |4 e7 L9 N1 n
  2. {
      }4 c8 `' [# p0 m! J3 L4 k
  3.   GPIO_InitTypeDef GPIO_InitStruct;
    $ l5 ]& Q& r+ {4 L
  4. % o6 f5 e( ^; @( D
  5.   /* GPIO Ports Clock Enable */
    ( ~: W6 L/ O7 K% e' K2 Y4 i1 G& C" z
  6.   __HAL_RCC_GPIOH_CLK_ENABLE();/ M7 ~) p* h1 f; i
  7.   __HAL_RCC_GPIOA_CLK_ENABLE();
    1 h* X8 o. M  v3 `
  8.   __HAL_RCC_GPIOC_CLK_ENABLE();% s% t2 E* ~6 j( e. @2 U  X5 B
  9.   __HAL_RCC_GPIOD_CLK_ENABLE();8 i. C# h' {, E
  10.   __HAL_RCC_GPIOB_CLK_ENABLE();
    " B5 K- H9 d3 `3 T
  11.          __HAL_RCC_GPIOF_CLK_ENABLE();
    0 G& V* M: s8 K+ Z7 y" `$ j

  12. 5 w2 v: t! G8 ?2 F/ H: D
  13.   /*Configure GPIO pin Output Level */1 j1 J( H# _- V0 j
  14.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);3 S: h# J$ o8 A7 B, J8 j& D

  15. ; T, f% y; P. t$ a2 c; |1 B$ z
  16.   /*Configure GPIO pin Output Level */4 w0 L* s$ _1 W6 Y3 ]
  17.   HAL_GPIO_WritePin(GPIOF, GPIO_PIN_12, GPIO_PIN_SET);! u3 U, S2 F  N

  18. : A' z1 n  B  J$ e& b4 z+ J
  19.   /*Configure GPIO pin Output Level */
    - {& O/ {9 F) a: S
  20.   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_SET);
    ( U3 K( Z: C$ p2 [

  21. + g) C3 g9 [8 b
  22.   GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
    ) C% L$ Q1 z, D. d5 l2 ^( Z: }& r
  23.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;4 u5 Q' P5 L# u" {5 L
  24.   GPIO_InitStruct.Pull = GPIO_PULLUP;% R. c0 b+ u# P1 f4 [* ^  N) L
  25.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;9 t! @( Z+ h& [6 n  d& s+ G
  26.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);( s) C$ V* A; t. W

  27. + ]" r7 k, k5 ?1 [
  28.   GPIO_InitStruct.Pin = GPIO_PIN_12;' C3 c1 H- h, E! ^1 J
  29.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    + C' Y1 h: C9 I4 F4 N4 {3 C
  30.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    2 e1 }6 q& H% W0 C. @/ j4 s0 x7 C
  31.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;- `! t3 e. I+ K5 n  F4 A
  32.   HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
    8 w8 V! {8 c9 T; @# `
  33. $ T. ~- r& t$ ^/ |3 }
  34.   GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;& K' V0 G/ h$ k/ o2 K
  35.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;9 A1 F& \$ D, ?+ P& P! p7 q% D' L; u
  36.   GPIO_InitStruct.Pull = GPIO_PULLUP;
      G. F3 Q7 }1 D5 o
  37.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;+ v; X$ D+ u) L$ _# U! _' \5 }
  38.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
    0 a% G5 t) K4 S& _- T. G
  39. / N4 x  K  {1 u3 m7 N
  40.   OLED_RST_Clr();! x5 h2 z+ I5 B+ _4 Q
  41.   HAL_Delay(200);, f' F" {& Q2 R4 @2 p. g
  42.   OLED_RST_Set();9 [" s" v" T' r0 L8 v) W* c
  43.   HAL_Delay(200);
    % s9 T. F9 x# x6 W
  44.         
    % d% P8 l  p; T2 V; h. h8 X6 s
  45.   LCD_WR_REG(0x11);3 p" S9 h, y% X1 @
  46.   HAL_Delay(100);
    " I2 e, H0 Z, b4 f3 o7 u, T
  47. 7 q3 i3 q" {/ k0 i. k0 g
  48.   LCD_WR_REG(0x21);
    * w& q! @: p3 A2 p4 }

  49. 5 t/ \5 e9 W  o$ v; _/ ?
  50.   LCD_WR_REG(0xB1);  J3 u* m' ~% W" ~5 X& t! A0 f
  51.   LCD_WR_DATA8(0x05);/ s; v) u- k" ]% ?. @
  52.   LCD_WR_DATA8(0x3A);! U2 u, t; I: L( |7 }
  53.   LCD_WR_DATA8(0x3A);0 n1 A- e8 ?4 j6 y! n

  54. 2 g; ~# G2 J) M% B' W
  55.   LCD_WR_REG(0xB2);# r5 d9 p; ?7 ]! j
  56.   LCD_WR_DATA8(0x05);
    9 A; M* [' N6 l5 O
  57.   LCD_WR_DATA8(0x3A);$ y9 w1 H5 G$ T; X6 N2 Q6 O$ e
  58.   LCD_WR_DATA8(0x3A);: t1 C2 j5 E' I" w; s4 N

  59. / E$ u, c. z  Q, r
  60.   LCD_WR_REG(0xB3);1 |( d$ w7 R+ f5 p+ F$ B
  61.   LCD_WR_DATA8(0x05); 8 E' d/ T5 X" C3 @% z9 M. R8 z$ C
  62.   LCD_WR_DATA8(0x3A);
    ; V) R9 @  R0 j% F
  63.   LCD_WR_DATA8(0x3A);
    . ~6 S5 x* x' b  a; R; w
  64.   LCD_WR_DATA8(0x05);1 ]2 u7 \0 [/ G5 H; x0 L: W( ^
  65.   LCD_WR_DATA8(0x3A);
    , t' U) |& \3 U. p7 l& ]
  66.   LCD_WR_DATA8(0x3A);
    ( n7 u% e0 F, e1 R% m% K* Q$ a

  67. ' F, g9 O" ^* {0 |# `  y- \
  68.   LCD_WR_REG(0xB4);
    ! p& j3 \% k& N. c: w& o7 u4 I
  69.   LCD_WR_DATA8(0x03);+ r: g; E7 I! W1 s7 i2 S3 y

  70. 8 j9 _4 s. p9 L  f/ X$ i
  71.   LCD_WR_REG(0xC0);
    ) Z  l7 G  l/ \% R' W4 J  c: F
  72.   LCD_WR_DATA8(0x62);: J* y4 M+ u% Y4 D& O
  73.   LCD_WR_DATA8(0x02);
    7 c) Q5 S% Z+ J' f4 ^6 O9 ~
  74.   LCD_WR_DATA8(0x04);
    / i, O& y3 W3 ~0 f' |
  75. & ]  Q  I/ u' P! L: S- d8 G! w3 E
  76.   LCD_WR_REG(0xC1);2 G" k7 p/ j5 z' N/ f+ E
  77.   LCD_WR_DATA8(0xC0);
    4 a+ c& q9 K+ E5 P& V- I
  78. 3 v4 G5 {  N, }
  79.   LCD_WR_REG(0xC2);
    + k4 r* V8 e' w0 B( d; d
  80.   LCD_WR_DATA8(0x0D);' l! l: J$ i9 F5 V7 f* v+ k
  81.   LCD_WR_DATA8(0x00);. |# m' J) `" [* A) b0 Y6 |* }

  82. ( Y4 i: v2 [: J# k
  83.   LCD_WR_REG(0xC3);: J, ^0 R: @3 C
  84.   LCD_WR_DATA8(0x8D);- Q& A" o9 n. _7 A! b( Z: M! ]
  85.   LCD_WR_DATA8(0x6A);  
    - q5 B7 q( ~0 n+ ]1 b/ Y- M

  86. $ _; S4 i4 u' F8 P  z
  87.   LCD_WR_REG(0xC4);
    7 P, k3 l% f/ N+ H& g$ U" w9 M
  88.   LCD_WR_DATA8(0x8D);
    ' u: T2 H& g( c- F9 S9 M
  89.   LCD_WR_DATA8(0xEE);9 Q  r2 U; R0 x; T. E: J( `, U& a. K

  90. $ J+ s* ^- z2 ^" x5 y1 m
  91.   LCD_WR_REG(0xC5);  /*VCOM*/
    / H: n( j3 h) Z, u
  92.   LCD_WR_DATA8(0x0E);   - e7 G" m3 P8 q  Y4 A' R/ L- d
  93. & i( P7 k' L# ?" {( A
  94.   LCD_WR_REG(0xE0);
    6 d) `' y$ H0 q
  95.   LCD_WR_DATA8(0x10);
    , L' v5 M$ i( A+ H
  96.   LCD_WR_DATA8(0x0E);! Y( \. V: \) N: s
  97.   LCD_WR_DATA8(0x02);
    & Z4 r' n( n( N/ ^, d" w  p
  98.   LCD_WR_DATA8(0x03);
    - S& t4 {# l& |: }9 x! ]/ v
  99.   LCD_WR_DATA8(0x0E);, _/ Q( b- S( O3 F% p
  100.   LCD_WR_DATA8(0x07);
    6 t/ E- s6 O% B6 Z* E
  101.   LCD_WR_DATA8(0x02);' `( m# T( x* L7 u8 X
  102.   LCD_WR_DATA8(0x07);
    9 z$ z# c% C3 L8 I& K& `
  103.   LCD_WR_DATA8(0x0A);
    3 G4 w) ]  K! D, c8 f
  104.   LCD_WR_DATA8(0x12);
    # N6 V) ]$ q7 n" l. @
  105.   LCD_WR_DATA8(0x27);
    % f' m0 s! n2 ^, @, R
  106.   LCD_WR_DATA8(0x37);0 R' g8 a: C* X9 K2 V; j( A* x6 [
  107.   LCD_WR_DATA8(0x00);$ n4 t& _& M. |& |- e( v0 l
  108.   LCD_WR_DATA8(0x0D);( V6 h* X! q9 Y0 O6 P; I
  109.   LCD_WR_DATA8(0x0E);: H+ [9 C: z1 o6 E  N' E  Q
  110.   LCD_WR_DATA8(0x10);( l* ^" |; W2 a7 h
  111. ; T7 h/ u  V) o$ k. @/ d: V
  112.   LCD_WR_REG(0xE1);
    8 D7 g4 f# y; O# c, u! D
  113.   LCD_WR_DATA8(0x10);
    % k: T! K" W' A2 h! z/ E1 N8 p4 k4 D1 t
  114.   LCD_WR_DATA8(0x0E);
    5 Q! e. G, T8 i4 Q- W
  115.   LCD_WR_DATA8(0x03);, B8 _5 _3 ^  T. i, D! K8 I
  116.   LCD_WR_DATA8(0x03);7 Z! q% ?3 n/ Y. j
  117.   LCD_WR_DATA8(0x0F);
    , B+ H& h  f3 t8 I, r( `7 W
  118.   LCD_WR_DATA8(0x06);
    ! \4 ^% H/ q; O0 F5 @: i
  119.   LCD_WR_DATA8(0x02);" S  f4 A2 e4 @' s* \
  120.   LCD_WR_DATA8(0x08);
    + S! j! Y& g7 F2 A# w- P! u2 C
  121.   LCD_WR_DATA8(0x0A);
    4 J8 c$ @: C- T
  122.   LCD_WR_DATA8(0x13);
    # [" s8 g6 U# _9 N5 \; \% X
  123.   LCD_WR_DATA8(0x26);0 k3 ]1 u1 b$ R2 p
  124.   LCD_WR_DATA8(0x36);
    # x0 i' y- ?/ \4 R( r( c
  125.   LCD_WR_DATA8(0x00);
    ' J5 v6 y1 @) j- Z) Q# X4 @7 Q
  126.   LCD_WR_DATA8(0x0D);
    4 ?5 B" m- z( T+ y; |9 j+ e
  127.   LCD_WR_DATA8(0x0E);
    3 s0 p0 \; }: `3 Z
  128.   LCD_WR_DATA8(0x10);. i6 V: ?$ A4 f' ?+ o: z
  129.   LCD_WR_REG(0x3A);4 D/ d- X% M: R7 ^
  130.   LCD_WR_DATA8(0x05);  H2 q; R. w5 `$ h8 I
  131.   LCD_WR_REG(0x36);
    % h$ Q4 F; ~6 J& `) G
  132.   LCD_WR_DATA8(0x78);0 E! f2 ^/ C4 ?7 i4 Q
  133.   LCD_WR_REG(0x29);
    8 {" w) n2 n* F4 Y
  134. }
复制代码

8 w8 X2 s3 x6 s7 p0 u, j- K
图片显示函数为:
  1. void LCD_ShowPicture1(u16 x1,u16 y1,u16 x2,u16 y2)
    & `# ]5 {! [- M, D% a
  2. {  C. A/ A% J* \2 G  E
  3.          int i;2 k) s0 A2 v% d. s3 A% k- G! f6 [
  4.            LCD_Address_Set(x1,y1,x2,y2);1 R, G) _! L+ ?. W. ^" }" _
  5.            for(i=0;i<3808;i++)
    * [0 _( O) M. E* B
  6.            {6 ]4 ~. m% o2 A4 s9 G2 A
  7.                             LCD_WR_DATA8(gImage_jsj[i*2]);
    2 d4 d4 Q2 h7 p" y
  8.                             LCD_WR_DATA8(gImage_jsj[i*2+1]);, h9 g2 m/ h9 v4 X
  9.            }                     
    : k4 m! n' s2 n) n" ?( P
  10. }
    / A+ s# O5 v: G! w0 J

  11. 9 v0 P: B# {  c* G3 }5 R
  12. void LCD_ShowPicture2(u16 x1,u16 y1,u16 x2,u16 y2)
    9 m1 y! B  b9 b( D6 B) @. E; B
  13. {( Q* b& [3 l3 g" \4 ]; y9 O
  14.            int i;! _4 N+ n6 D( D% m' M- q2 d0 B
  15.            LCD_Address_Set(x1,y1,x2,y2);( ~* y, [4 {9 z5 y
  16.            for(i=0;i< 12800;i++)
    * |" W. v+ A& o. O
  17.            {! `9 I6 |) O" J7 }* G0 o, g' e6 z
  18.                             LCD_WR_DATA8(gImage_moled[i*2]);
    & I! ^7 V2 z8 H% |
  19.                             LCD_WR_DATA8(gImage_moled[i*2+1]);
    1 h9 a+ \; L% U: e
  20.            }
    # o2 U. w8 F, v
  21. }
复制代码
' m1 n0 ^1 l8 s: d- }
实现显示测试的主程序为:
  1. int main()$ k  E% ^) z* n. i" ?  T% z8 k, @
  2. {& T. ~& ], l# ?6 I
  3.          float t=0;
    & }% w: Q6 R2 H: x% F% |
  4.          u8 i;
      p; [  k/ q! O% W
  5.          HAL_Init();
    7 P" F' |: M7 l, s2 t+ `
  6.          SystemClock_Config();  {  d; ]% P9 ]% T# B) F. A2 r2 H
  7.          Lcd_Init();8 z' s' _- W) g8 ~& K' f  F1 `7 r
  8.          LCD_Clear(0x043C);
    6 s4 x) H& J+ u1 y5 F- J
  9.          LCD_ShowPicture1(0,0,55,67);
    ) m2 v- b: A! l/ i& H  d
  10.          HAL_Delay(1000);
    : `) ?4 u! E3 ]/ F
  11.          LCD_ShowPicture2(0,0,159,79);- `( N. J" T* d
  12.          while(1);2 y0 _0 e; @5 E) T& c3 d+ T: Y
  13. }
复制代码

3 V) c7 y. d* b  B% V
1.jpg
显示计算机图标

3 ~' _" Y0 X2 M  H
2.jpg
显示彩色图片
2 w+ T- A! F) A# p6 v6 I% \! @6 b0 b- Q$ \( A9 f5 e
工程代码:
9 ?( m5 j$ y/ Q

0.96_OLED.rar

下载

3.77 MB, 下载次数: 3

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

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版