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

关于NUCLEO L496ZG的单色0.91'OLED屏显示例程分享

[复制链接]
jinglixixi 发布时间:2020-8-18 14:01
OLED屏是一种小巧的显示器件,特别是I2C接口的OLED 屏更能节省I/O口资源。本次使用的是一款0.91'的单色OLED屏,它比常规的OLED屏要长且窄,故更适于显示信息和参数,也更适于用在便携装置上。
1. OLED屏显示
1)OLED屏与NV32F100的连接关系如下:
SCL  ---  PA5
SDA  ---  PA6
2)为进行显示定义引脚输出高低电平的语句为:
#defineOLED_SCLK_Clr() GPIO_PinClear(GPIO_PTE1);
#defineOLED_SCLK_Set() GPIO_PinSet(GPIO_PTE1);

3 c& E$ ]; v/ {4 p( F: M
#defineOLED_SDIN_Clr() GPIO_PinClear(GPIO_PTE0);
#defineOLED_SDIN_Set() GPIO_PinSet(GPIO_PTE0);

# T* ?2 m9 E; v$ Z* z7 H/ p6 z, W
3)OLED屏初始化函数为:
  1. void OLED_Init(void), p: ]/ x5 W5 r# [
  2. {    ' C+ _; z$ m. z. J, g2 U& v
  3.        GPIO_InitTypeDef  GPIO_InitStruct;
    7 r6 V* P  \* S
  4.        __HAL_RCC_GPIOA_CLK_ENABLE();$ t: N. p" I' L& A
  5.        GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6;      
    + T) F7 s, f& `% m# }  ^
  6.        GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
    . q# M; p5 n) k* q0 Y$ M$ f: u/ c
  7.        GPIO_InitStruct.Pull  = GPIO_PULLUP;  S( t; g) y' p+ k' q7 a
  8.        GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
    7 M- P- A/ T; ~6 L9 n% Y+ M  x) G  U
  9.        HAL_GPIO_Init(GPIOA,   &GPIO_InitStruct);
      D; W  e5 [( @2 J
  10.        OLED_SCLK_Set();
    . |$ a4 F) w& c* y& T; b9 h
  11.        OLED_SDIN_Set();
    0 F# M1 u0 q) d/ Q
  12.        Delay_1ms(800);1 P# l5 C/ I3 B- t2 O5 I% L( }
  13.        OLED_WR_Byte(0xAE,OLED_CMD);//--display off$ v& g( Z( ~+ I! C
  14.        OLED_WR_Byte(0x40,OLED_CMD);//--set start line address : i5 s8 u( G( D% {( P( d
  15.        OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
    8 P% H# Q- t% L5 D% R) K
  16.        OLED_WR_Byte(0x81,OLED_CMD); // contract control% {' F' r* q4 M1 g# \! B% p
  17.        OLED_WR_Byte(0xFF,OLED_CMD);//--128  3 t# q" X2 `( |- z& C3 L( t, z
  18.        OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap, _7 h& G, x* E* n0 i0 c
  19.        OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
      o" G8 }& X$ K& x, _7 B3 X7 Q
  20.        OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
    + I9 k' X6 b4 s
  21.        OLED_WR_Byte(0x1F,OLED_CMD);//--1/32 duty
    4 b- P5 s! M% a- h& C
  22.        OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
    9 ^, \. U( C7 S. i6 Z  W
  23.        OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
    5 @+ B0 E/ I) A' i0 F. e
  24.        OLED_WR_Byte(0x00,OLED_CMD);//& P! n* `% ]8 }7 |# G* T% ~/ v
  25.        OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
    ; k( D( A9 z& {$ b
  26.        OLED_WR_Byte(0xF0,OLED_CMD);//3 z+ Z; l! G+ k6 k8 U0 Q
  27.        OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period) q5 }- D4 a& X0 j6 ~( I  b
  28.        OLED_WR_Byte(0x22,OLED_CMD);//8 l$ c7 |5 Z  b6 d) r  ^& A
  29.        OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
    / O4 C% a! {3 R2 @$ ~: b) S
  30.        OLED_WR_Byte(0x02,OLED_CMD);//
    $ l+ V+ R8 y) K( u  k3 b
  31.        OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
    , T- [. m# j4 @* V
  32.        OLED_WR_Byte(0x49,OLED_CMD);//
    9 E3 M7 U- K/ K; ?4 R# s* O7 g
  33.        OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
    / P" d0 ]' I  {+ m
  34.        OLED_WR_Byte(0x14,OLED_CMD);//
    % u# x0 k3 L. U# P( R
  35.        OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
    ; i9 ]5 K, X( ^- M, T# E* z2 R! _7 A
  36.        OLED_Clear();
    & ]# s: N2 g& g% b' p0 `8 E& @9 J! I4 g
  37. }
复制代码

, O  T; r' s2 \
4)汉字显示函数为:
  1. void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no)% p5 U3 `5 s! ?" K$ W
  2. {                            ; B# D- }0 \: k) Q1 N8 N
  3.        unsigned char t,adder=0;
    / F1 u! j5 \3 L9 b% `; U7 n
  4.        OLED_Set_Pos(x,y);     0 j, X* R  n6 p! ?, ?  I/ |4 Z( @6 ?
  5.        for(t=0;t<16;t++)
    + A8 A) K+ l) k3 C
  6.        {
    ) u* w! u- l0 U2 n- \
  7.                             OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
    ' R: l" A/ t1 O! K" F! }# G
  8.                             adder+=1;
    % ]  Q" ^3 [- f/ x- z# h
  9.        }. [" X% U$ F/ }4 I3 M
  10.        OLED_Set_Pos(x,y+1);
    8 k6 }# G1 r; N2 f1 k" z8 k" [/ o
  11.        for(t=0;t<16;t++)( I2 y( ?" _% w! }9 ]$ h
  12.        {     
      r/ p, a& q, Q
  13.                             OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
    3 }. g# M3 |' Q% e
  14.                             adder+=1;, h0 U4 o6 V1 G' K( A
  15.     }                                  - D5 w! K7 ^2 U7 V
  16. }
