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

关于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
5 Q/ Y! ?- f# G3 V) A& [, K

6 V( \7 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)
, M# n# ]: M. ^  Q
#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)
( X$ K+ \! Q  Y: k8 `5 m+ ]
#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)
. g2 B3 |5 S, T" }
#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)

8 d2 G% }, y' N4 n
#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)
% f9 D5 z* O$ P& E
#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)

/ w7 d$ U( Q- _: s6 T2 L/ Q2 z. g" x
OLED屏的初始化函数为:
  1. void Lcd_Init(void)
    + g0 ?, j6 M3 x$ \( P6 e
  2. {
    & Z/ a. c: B- H& F: t: m
  3.   GPIO_InitTypeDef GPIO_InitStruct;* D# Y/ d& N" @" S2 v# `5 l+ [

  4. - s! s- D0 \9 T1 O8 K
  5.   /* GPIO Ports Clock Enable */
    4 B& z' ?6 t/ T) |
  6.   __HAL_RCC_GPIOH_CLK_ENABLE();
    2 s! g1 N% u! `3 @3 D
  7.   __HAL_RCC_GPIOA_CLK_ENABLE();
    - `( X2 c7 c7 i. Z
  8.   __HAL_RCC_GPIOC_CLK_ENABLE();
    4 @: k+ Z& F9 q7 Q3 K. Q
  9.   __HAL_RCC_GPIOD_CLK_ENABLE();
    : V" {6 H% A# n! m
  10.   __HAL_RCC_GPIOB_CLK_ENABLE();
    ) G  ]% n' i9 c2 @# t) u! |
  11.          __HAL_RCC_GPIOF_CLK_ENABLE();( y) j, x/ D2 n' C; v
  12. ( X9 h( ]" ~2 \
  13.   /*Configure GPIO pin Output Level */- s0 ~7 Z4 U) K# f& F2 i
  14.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);" u% S! S+ Q& ~' ], m( H2 V- e  _" C

  15. 7 \, T6 r& u& A9 C* A
  16.   /*Configure GPIO pin Output Level */. @2 r+ O3 p+ f6 {  E9 v, t! Q* G
  17.   HAL_GPIO_WritePin(GPIOF, GPIO_PIN_12, GPIO_PIN_SET);7 Z# a* x% {; |3 u) N: f+ q* I6 Y' t

  18. 6 B( d  [8 k* x1 Y1 y
  19.   /*Configure GPIO pin Output Level */
    % v& G" ~; H8 ]% X( Z1 Y7 j! v5 S; N
  20.   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_SET);  N8 X% h8 {3 t& o/ S

  21. 9 R$ _/ q+ T* s6 k
  22.   GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;. `5 _, T' k% \0 s5 {
  23.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;1 x& W9 ?* Z& Y% R2 P: b8 y
  24.   GPIO_InitStruct.Pull = GPIO_PULLUP;1 L2 e# i5 Y8 B, W
  25.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;* q  B1 S9 ^! y  s5 C3 I
  26.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);8 j: K( h8 d% s2 q* X& b  \# k

  27.   Q; h, O4 R! b4 q4 r' g2 w: ~
  28.   GPIO_InitStruct.Pin = GPIO_PIN_12;$ l4 j: L+ W2 Q+ U% ~9 o0 C
  29.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;, O: U: X7 W. J+ E& X3 w' h
  30.   GPIO_InitStruct.Pull = GPIO_PULLUP;* M! B! v/ U  o9 Z8 o
  31.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    7 }4 }% k; s4 a# y) Z
  32.   HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
    + x) b5 p/ ~( k, T9 h

  33. 9 L$ X$ F" x! s
  34.   GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
    ! X* K; O1 k8 F: p3 q( B
  35.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;# _! z9 m/ q# R. h
  36.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    " _8 D8 u& E3 Y9 n
  37.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;1 L$ O; w2 L3 h% N
  38.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
    6 b! D# Y$ O2 Q% M& v! I

  39. 0 f& ?4 M5 j( X, ~! t5 w
  40.   OLED_RST_Clr();
    $ |; A7 F! g" Z6 I' C  x  I
  41.   HAL_Delay(200);
    * J" z( \: {5 l, g7 @
  42.   OLED_RST_Set();/ Y' K/ ~* E% j- v+ l; A$ b
  43.   HAL_Delay(200);( l" |3 m+ @/ }- O  e( u- q0 }
  44.         & o, R: ~: c5 `7 q% F( M9 `
  45.   LCD_WR_REG(0x11);" |7 |+ S  y  Y# P+ W1 G" s
  46.   HAL_Delay(100);
    4 p* ~9 G3 ~7 D) x9 _+ l

  47.   r1 c. f7 n% W5 ~
  48.   LCD_WR_REG(0x21);9 X0 R7 l# N5 W( }8 v

  49. - v6 N  N8 l1 H' N
  50.   LCD_WR_REG(0xB1);5 ^' |3 k! t# H0 K9 c0 k9 K, \, \
  51.   LCD_WR_DATA8(0x05);
    / u/ ]5 E) [/ F# g( f9 T
  52.   LCD_WR_DATA8(0x3A);4 }* {9 g! K/ Y. B# `2 B+ |
  53.   LCD_WR_DATA8(0x3A);
    ' F& ?- ^' h4 x$ o3 M! O9 K
  54. ( B5 w' x0 F% Y, G
  55.   LCD_WR_REG(0xB2);+ |6 D: B% F$ R- c$ b! L
  56.   LCD_WR_DATA8(0x05);
    7 i4 c" ?6 n' \* N% O
  57.   LCD_WR_DATA8(0x3A);4 F0 A8 c4 Z+ c& U$ T2 u. _
  58.   LCD_WR_DATA8(0x3A);6 S5 W! b! G" F/ d. I7 ]; C

  59. 1 s5 Y7 R4 ]$ t! N4 @) L1 W; F0 ~% L
  60.   LCD_WR_REG(0xB3);: p9 a& K; ]) O3 n* |& g4 ~
  61.   LCD_WR_DATA8(0x05);
    ) o& P; y3 E% U% a$ i# @+ g7 X
  62.   LCD_WR_DATA8(0x3A);4 _" @5 ^1 a) Q* h( p
  63.   LCD_WR_DATA8(0x3A);
    $ c+ F  V  r; ~% h' J3 _/ f& T8 l
  64.   LCD_WR_DATA8(0x05);9 u' p  K. F* ~* S: d1 U, ]
  65.   LCD_WR_DATA8(0x3A);. \5 n0 B2 B" J# M5 v
  66.   LCD_WR_DATA8(0x3A);. ?5 j5 U  a3 ~  C

  67. ) }6 v4 |; t; ]
  68.   LCD_WR_REG(0xB4);* U6 l) u! o9 r9 q$ T1 v% q1 m
  69.   LCD_WR_DATA8(0x03);
    * c5 y! r1 Q* r7 W$ m2 ]2 k
  70. , I# {9 N( S3 s  A, e6 O; |  s4 m
  71.   LCD_WR_REG(0xC0);
    6 x  a9 p/ h( D1 `* w3 `
  72.   LCD_WR_DATA8(0x62);, o" h/ A6 s; i
  73.   LCD_WR_DATA8(0x02);
    % k) r$ B9 Z& O' n( j6 h1 D2 x
  74.   LCD_WR_DATA8(0x04);# A& ?8 T- Q, U  O0 _! p
  75. * V3 ]& |+ z( q7 p
  76.   LCD_WR_REG(0xC1);
    , Z% E7 N" K$ ~! l
  77.   LCD_WR_DATA8(0xC0);; r8 }( }/ x. @! J2 K

  78. * A: g+ s* h. ]/ b9 c" G! `' n
  79.   LCD_WR_REG(0xC2);" Y, @1 d3 k# W! x5 I6 n
  80.   LCD_WR_DATA8(0x0D);4 ?% d$ a3 F3 c3 n& b
  81.   LCD_WR_DATA8(0x00);
    $ k# i2 F( v  x" @2 d: P
  82. 7 i9 H* s3 q1 {, D
  83.   LCD_WR_REG(0xC3);5 G+ {/ Q1 E0 {6 t& K
  84.   LCD_WR_DATA8(0x8D);0 A* [/ ^- P! j' k1 e: l, a' W  P
  85.   LCD_WR_DATA8(0x6A);  
    / G5 |- r0 h4 Z& P7 T  {

  86. ) a( i# ^( f6 r2 r
  87.   LCD_WR_REG(0xC4);+ K6 k2 J! S# \+ {' u' T
  88.   LCD_WR_DATA8(0x8D);% \- z9 f9 f8 ?4 ]8 \- N# `1 l9 ?- |
  89.   LCD_WR_DATA8(0xEE);
    - \# l2 ?, V% k1 {' P& h# W
  90. ' s; W' q; W. V0 `1 [' }$ O
  91.   LCD_WR_REG(0xC5);  /*VCOM*/3 J4 }' H: d! ~: H$ V0 A7 `% i
  92.   LCD_WR_DATA8(0x0E);   & O% x) V$ H* y! F
  93. ! F: N0 k9 P, e6 c% x" e& N
  94.   LCD_WR_REG(0xE0);3 P7 m2 b3 V0 e3 j. k0 o
  95.   LCD_WR_DATA8(0x10);
    4 n( d  D' ^( @" N: {
  96.   LCD_WR_DATA8(0x0E);9 |5 m  F- [# x" E
  97.   LCD_WR_DATA8(0x02);6 P' X; V8 t  N, e! {/ P
  98.   LCD_WR_DATA8(0x03);
    / O, A4 O* p' O6 l5 k- q
  99.   LCD_WR_DATA8(0x0E);4 J5 k. a- c/ x
  100.   LCD_WR_DATA8(0x07);, _, k4 y, g! ]& f
  101.   LCD_WR_DATA8(0x02);9 M% J, n% q0 l
  102.   LCD_WR_DATA8(0x07);
    " O2 Z$ [5 j. L' t% U7 ~
  103.   LCD_WR_DATA8(0x0A);) j# f  l7 s8 L; R
  104.   LCD_WR_DATA8(0x12);
    / I1 n- x" K2 H/ b
  105.   LCD_WR_DATA8(0x27);, O" M( Y5 m" v! B
  106.   LCD_WR_DATA8(0x37);
    ) Y7 b" Z3 L& o- e1 b& {
  107.   LCD_WR_DATA8(0x00);/ f, x( P- i; A' n$ w& s6 a
  108.   LCD_WR_DATA8(0x0D);
    ; N' `9 b/ G% Q6 o* K) f* C4 ?  {
  109.   LCD_WR_DATA8(0x0E);
    # P  l# p; E2 }% U$ N
  110.   LCD_WR_DATA8(0x10);
    % B9 c7 X/ W' f. ?* w
  111. 6 a4 A* ~- F* o( \, }$ ?3 d& \
  112.   LCD_WR_REG(0xE1);
    # ^6 g" Q3 C) s
  113.   LCD_WR_DATA8(0x10);
    " [# ~& j0 k$ Q: G
  114.   LCD_WR_DATA8(0x0E);2 p/ {  _) J5 \( z1 @$ B8 F" K
  115.   LCD_WR_DATA8(0x03);
    * h7 a; V% B1 _0 `: r
  116.   LCD_WR_DATA8(0x03);2 i5 V& j; ]+ Y2 D3 T7 V
  117.   LCD_WR_DATA8(0x0F);- z7 m& V+ w$ n/ h, v
  118.   LCD_WR_DATA8(0x06);! @+ L: e3 I- J& j
  119.   LCD_WR_DATA8(0x02);% G( {' ~& U! Y/ j, b% s1 ~
  120.   LCD_WR_DATA8(0x08);4 C+ D4 T4 W- b& t( Q' h$ w8 P
  121.   LCD_WR_DATA8(0x0A);
    4 i  U1 _0 y& u' C. Z
  122.   LCD_WR_DATA8(0x13);
    9 P1 j1 o- C  Z' [$ P8 m% ]2 P
  123.   LCD_WR_DATA8(0x26);
    3 O9 H$ l" [' n4 v, W
  124.   LCD_WR_DATA8(0x36);
    & U" t; v# t7 `% N9 j7 v' R
  125.   LCD_WR_DATA8(0x00);
    5 ]; N% h1 c% N. B; q' U
  126.   LCD_WR_DATA8(0x0D);
    ) k& O# n0 `2 q
  127.   LCD_WR_DATA8(0x0E);  C  r3 t! I% z% ~
  128.   LCD_WR_DATA8(0x10);# [7 t1 r: \3 c! |! v  z
  129.   LCD_WR_REG(0x3A);9 A* j4 i/ N/ T  o, y
  130.   LCD_WR_DATA8(0x05);
    + u( r5 V- E4 b: |. T+ x, ]
  131.   LCD_WR_REG(0x36);
    & ^2 S& F' G' t$ y" E5 C) ?
  132.   LCD_WR_DATA8(0x78);
    " ^  g1 x2 h3 |. s
  133.   LCD_WR_REG(0x29);
    # S  a- |) Z2 [6 h$ v
  134. }
复制代码
, N; W5 j! g$ R0 N' f% {1 P; |
图片显示函数为:
  1. void LCD_ShowPicture1(u16 x1,u16 y1,u16 x2,u16 y2)5 {3 u( N; N. f$ V! b
  2. {9 V/ G% k# D% s4 ~. ~$ @; O
  3.          int i;
    0 Q! C+ ^" P/ P  W  a
  4.            LCD_Address_Set(x1,y1,x2,y2);
    ) }0 T+ g. L1 ~- y
  5.            for(i=0;i<3808;i++)" T3 A( K1 R6 N+ O. a  f2 o4 J
  6.            {
    " ^/ |; K: g  U1 U4 {9 B
  7.                             LCD_WR_DATA8(gImage_jsj[i*2]);4 B) P, Y% {7 E5 h
  8.                             LCD_WR_DATA8(gImage_jsj[i*2+1]);
    . S7 Y% E; P% u/ `! @
  9.            }                     
    7 R: _) n3 d$ X% Y+ R! Y
  10. }7 p0 w0 }1 x" R9 `
  11. , v" Z. I% }* O/ {  W3 R
  12. void LCD_ShowPicture2(u16 x1,u16 y1,u16 x2,u16 y2)
    ) C3 S. h: f; `# R
  13. {5 y  |  ]+ g. ]7 f, {9 H1 [
  14.            int i;# W" F% {; X% k# w0 \4 `
  15.            LCD_Address_Set(x1,y1,x2,y2);
    ' _" ~# |2 Q3 b) @- `5 a( ~' ?
  16.            for(i=0;i< 12800;i++). `- L# k% o  j- Z! W$ x
  17.            {/ [6 g0 d  D! f
  18.                             LCD_WR_DATA8(gImage_moled[i*2]);
      I1 g  ~! B9 B, A8 U7 r# s5 B. e
  19.                             LCD_WR_DATA8(gImage_moled[i*2+1]);, V6 z; D& k- g3 h& N" K- I
  20.            }
    % c' j( d) f" B9 ^% p0 K. O
  21. }
复制代码

5 r. o- x' S! r3 U
实现显示测试的主程序为:
  1. int main()+ o/ a- g  R$ o' c8 B
  2. {
    " n- v, ^+ [# J2 w/ W1 p. K
  3.          float t=0;
    ! p, V% L: k" _/ L8 Z& o, S4 O
  4.          u8 i;
    3 p9 I! l+ O  A/ r3 m
  5.          HAL_Init();& c5 T8 y  K( T8 a) _: [
  6.          SystemClock_Config();
    ; S9 M8 W# b* B  s2 W: U$ w! u9 n
  7.          Lcd_Init();- g+ u/ V# |0 ?; B8 D
  8.          LCD_Clear(0x043C);
    2 H3 Z3 s2 k3 S( R
  9.          LCD_ShowPicture1(0,0,55,67);, K8 |# U( B! z  o
  10.          HAL_Delay(1000);( G. ^$ H3 a/ R9 a$ C
  11.          LCD_ShowPicture2(0,0,159,79);7 u' p- c, o3 T
  12.          while(1);" S4 J$ _7 z2 q+ ?0 Z6 G0 w( R
  13. }
复制代码

, J0 T1 [, r+ Z; z- l; {
1.jpg
显示计算机图标
, A/ {( u& Y6 S9 V* k0 x
2.jpg
显示彩色图片
5 B0 `7 ~/ z5 L+ i. X
: p' `" W2 t; L8 ^( b7 f/ ~7 R4 }工程代码:  c. I$ [5 s$ c" M8 `5 _" R

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