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

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

% ~) J2 @* Q3 I
$ T" I7 h9 W7 j; N' a
定义相关引脚输出高低电平的语句为:
#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)
2 a6 _  \7 p) i+ ^3 e4 L5 M8 @
#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)
+ ?, e6 V6 `9 f
#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)

2 O  P3 q7 S9 o# y' v, }4 O( @- z" ]
#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)

( ~$ g1 x5 `/ O7 c$ `
#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)

4 h2 m7 o. \* N# z. n! V
#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)
# k% G: G+ I/ Y4 K# g
9 I; n& B0 r4 y" R0 t- r% ~3 x& `
OLED屏的初始化函数为:
  1. void Lcd_Init(void)
    " x! v! D1 Q6 n( x0 G
  2. {9 Q+ ^  b5 @# g/ O, t1 d0 {/ c
  3.   GPIO_InitTypeDef GPIO_InitStruct;8 ~2 G0 O% y" r* S* s

  4. 9 N* M- I7 U" ?' @  k
  5.   /* GPIO Ports Clock Enable */! O* E* s/ P, @
  6.   __HAL_RCC_GPIOH_CLK_ENABLE();
    1 R$ \; a! g. l& M. ?" T6 P) Q8 I5 d% d
  7.   __HAL_RCC_GPIOA_CLK_ENABLE();8 x. o8 h5 D% _1 l1 Z
  8.   __HAL_RCC_GPIOC_CLK_ENABLE();
    # F0 o3 V, b! `& V
  9.   __HAL_RCC_GPIOD_CLK_ENABLE();
    9 G  c+ ?4 o. g  N9 `) u( k
  10.   __HAL_RCC_GPIOB_CLK_ENABLE();
    . o9 b' s# {( T. m1 X* W
  11.          __HAL_RCC_GPIOF_CLK_ENABLE();5 i7 w( n5 p/ g" U- Y% r
  12. : S/ d: K+ i8 `/ C2 }" v* @
  13.   /*Configure GPIO pin Output Level */
    4 e9 S$ d1 }% s1 c
  14.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);
    - v+ D7 I* E* O! B& p& R  \! [

  15. 8 P& q. ?% p/ N# O4 r: o; D
  16.   /*Configure GPIO pin Output Level */
    # F3 v9 U- Z: D
  17.   HAL_GPIO_WritePin(GPIOF, GPIO_PIN_12, GPIO_PIN_SET);
    & V1 C! q0 a: D% l
  18. 4 W: R9 s  \1 x# t* w. n
  19.   /*Configure GPIO pin Output Level */
    0 P! w- O9 G  |+ C
  20.   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_SET);
    3 Y; F, z- s: K: q$ c
  21. - d9 u6 l! Q, M' q! Q; ^+ q
  22.   GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;- v: o: T, T" i9 `5 F
  23.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    ; [$ h! d' W& m# U2 E
  24.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    . n' c5 ?$ A6 `( d. e- @# x2 Q5 i
  25.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;' Y& Z2 o  ~7 ]
  26.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    # n% v. w2 k+ |! p
  27. ' j+ J9 Q5 J, `- ]9 o
  28.   GPIO_InitStruct.Pin = GPIO_PIN_12;2 z- N- k3 @1 |; Q- y9 G" @
  29.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;4 x( C7 O: f0 K! U3 G9 ~
  30.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    * [2 L* e$ c+ s% @/ m, P; `# G
  31.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    5 g! a, j) `& e' w
  32.   HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);4 \1 \$ l0 w+ i. _" }" v

  33. * ~! H) |( o2 s6 B  ~9 {+ w# d
  34.   GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
    0 u8 R9 U1 |4 j) o
  35.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;4 ^) K% B3 L. y) r7 B5 o9 o  v1 ~
  36.   GPIO_InitStruct.Pull = GPIO_PULLUP;7 E% l1 z8 v9 {7 Z* Z$ q
  37.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    4 b1 ?  {3 q: C( j1 f
  38.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
    & W: V; u+ H% P2 p" v+ N
  39. $ p. e" o( Q' F* i) ?" o
  40.   OLED_RST_Clr();
    ) K$ r* S5 _# d# b7 Q
  41.   HAL_Delay(200);
    0 Q4 Z6 a' s% x& Z: |( ^% X$ d' c! A
  42.   OLED_RST_Set();
    # e8 ~# G6 ~3 `
  43.   HAL_Delay(200);
    6 O9 l! T1 t0 o- t/ c( A* N
  44.         5 f' W; t# E5 ^0 b4 C
  45.   LCD_WR_REG(0x11);5 K- m2 s# B0 Q4 B/ ]1 g
  46.   HAL_Delay(100);
    - y" _" u: m5 S, I3 p

  47. " K1 L) D; i' |' d+ V0 _3 R
  48.   LCD_WR_REG(0x21);
    8 ]: K9 E/ ~9 \! }9 _

  49. ! N( l; J* O+ j: A& U7 i' l
  50.   LCD_WR_REG(0xB1);
    6 H6 f! w3 V/ Z9 P# F/ D! D3 B# v5 P
  51.   LCD_WR_DATA8(0x05);
    ( H- f/ _4 f7 T; m
  52.   LCD_WR_DATA8(0x3A);
    / _  c8 C& M0 Q- p+ n  p9 H! Z
  53.   LCD_WR_DATA8(0x3A);
    & {- Z8 `' i- n6 \- f  i5 h

  54. 7 q% j3 ~$ j3 P0 m
  55.   LCD_WR_REG(0xB2);
    4 R2 L) R0 p0 {  r/ U/ l! P
  56.   LCD_WR_DATA8(0x05);7 t8 x+ c7 x4 K+ r
  57.   LCD_WR_DATA8(0x3A);
    : W$ g- T* R% l( u! l) \8 _) x4 {$ z
  58.   LCD_WR_DATA8(0x3A);8 |" J+ u( |) N6 c& M, Z1 |% }  x# P
  59. . V, J' D& W7 P) G( A/ g# j! b
  60.   LCD_WR_REG(0xB3);0 }  u  s5 @" |3 }: s' {  L2 _
  61.   LCD_WR_DATA8(0x05); 5 H8 H% i1 n) Q, i8 j7 G0 L
  62.   LCD_WR_DATA8(0x3A);
    $ `/ W% v3 M5 _* R
  63.   LCD_WR_DATA8(0x3A);% Y* v- P8 s8 c, h: \) Q
  64.   LCD_WR_DATA8(0x05);2 V: H# S$ r; }( n" I8 I
  65.   LCD_WR_DATA8(0x3A);+ b4 a4 @  V9 t* A( ~7 V
  66.   LCD_WR_DATA8(0x3A);
    ' e' p6 N2 s8 M$ t% v( x9 i+ d0 Z

  67. 9 U* L  z( C; J& J0 B& c6 |! D
  68.   LCD_WR_REG(0xB4);
    7 k! Y) m8 b+ ^5 o# d# F
  69.   LCD_WR_DATA8(0x03);3 G2 ~2 P2 I+ X2 k7 h

  70. 6 c4 @! ^" H9 O0 I' X# W
  71.   LCD_WR_REG(0xC0);( t" h' ]) c" f" \; f
  72.   LCD_WR_DATA8(0x62);
    " |' e3 ]  V+ r
  73.   LCD_WR_DATA8(0x02);
    7 x3 G- u7 G7 h9 f& n* J! N
  74.   LCD_WR_DATA8(0x04);
    ' d! {3 N. Y+ G% n! O

  75. 5 ^9 M4 i+ I; [8 a" Z
  76.   LCD_WR_REG(0xC1);" y% D8 x4 {4 P3 y
  77.   LCD_WR_DATA8(0xC0);
    - \6 M+ N6 ~$ A# ?$ I

  78. ; t% }  L' u% d# ^
  79.   LCD_WR_REG(0xC2);
    - r  s0 P8 c) H$ v  i
  80.   LCD_WR_DATA8(0x0D);
    & [7 j8 G0 R$ }8 @) d! E
  81.   LCD_WR_DATA8(0x00);
    + P( v, z0 v' c9 [2 s, g
  82. , m1 z' K8 ~' t7 [" S# s5 Z
  83.   LCD_WR_REG(0xC3);: q6 N& I5 x5 o2 |# V6 [' W  _
  84.   LCD_WR_DATA8(0x8D);8 |) v$ H2 l+ [& h9 U
  85.   LCD_WR_DATA8(0x6A);  : M. G( j/ S& B! @0 `
  86. 6 r3 c0 [& X4 ?5 b' C8 z, A) b4 M
  87.   LCD_WR_REG(0xC4);# b6 `, N' C- M( B
  88.   LCD_WR_DATA8(0x8D);
    ! Z( m$ z( P+ R: F  l2 W. ~
  89.   LCD_WR_DATA8(0xEE);' z1 }' o8 J2 \8 Z

  90. 0 s; e" l- h( l" n% X: E
  91.   LCD_WR_REG(0xC5);  /*VCOM*/" U: k& }( r0 `( f8 M; |
  92.   LCD_WR_DATA8(0x0E);   / m8 {9 b9 Z9 Y9 e: j

  93. % n5 \1 M& G* J$ S  z2 w1 P( p& l  a
  94.   LCD_WR_REG(0xE0);
    4 E. U% i) o$ i" h! L
  95.   LCD_WR_DATA8(0x10);
    + o$ {; T% \% X/ l2 p. N, m' Q
  96.   LCD_WR_DATA8(0x0E);+ U, ]0 b7 Y9 @8 W
  97.   LCD_WR_DATA8(0x02);
    0 @' @! U  k$ P, d( y
  98.   LCD_WR_DATA8(0x03);
    3 J) e7 G$ u/ }; T( l- a
  99.   LCD_WR_DATA8(0x0E);+ \  N( `# J4 b. m0 n) Z
  100.   LCD_WR_DATA8(0x07);) y1 G+ L5 }: ]  K8 k
  101.   LCD_WR_DATA8(0x02);
    + C0 v  |6 z( w
  102.   LCD_WR_DATA8(0x07);
    $ f% J. V# `' n/ W/ c
  103.   LCD_WR_DATA8(0x0A);4 G! o( D7 J% U# [0 d
  104.   LCD_WR_DATA8(0x12);
    4 {9 S2 F: l) F1 s
  105.   LCD_WR_DATA8(0x27);
    ( S/ o; D3 Q+ {3 @
  106.   LCD_WR_DATA8(0x37);$ y* s% n8 R6 N* x
  107.   LCD_WR_DATA8(0x00);
    ' P  Z6 y, O3 {( ?+ K$ G& a3 W
  108.   LCD_WR_DATA8(0x0D);0 J2 i' p; g( O2 P) q0 C
  109.   LCD_WR_DATA8(0x0E);
    5 J, f# Q3 L& g3 S& ~6 t: S  Q
  110.   LCD_WR_DATA8(0x10);
    % D& ?; m3 ]8 S

  111. ' F+ o' |8 s2 C" k6 i( P
  112.   LCD_WR_REG(0xE1);
    & \4 Z8 N1 a/ P: W/ l/ i
  113.   LCD_WR_DATA8(0x10);
    . S" A4 z" R! O4 n7 ?
  114.   LCD_WR_DATA8(0x0E);
    9 }9 Q! M/ l& P7 a$ H/ p- R
  115.   LCD_WR_DATA8(0x03);
    7 K( w" W4 B! E8 o% |9 l3 _4 M
  116.   LCD_WR_DATA8(0x03);$ T, H. s9 x: n3 o) Z6 b
  117.   LCD_WR_DATA8(0x0F);+ Y6 F, K& u  J  \, f1 F
  118.   LCD_WR_DATA8(0x06);  h$ K/ i8 z3 O: U9 `
  119.   LCD_WR_DATA8(0x02);9 O# J5 i9 F" \; M- ]
  120.   LCD_WR_DATA8(0x08);" w, m) r7 M" l- C' P+ A
  121.   LCD_WR_DATA8(0x0A);
    8 y# g1 l% u" c* R1 k, u& l
  122.   LCD_WR_DATA8(0x13);+ R4 y0 a2 {( z5 s0 _+ |4 v& ?
  123.   LCD_WR_DATA8(0x26);
    * j# ?' h; A: g
  124.   LCD_WR_DATA8(0x36);  J" I) x: E/ ~/ V
  125.   LCD_WR_DATA8(0x00);
    / \& E$ M4 h7 W4 Z- B/ P
  126.   LCD_WR_DATA8(0x0D);, W. k6 ^9 d. i: L+ M$ ]- m
  127.   LCD_WR_DATA8(0x0E);
      z4 m! {/ _" ~6 g
  128.   LCD_WR_DATA8(0x10);
    - X6 U  g4 N2 r
  129.   LCD_WR_REG(0x3A);1 U8 W' m5 ~" o( v2 c0 J
  130.   LCD_WR_DATA8(0x05);. m. o. Z: r% a# N2 q
  131.   LCD_WR_REG(0x36);: x) h  N  L. a1 H! e- J
  132.   LCD_WR_DATA8(0x78);
    ' m3 X2 ?9 F; g3 S8 _4 P' c
  133.   LCD_WR_REG(0x29);
    # w: v2 b1 ]! I6 ^* @( o
  134. }
复制代码

5 n- u5 N$ n9 B! [8 z+ Q& c
图片显示函数为:
  1. void LCD_ShowPicture1(u16 x1,u16 y1,u16 x2,u16 y2)
    $ G& T, r9 v8 W9 N" f. p4 F
  2. {
    ' m- A. y1 m( U+ Y' ?& x
  3.          int i;5 a' D! T2 F  N% c) @
  4.            LCD_Address_Set(x1,y1,x2,y2);
    * L( L5 b- O- X
  5.            for(i=0;i<3808;i++)- E3 z% Y% W# [+ z3 o1 d
  6.            {7 ], M7 \! O( @+ |1 ~
  7.                             LCD_WR_DATA8(gImage_jsj[i*2]);4 X5 R4 t5 c5 B! ^6 ]% A
  8.                             LCD_WR_DATA8(gImage_jsj[i*2+1]);! H: o3 q' {* n
  9.            }                      2 i  T- q* t) `
  10. }
    ' |" P" Y& v; H: x( U; G
  11.   y% w- \3 J0 h( B: ^2 q
  12. void LCD_ShowPicture2(u16 x1,u16 y1,u16 x2,u16 y2)! J* p& V4 A. \% [' H* ]: v; ?: Z
  13. {/ @& E8 B* Y8 _& ]9 S4 ?2 s
  14.            int i;/ V: x6 ^" F* m% Q  `2 D  r
  15.            LCD_Address_Set(x1,y1,x2,y2);
    & k7 q! Y6 Y1 \6 d! p
  16.            for(i=0;i< 12800;i++)
    % T* J3 |; j* M& B' }
  17.            {7 g# ^6 M5 n6 Q6 T2 H
  18.                             LCD_WR_DATA8(gImage_moled[i*2]);: @; ]" J5 ]7 h% o  P3 J
  19.                             LCD_WR_DATA8(gImage_moled[i*2+1]);3 I5 t) l  q6 c6 G
  20.            }9 }+ v! c) m3 g6 Z7 w/ M" b6 T
  21. }
复制代码

6 |( Y. Y( r' d/ Q1 c: z
实现显示测试的主程序为:
  1. int main(); `" g. L4 N& O$ a6 o
  2. {7 f0 a  _! v3 T- z- F/ K
  3.          float t=0;
    % x! Z* W2 C' o# |, D. f7 T1 v
  4.          u8 i;$ ~! j9 F& {1 l- d+ C+ d$ E
  5.          HAL_Init();
    ; Q" Q6 S6 h: [9 @8 X
  6.          SystemClock_Config();
    4 ?" P% Z3 Z+ `  {/ p
  7.          Lcd_Init();9 c3 v  L  c( [* s
  8.          LCD_Clear(0x043C);+ s& E$ a+ j! y) Z! a
  9.          LCD_ShowPicture1(0,0,55,67);
    # S' ^, e  Y, [
  10.          HAL_Delay(1000);! u, T! T+ i9 O1 S
  11.          LCD_ShowPicture2(0,0,159,79);
    $ I+ J. N1 Z& ?2 f2 D% T. Z7 b
  12.          while(1);* ?# k9 i( w* \5 g- m4 k( ^
  13. }
复制代码

9 M2 {" l4 L% b- r* O( [
1.jpg
显示计算机图标

1 Y( y7 ~5 g+ f7 q6 u
2.jpg
显示彩色图片
9 h, V% y4 w+ s. o7 s# l  _) M1 J) V0 o5 R1 U3 |# C
工程代码:, l) o& r* X% q  w

0.96_OLED.rar

下载

3.77 MB, 下载次数: 3

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

举报

0个回答

所属标签

相似分享

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