|
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);
" Y& [9 T2 F2 b! g, |#defineOLED_SDIN_Clr() GPIO_PinClear(GPIO_PTE0); #defineOLED_SDIN_Set() GPIO_PinSet(GPIO_PTE0);
& u" X& t" w) M- t0 d3)OLED屏初始化函数为: - void OLED_Init(void)
# u: |! a2 K0 m/ j# o - { 6 R# r8 X( E/ E% K, U4 O
- GPIO_InitTypeDef GPIO_InitStruct;
4 ~( @5 V h: s# L( `/ T( B - __HAL_RCC_GPIOA_CLK_ENABLE();
: m! f8 G9 |" ?! v! J# N0 b# I- m - GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6;
! E0 X( l8 R: y - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;- U. U: {! ~, y5 o5 {8 v; ^
- GPIO_InitStruct.Pull = GPIO_PULLUP;
9 S6 |- |/ A- y+ K D) u - GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
: w& k1 I) X9 @2 p9 u+ Q - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
2 ~& v o! {, N, p8 R- a, B - OLED_SCLK_Set();
. b! l9 [, U- L) {, } - OLED_SDIN_Set();
+ F9 M( r0 {- H+ g% W2 w - Delay_1ms(800);- L, H. l( u/ m
- OLED_WR_Byte(0xAE,OLED_CMD);//--display off
5 v" _- |% q: X: S" S4 G( @2 L - OLED_WR_Byte(0x40,OLED_CMD);//--set start line address
3 g) e. Y; w9 [; u' {% {! ? - OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
( x: n# r9 M2 u) w5 T% X( c' a; \ - OLED_WR_Byte(0x81,OLED_CMD); // contract control
6 w' T2 q5 X" U - OLED_WR_Byte(0xFF,OLED_CMD);//--128 ! h6 Z# | D2 k2 {4 E
- OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap- k4 g- r. O" j4 }0 u
- OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
% K- F9 w. g8 o" I k - OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)( _ x/ x% B. I+ W
- OLED_WR_Byte(0x1F,OLED_CMD);//--1/32 duty
6 H; A6 c% p# Z: c - OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
& q( \$ S6 r. n- d3 Y - OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset+ [7 y+ F0 N2 `* n; b! w% x5 z
- OLED_WR_Byte(0x00,OLED_CMD);//
. q* w! r+ ] r4 V% k - OLED_WR_Byte(0xD5,OLED_CMD);//set osc division0 r8 ^0 ?3 C' h0 _
- OLED_WR_Byte(0xF0,OLED_CMD);//
2 \' v, J% N$ g" q - OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
5 W6 C: l& F' j4 l9 ~% O- J - OLED_WR_Byte(0x22,OLED_CMD);// i' b5 Q3 C, V! s+ m
- OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
; K" Y% N) B5 _ - OLED_WR_Byte(0x02,OLED_CMD);//9 N3 w$ ^/ L8 U- L# L3 {: b
- OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh3 o- x9 C! R7 H6 \6 k" g: g
- OLED_WR_Byte(0x49,OLED_CMD);//
; q# t" t9 S, n1 e# R - OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable4 U" G @* S8 d" F* r4 C+ A: B
- OLED_WR_Byte(0x14,OLED_CMD);//- ^4 y# ^' w# T! d, J6 v
- OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel$ X' T: h% I4 t6 f6 L3 g+ K5 x
- OLED_Clear();
( F/ K* N6 P4 d l3 j - }
复制代码
8 K: h8 _; _: i2 E! I; Y4)汉字显示函数为: - void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no)
6 j( l& n3 V* ~8 F - { $ R: U* i5 I' v
- unsigned char t,adder=0;+ x# |2 k8 j8 }. w" g
- OLED_Set_Pos(x,y); 1 Z. r" P' i5 @, ?
- for(t=0;t<16;t++)
" D5 N6 h& ?/ w. M - {; g( G6 u4 L# z1 `% J1 r
- OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);8 d" G* ^- I# Y! J
- adder+=1;: S; h V3 @6 {3 M1 Y2 o' M1 i) S
- }
8 G# t( |% x/ J- H; c" \5 B' z( ] - OLED_Set_Pos(x,y+1); 8 n( C0 m5 h( ~) r: Q5 }
- for(t=0;t<16;t++)3 k4 p5 z! N. ~. b& Y
- {
% Z H3 ? J- i7 j3 k( `; ? - OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);, M$ Q- B) ]6 f+ p1 M
- adder+=1;
% H' Z& I% S- }! e - }
% o2 x& J$ M. g! A" o& P$ O - }
复制代码 - S8 i' q& K: ~3 `
2. 字模提取 为了显示汉字,需要提前相应的字模,以PCtoLCD2002字模提取软件为例,在提取前需按图1所示来进行设置。 图1 格式设置 ( S, u! Y) h( v" ]
1)录入需显示的内容,如图2所示。 图2 输入提取内容
, y; [' Q$ Q& s* l2 H5 U' @) T2)编写显示函数,其内容为: - void cd()
/ q7 q6 `! c) k" h - {: `+ Q7 A& _4 ^8 f6 \. I/ w, c
- OLED_ShowCHinese(18,0,0); 9 k7 H4 N' Q- V" O7 o
- OLED_ShowCHinese(36,0,1);4 ~2 k) E3 O1 p$ |7 L6 M
- OLED_ShowCHinese(54,0,2);
7 [ S, M8 u a1 L, o" P2 j - OLED_ShowCHinese(72,0,3);
5 t! ^ } x2 {5 U0 i6 ` - OLED_ShowCHinese(90,0,4); K+ q6 |/ p. }9 `7 x
-
' q$ S, B2 w+ Y& `. `7 x* Z - OLED_ShowCHinese(18,2,5); % k; r$ t/ q/ r1 F4 A3 Z
- OLED_ShowCHinese(36,2,6);
! r: i3 Q, |& S - OLED_ShowCHinese(54,2,7); - w$ K2 M: K+ s8 m' w
- OLED_ShowCHinese(72,2,8);4 E+ X; h0 g# X( d1 q
- OLED_ShowCHinese(90,2,9);
' b6 C. N. }6 e8 o; k6 g2 a2 D" r - }
复制代码
, s% C- N% U/ Q3)编写主程序,其代码如下: - int main(void)0 y, [ t% S/ X" [& Q, U! H# Y
- {
4 V8 b5 B/ Y3 \9 x; z) ?/ P1 r$ ? - HAL_Init();/ b4 \6 G- ]! v, N9 R! O) I
- /* Configure the system clock to 80 MHz */3 o% K T( ^+ W" Q8 s
- SystemClock_Config();
9 V& r& m! J! u - OLED_Init(); 1 @$ H( l0 G; I# [- w+ t
- OLED_Clear();& h0 X9 j# d; Y
- cd();& |1 u9 j- [5 B. T+ T5 S
- while (1);1 V! I( v) R% u4 |, ]0 l9 S
- }
复制代码 : }2 j, d7 `7 f& A& N) W
4)下载并运行后,其效果如图3所示。 图3 显示效果
& k" d: O' ^: |. f4 J+ @- ?
& k/ Y8 D7 J t! d工程代码:
( }; d$ ^2 n4 m# B* c( L4 H |