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

关于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
9 }; B% W" @5 b( m

5 ]$ V8 l. K& P, h' v
定义相关引脚输出高低电平的语句为:
#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)

: A4 N$ W, u& m
#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)
; J3 E( R) e% W( _( @
#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)
6 w1 m% S$ e- 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)

" J! t1 N3 t+ m( W9 D  D
#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)
5 e; H. F% |& f+ ^/ v' B
#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# M5 S8 o1 j! |! |- t# c# B% l& @" b

. E0 C: }! @% I$ `
OLED屏的初始化函数为:
  1. void Lcd_Init(void)! t- }. B4 j8 \: H$ b
  2. {
    : V/ h, H8 _- J! _
  3.   GPIO_InitTypeDef GPIO_InitStruct;: l% z( \% E; E* d+ x% u  L0 w
  4. . _4 e6 a! L0 N: J. G1 _
  5.   /* GPIO Ports Clock Enable */
    0 \4 C! C2 t- O( R
  6.   __HAL_RCC_GPIOH_CLK_ENABLE();
    ( S, }# P; }) ^8 F5 T% c
  7.   __HAL_RCC_GPIOA_CLK_ENABLE();6 |5 |) f  D/ |0 _1 S, B9 l
  8.   __HAL_RCC_GPIOC_CLK_ENABLE();
    % x. O7 \' p- I/ I8 M  z- |
  9.   __HAL_RCC_GPIOD_CLK_ENABLE();
    ' j( L4 U9 t% Y# m& k7 j1 F' \3 `
  10.   __HAL_RCC_GPIOB_CLK_ENABLE();
    & y0 t, F3 l1 M  w
  11.          __HAL_RCC_GPIOF_CLK_ENABLE();
    7 _% I1 Y! W; |

  12. ! Q9 n2 k& @7 Y4 @& n) G% }
  13.   /*Configure GPIO pin Output Level */8 }/ }0 ?# H) A/ F0 K4 g
  14.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);; V5 k6 b! n" y7 [! y
  15. % t4 {" J/ X: f
  16.   /*Configure GPIO pin Output Level */8 H( z; t: d" E0 @( g; h
  17.   HAL_GPIO_WritePin(GPIOF, GPIO_PIN_12, GPIO_PIN_SET);
    ) }" o) m4 Q7 }4 G

  18. , }8 _5 u4 ~# R" m! ]; V
  19.   /*Configure GPIO pin Output Level */( d' N7 k* o! i  Q+ I
  20.   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_SET);0 U6 W( z0 ]5 g% X8 |4 M) ~% a0 V8 `
  21. 8 o* Q/ g& g- g' u! U0 m
  22.   GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
    $ I( X$ u6 h5 H7 j/ i
  23.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;( g! t1 Z! `. A! h6 U" X
  24.   GPIO_InitStruct.Pull = GPIO_PULLUP;  c4 t9 `* e5 Y% X! u6 J6 }
  25.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    ( b7 T* Q5 n  Y: O& w0 {
  26.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);# P& s' c0 m& }3 z  W( g
  27. ' R8 t. ]5 x8 c
  28.   GPIO_InitStruct.Pin = GPIO_PIN_12;( u% [) s% y/ |) N, m. |1 s% w
  29.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;& l: }1 f" Z$ z$ u+ ^
  30.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    4 Q4 p/ }6 S+ L! Y+ [( C! s
  31.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;! G! R3 T. i& C9 ?8 P
  32.   HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
    * T. Y& m8 c7 R, `

  33. ! {& H2 K' w' \; {. S
  34.   GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;4 A8 U! @. C/ A: d
  35.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    8 `' K) f$ R2 J
  36.   GPIO_InitStruct.Pull = GPIO_PULLUP;! M2 t( r9 j  Z
  37.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    & |6 P. q& j' u! m( J
  38.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
    , [! b% r3 W. n' X1 {
  39. 0 {8 i6 h  R$ X6 j
  40.   OLED_RST_Clr();
    & i# y6 \% e2 K! m, S
  41.   HAL_Delay(200);% x( ]1 s- R! _/ E* O
  42.   OLED_RST_Set();5 ~5 E0 K; o0 C3 z
  43.   HAL_Delay(200);+ H- s1 I0 {2 X! D8 Y6 C8 j
  44.         & ]1 K* c& ^, N, {* u2 j
  45.   LCD_WR_REG(0x11);& e( Z& D) K% b" i4 D+ x) `' k4 W
  46.   HAL_Delay(100);9 b1 }1 y% k$ F( i. b2 v+ [

  47. 3 f. V! g5 M7 w- E0 @8 y
  48.   LCD_WR_REG(0x21);
    7 L- D; u# Z# O' U5 d  F

  49. ( D% M; H. B$ G
  50.   LCD_WR_REG(0xB1);
    ' k1 A" m3 `6 H" A4 H+ a  I- v
  51.   LCD_WR_DATA8(0x05);5 F9 o1 I) g9 m& C8 r7 p+ V, o
  52.   LCD_WR_DATA8(0x3A);+ Y' |% h9 d1 i' Z
  53.   LCD_WR_DATA8(0x3A);
    + B( a4 }! K: }

  54. 5 M; k; X2 G2 a0 ~; `% Q0 l2 e
  55.   LCD_WR_REG(0xB2);
    + P  b* d$ v9 x0 o* Z9 {
  56.   LCD_WR_DATA8(0x05);; ?2 y) u7 o  {2 W3 ]. K
  57.   LCD_WR_DATA8(0x3A);
    7 m3 G# j8 O& X4 K6 n
  58.   LCD_WR_DATA8(0x3A);
    ! B% K# A+ ]1 P: u, M8 l9 m
  59. 9 G( z( @! Z; y. s* Q* `
  60.   LCD_WR_REG(0xB3);
    3 ]; _; j3 j. m3 R7 ]7 z( o
  61.   LCD_WR_DATA8(0x05); 3 A' N+ K- Z8 e& {4 ^# ^/ N
  62.   LCD_WR_DATA8(0x3A);' p7 C- \8 ]8 m# O& W4 ?8 Y# z
  63.   LCD_WR_DATA8(0x3A);
    , Z3 V" U. i& T) |6 b4 G3 R
  64.   LCD_WR_DATA8(0x05);& o. d. b& l' Z& J
  65.   LCD_WR_DATA8(0x3A);
      }- [5 @8 u2 p$ D
  66.   LCD_WR_DATA8(0x3A);; C# A; p8 N+ X, i* `
  67. ' I, I$ k0 y' e1 t6 z
  68.   LCD_WR_REG(0xB4);
    & a. |% c" E8 I6 ?( v
  69.   LCD_WR_DATA8(0x03);$ z% r9 O' ?5 F, A1 e: G, R. ?- X
  70. 3 `* r( e5 ?7 |) B5 g8 D8 D
  71.   LCD_WR_REG(0xC0);
    # T# h( ?- Y0 ]- `6 f/ j
  72.   LCD_WR_DATA8(0x62);
    * O; X; E% s5 {$ T* \
  73.   LCD_WR_DATA8(0x02);
    ; n$ `8 z( @+ v6 n" I" Q+ P. {+ I
  74.   LCD_WR_DATA8(0x04);$ F3 Z6 j+ L5 y; E0 H
  75. & C, _1 D  |# p$ [: O
  76.   LCD_WR_REG(0xC1);- C: I+ ?% c8 d' e' E" z
  77.   LCD_WR_DATA8(0xC0);
    $ q& p2 |' a  ~* R" ]

  78. & D) S6 x8 K) ?( S1 ^
  79.   LCD_WR_REG(0xC2);
    - u4 l( A0 S) @1 k# T
  80.   LCD_WR_DATA8(0x0D);, Z8 U6 w+ ], Q* l
  81.   LCD_WR_DATA8(0x00);
    ! {: z! r4 k4 |- p, ^4 B

  82. + E6 X* p. @# f4 X
  83.   LCD_WR_REG(0xC3);
    , z# k# ?/ P3 P& E
  84.   LCD_WR_DATA8(0x8D);
    , ]" e  m: q8 N) \( \0 t5 q, S
  85.   LCD_WR_DATA8(0x6A);  
    8 B( M9 d# }  [' @1 H

  86. ) @, a* I1 C; Z' W+ n; s% {; b
  87.   LCD_WR_REG(0xC4);8 M' k8 y; f( I* i
  88.   LCD_WR_DATA8(0x8D);$ E% n. j; g/ N2 t
  89.   LCD_WR_DATA8(0xEE);. \# P) p& W; I; ^2 n7 w% H

  90. 0 a( T1 g" ^) Z4 I$ ~9 g6 s
  91.   LCD_WR_REG(0xC5);  /*VCOM*/
    ; O5 i6 @/ }' Z5 t  T
  92.   LCD_WR_DATA8(0x0E);   
    $ T1 y1 o, V1 A) S+ ~- K' G

  93.   ^* g' L, e  b/ V1 H, h
  94.   LCD_WR_REG(0xE0);
    ; o; v, ?# [- I  ?' o
  95.   LCD_WR_DATA8(0x10);
    # b7 C# G2 f" f! P- _, K
  96.   LCD_WR_DATA8(0x0E);7 p+ {$ h* a  f# E& Z
  97.   LCD_WR_DATA8(0x02);
    4 U  j% J! }/ ]: C
  98.   LCD_WR_DATA8(0x03);
      c, T1 ~/ r% c
  99.   LCD_WR_DATA8(0x0E);$ y; M0 n  l- |* A
  100.   LCD_WR_DATA8(0x07);8 c) \8 c9 s& d& j5 k3 g! @" T
  101.   LCD_WR_DATA8(0x02);1 y$ V8 }: T% r" F' @5 A+ k
  102.   LCD_WR_DATA8(0x07);% o: Z# ?+ z" C' S, `  u
  103.   LCD_WR_DATA8(0x0A);+ U$ u3 ?6 a! x
  104.   LCD_WR_DATA8(0x12);$ ?% _& m+ l' X% S' i! x8 h6 g
  105.   LCD_WR_DATA8(0x27);0 k3 f; H  J9 X, W
  106.   LCD_WR_DATA8(0x37);: r2 v; I: _& \( A5 ?( A/ X
  107.   LCD_WR_DATA8(0x00);
    ) L+ S" o$ P! u
  108.   LCD_WR_DATA8(0x0D);! Z* p! M* k: H9 n$ h; k1 r! M" i" ~
  109.   LCD_WR_DATA8(0x0E);
    2 }$ t+ O. |! F2 }, a7 c" M
  110.   LCD_WR_DATA8(0x10);  n5 {" w0 d" k; x7 }  [

  111. 3 M. P7 c% }, Y" Q
  112.   LCD_WR_REG(0xE1);" v# s, U0 s' D9 D3 h
  113.   LCD_WR_DATA8(0x10);3 g% X7 n; Z& H& L  U5 J% L
  114.   LCD_WR_DATA8(0x0E);$ e0 Y, w: H% ?/ f" p& g
  115.   LCD_WR_DATA8(0x03);! _/ {$ Q! }5 e  W
  116.   LCD_WR_DATA8(0x03);4 Y  B9 ?$ H2 u0 a
  117.   LCD_WR_DATA8(0x0F);8 ^$ P% z2 P$ Z+ ^7 @- o) i
  118.   LCD_WR_DATA8(0x06);
    . c+ T5 U3 u0 P+ L: s
  119.   LCD_WR_DATA8(0x02);
    & w5 J. S, T0 D& C" [  X
  120.   LCD_WR_DATA8(0x08);# D# J2 @$ v* d, V4 i4 W: `& s
  121.   LCD_WR_DATA8(0x0A);
    1 r% l, k% `' ~- I1 `9 [/ j0 x
  122.   LCD_WR_DATA8(0x13);
    & `+ X0 l& a  s; N9 S( |: z
  123.   LCD_WR_DATA8(0x26);
    % @; Q/ A, A  x0 z. [# l( B* \, A1 @
  124.   LCD_WR_DATA8(0x36);& ^# ^' e& i# _& D7 S$ K; {
  125.   LCD_WR_DATA8(0x00);
    $ t" [0 _0 ~1 Y( I5 y
  126.   LCD_WR_DATA8(0x0D);
    5 ?0 W; W: ?0 S/ d( Y
  127.   LCD_WR_DATA8(0x0E);
      X! B( i3 d2 v/ _
  128.   LCD_WR_DATA8(0x10);
    ; x& k) ^/ r6 O. Q# `+ V$ w
  129.   LCD_WR_REG(0x3A);; X( @+ r, g, J" K
  130.   LCD_WR_DATA8(0x05);
    . ~% _* v7 R, C" X6 c  i6 g
  131.   LCD_WR_REG(0x36);" Q/ k  ]% A  p  p6 E9 `
  132.   LCD_WR_DATA8(0x78);
    ; Q5 l1 q/ W" |  U, M- P
  133.   LCD_WR_REG(0x29);) W3 U# }/ `* f
  134. }