复制代码

! T/ k2 i% c( |$ h" ]/ M  g
2. 字模提取
为了显示汉字,需要提前相应的字模,以PCtoLCD2002字模提取软件为例,在提取前需按图1所示来进行设置。                              
1.jpg
图1 格式设置
, q$ T  M1 U; L
1)录入需显示的内容,如图2所示。
2.jpg
图2 输入提取内容
/ @0 {: f& e# G/ k
2)编写显示函数,其内容为:
  1. void cd()5 F0 Y3 u% n) Q  Y
  2. {3 G7 [9 n' v8 N8 T' {2 d7 ^
  3.        OLED_ShowCHinese(18,0,0);  0 S6 Z% I  I+ Y$ s; Q# j' d
  4.        OLED_ShowCHinese(36,0,1);
    % S& }; h4 q2 a% b
  5.        OLED_ShowCHinese(54,0,2);
    5 ~1 x9 j1 b' p" u% W3 A6 W1 ]7 b
  6.        OLED_ShowCHinese(72,0,3);4 t6 m1 P) K/ X
  7.        OLED_ShowCHinese(90,0,4);
    % z+ ]% A7 R6 ]0 s$ p0 d& ]
  8.       
    0 O; c' V4 Z6 j6 ]7 x9 j
  9.        OLED_ShowCHinese(18,2,5);  7 l% J, g, ^; e4 R1 v
  10.        OLED_ShowCHinese(36,2,6);! H9 R2 ]" q, R$ N: w
  11.        OLED_ShowCHinese(54,2,7); . s# [5 A- n# l% b( [3 N
  12.        OLED_ShowCHinese(72,2,8);- X1 a. y" T; P' S3 W: Y
  13.        OLED_ShowCHinese(90,2,9);( e+ G6 a, O+ X8 E+ @- r0 L
  14. }
复制代码
, J' c0 Q2 b: y$ r
3)编写主程序,其代码如下:
  1. int main(void)8 N9 J) i2 {9 o/ v" c
  2. {3 J* j: p* Y1 Z0 R. m
  3.   HAL_Init();# P" L4 _9 u: v+ D; J7 O" t
  4.   /* Configure the system clock to 80 MHz */2 C$ a2 a3 ^- B/ _- v5 s
  5.   SystemClock_Config();$ M# @. Q. [0 n4 ^- }$ b
  6.   OLED_Init();                    
    - U8 n) `; z" N+ @4 [7 r
  7.   OLED_Clear();2 `' n# o( D. R. z
  8.   cd();$ L7 C$ A. Q  w4 j; ^& M7 T
  9.   while (1);4 h: d7 M0 g. N- d
  10. }
复制代码

5 P% Q) I( K/ U5 t1 ^0 F
4)下载并运行后,其效果如图3所示。
3.jpg
图3 显示效果
7 q6 i5 Y9 c. `3 ~
, S$ A/ @1 g7 c# I! N工程代码:
8 c9 T3 {1 f7 `; U% b# I5 c3 T

0.91_OLED.rar

下载

3.65 MB, 下载次数: 5

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

举报

0个回答

所属标签

相似分享

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