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

关于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);
* z; ~3 r1 O$ O! ?5 N: h( [
#defineOLED_SDIN_Clr() GPIO_PinClear(GPIO_PTE0);
#defineOLED_SDIN_Set() GPIO_PinSet(GPIO_PTE0);
! I: i+ P  S& B+ w* A
3)OLED屏初始化函数为:
  1. void OLED_Init(void): I- {, R' g8 a5 f+ x
  2. {   
    ( X3 l9 E- }7 Q
  3.        GPIO_InitTypeDef  GPIO_InitStruct;
    8 i% D1 s" Z/ t( X( N7 _2 e
  4.        __HAL_RCC_GPIOA_CLK_ENABLE();5 Z. e1 ^# {6 u/ X3 A
  5.        GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6;      
    - ]4 x5 q1 {# z) l9 U
  6.        GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
    / [6 a+ L$ Y1 o! B# u
  7.        GPIO_InitStruct.Pull  = GPIO_PULLUP;1 X7 F( [9 ~9 c) k2 |# n
  8.        GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
    / E+ q8 X) N" v6 }2 H
  9.        HAL_GPIO_Init(GPIOA,   &GPIO_InitStruct);
    2 n: w0 h0 y6 E; c( b
  10.        OLED_SCLK_Set();
    $ v2 Y) ?( N, Q- P+ V  t
  11.        OLED_SDIN_Set();
    / _3 E- e4 o6 B
  12.        Delay_1ms(800);, Y% C6 `6 ^( g2 [
  13.        OLED_WR_Byte(0xAE,OLED_CMD);//--display off  X) g* y# Q# A; p) K
  14.        OLED_WR_Byte(0x40,OLED_CMD);//--set start line address
    " W7 f- L0 K8 W. \( K
  15.        OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
    ; A3 I; O. t5 ?, T9 Z' E4 L
  16.        OLED_WR_Byte(0x81,OLED_CMD); // contract control" J9 J( }. |" a( s; l! u, V
  17.        OLED_WR_Byte(0xFF,OLED_CMD);//--128  , u# O$ a  ~9 y& h7 D
  18.        OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
    2 @8 i& L4 o+ b$ I
  19.        OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse! X* w4 U* V/ Z! F9 r2 P$ `5 r
  20.        OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
    ! P% Q" j+ N% B& I( `7 v3 ~
  21.        OLED_WR_Byte(0x1F,OLED_CMD);//--1/32 duty5 d! ]4 r4 f1 U
  22.        OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction* x3 c& X: O' H; w
  23.        OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset9 a3 [( Z. x7 D2 R
  24.        OLED_WR_Byte(0x00,OLED_CMD);//
    ' q8 S/ g% h  ?3 e
  25.        OLED_WR_Byte(0xD5,OLED_CMD);//set osc division" L, y; G1 `) R5 _5 W+ _
  26.        OLED_WR_Byte(0xF0,OLED_CMD);//
    ( e! w7 G7 z0 Z8 D. B# ]
  27.        OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
    8 h) s/ e5 Q; R! g$ W
  28.        OLED_WR_Byte(0x22,OLED_CMD);//+ j4 P- E) E6 w- v
  29.        OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion/ k* J# l* x2 |  u# l
  30.        OLED_WR_Byte(0x02,OLED_CMD);//9 x8 I6 F' Z$ s+ r# Q  B
  31.        OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh4 O! \4 D% G4 r& U! n/ _  I
  32.        OLED_WR_Byte(0x49,OLED_CMD);//
    5 r- u2 K( e* @2 L! {4 f% W
  33.        OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable! x: S. d' c4 @, n
  34.        OLED_WR_Byte(0x14,OLED_CMD);//2 w9 l3 l7 M' |' ]( ]7 l+ h
  35.        OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel! E# u: d8 k, q
  36.        OLED_Clear();9 W7 C8 u$ q6 E9 Y' U
  37. }
复制代码

' X5 ]) C' v, M; ~2 w
4)汉字显示函数为:
  1. void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no)
    ' Y$ e5 g* W% j1 L6 b6 e
  2. {                            0 [- K# i9 M  G! h" l4 A
  3.        unsigned char t,adder=0;
    ( u: V- ^: ~2 b1 u  L
  4.        OLED_Set_Pos(x,y);     
    + H2 {3 ^1 G' c6 D1 {4 `$ H
  5.        for(t=0;t<16;t++)$ L- g0 O! p- i8 v6 f# y' m
  6.        {1 W' m7 K( m, d/ L: j
  7.                             OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
    ; l+ g+ C2 A5 J
  8.                             adder+=1;
    - w$ b$ `9 y6 I4 q% x# J
  9.        }1 ~- V( I: z- R9 r7 U2 O" \2 I
  10.        OLED_Set_Pos(x,y+1); 3 k/ E  o3 w, {
  11.        for(t=0;t<16;t++)
    3 I1 j9 S# T; w' ^5 R2 g! q
  12.        {     
    : V4 ]" Y1 F8 ~3 A2 J
  13.                             OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);$ N$ r4 {  j; M+ P; t3 k4 Y
  14.                             adder+=1;: u# O% D  y2 X
  15.     }                                  6 E" A# D! F7 e5 R: g3 M, |. L
  16. }
复制代码

) |. o, u0 F- P" y5 ?
2. 字模提取
为了显示汉字,需要提前相应的字模,以PCtoLCD2002字模提取软件为例,在提取前需按图1所示来进行设置。                              
1.jpg
图1 格式设置
6 @# X* T4 w, g) T6 R. j, S3 V
1)录入需显示的内容,如图2所示。
2.jpg
图2 输入提取内容

3 a& R; N% f) e- d. [
2)编写显示函数,其内容为:
  1. void cd(). _4 _5 l6 l4 T( u+ V, e; G4 k! ^9 ]# b
  2. {
    , Z/ d9 X% ]. M! w8 s/ \
  3.        OLED_ShowCHinese(18,0,0);  
    & w/ a& z$ ]( a9 S) K
  4.        OLED_ShowCHinese(36,0,1);
    ! V) m3 N, U% y& E2 W
  5.        OLED_ShowCHinese(54,0,2);
    4 o! C# Z' m7 t) x0 Z
  6.        OLED_ShowCHinese(72,0,3);6 d( Y0 Q; C6 }6 T, ]5 E  r2 i2 [
  7.        OLED_ShowCHinese(90,0,4);" J# c. d: H6 p, g+ i( n. D
  8.       2 w9 q7 M9 g* D6 K
  9.        OLED_ShowCHinese(18,2,5);  
    - K$ |% c* z+ C' Y* {) q
  10.        OLED_ShowCHinese(36,2,6);
    5 H- ?8 ?3 z+ Y8 N
  11.        OLED_ShowCHinese(54,2,7);
    2 b* }9 o! `- k" Y$ ^
  12.        OLED_ShowCHinese(72,2,8);, q8 ~+ E, Z8 X2 _" O) h' P
  13.        OLED_ShowCHinese(90,2,9);0 T0 H1 X9 {4 W) `, p& _' K( t
  14. }
复制代码

& R7 [0 c, i# f8 j+ [
3)编写主程序,其代码如下:
  1. int main(void)$ r/ v2 c/ W5 `8 d8 s7 Y9 Q! b
  2. {, ~; P2 T" N& m: Q3 h) t4 P2 H
  3.   HAL_Init();
    " f  i. U8 E+ K# k9 M3 c. f* a
  4.   /* Configure the system clock to 80 MHz */
    ! V* o% M* g9 Q5 t$ m' y
  5.   SystemClock_Config();& f) e) u1 }/ F5 ?4 z! H1 E- U6 ^  F
  6.   OLED_Init();                    6 Z: a1 G- ~0 {9 l% _
  7.   OLED_Clear();
    , D3 d( R, m$ g, L( |6 a! \
  8.   cd();
    6 I1 X* n, d( f% Q" W" G  J
  9.   while (1);
    % g% @$ }1 ^3 w) ~# F6 y1 c& g
  10. }
复制代码
, \: p9 ~. c( ^+ c7 o, }4 ?" C" q; h
4)下载并运行后,其效果如图3所示。
3.jpg
图3 显示效果# {, m$ h0 x' l4 u+ H0 h

8 y9 C$ Y+ j' i* l/ ^1 o( o. T$ q工程代码:
! K9 A3 G8 X1 v" ^% B4 q3 m+ |& W

0.91_OLED.rar

下载

3.65 MB, 下载次数: 5

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

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版