复制代码

# o5 |, W1 ~0 J
图片显示函数为:
  1. void LCD_ShowPicture1(u16 x1,u16 y1,u16 x2,u16 y2)
    & g/ U9 O0 G9 }3 E1 ^
  2. {
    & x% s: V5 n6 ?7 }
  3.          int i;  p% [2 Z9 H$ g% v  X1 C
  4.            LCD_Address_Set(x1,y1,x2,y2);
    $ a' J+ w( X, B  V, q
  5.            for(i=0;i<3808;i++)
    * o+ I7 R6 c3 {" D! Q" r
  6.            {) Z! C+ K! j) h9 T* k
  7.                             LCD_WR_DATA8(gImage_jsj[i*2]);, z. P8 H( o" O& r2 |5 D! p
  8.                             LCD_WR_DATA8(gImage_jsj[i*2+1]);
    9 z$ ]/ g9 L: b% r6 ^: v! {/ i
  9.            }                      / `  S, j5 b; l; t0 d+ C! D
  10. }0 ^3 C! @$ v* _5 X
  11. * E/ L  e' w: C8 j
  12. void LCD_ShowPicture2(u16 x1,u16 y1,u16 x2,u16 y2)
    6 a# H4 u, q2 b0 F- }# b
  13. {( i7 W# c: F. G4 r0 \$ O
  14.            int i;$ |; ]9 }+ {7 ^3 L1 f& H9 e
  15.            LCD_Address_Set(x1,y1,x2,y2);
    ' u3 S3 i5 l0 W, R/ i+ M* G
  16.            for(i=0;i< 12800;i++)
      N0 k, O" z3 [' W# Z0 l7 Z; n
  17.            {+ t3 [+ x; W8 i* @0 P
  18.                             LCD_WR_DATA8(gImage_moled[i*2]);4 r! D2 {. @1 A& t- P
  19.                             LCD_WR_DATA8(gImage_moled[i*2+1]);* M+ w  X6 ]7 a5 I  q
  20.            }. H8 T/ L+ \3 R' B# y7 s7 X
  21. }
复制代码
# f# ?4 O0 \8 a
实现显示测试的主程序为:
  1. int main()
    + S) x( x8 v  U+ g4 P; |$ V6 q
  2. {
    ; h: J- f- b9 Q* ~/ Q8 R) E
  3.          float t=0;
    $ l) ?4 ?7 N) c7 h3 [# N! W
  4.          u8 i;
    % V( _8 H4 o- G$ I
  5.          HAL_Init();
    ) x% b8 K9 g' Q4 R  M; `, m
  6.          SystemClock_Config();
    7 B& W" V* q, |  P/ }/ o
  7.          Lcd_Init();
    6 L, Z2 @0 t& Z# R8 X
  8.          LCD_Clear(0x043C);
    % o' |, R" ]5 a6 @; L
  9.          LCD_ShowPicture1(0,0,55,67);
    ' L& r( x$ p# h* X1 d
  10.          HAL_Delay(1000);
    - a5 n( c' K7 ^+ }+ Z
  11.          LCD_ShowPicture2(0,0,159,79);
    / n5 `$ K& x* ]! ]2 m
  12.          while(1);8 _! q  Y7 t. _
  13. }
复制代码

3 [/ R7 p7 X& s  z) n+ W9 ~" h' m
1.jpg
显示计算机图标
- L9 O/ v5 E, i  x5 ^
2.jpg
显示彩色图片
: k3 v4 j/ n# a5 G3 K2 Z) |, C6 K" k, s
工程代码:
  l: }9 Y# u3 l- f

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 手机版