PIC16F15324开发板是一款小巧的开发板,它板载了LED和KEY 等基本测试单元,可以完成简单的学习和测试目标。为了充分体验和展示PIC16F15324的性能,在原开发板的基础上通过配置I2C接口的OLED屏来显示信息,使用UART来控制MP3音乐模块来播放音频文件,使用KEY选取播放内容,从而构成了一个可以显示中文歌单的MP3播放装置,其整体构成见图1所示。8 P( c W+ E* A% ?
* H* D9 k4 E; ^3 i, c" K
图1 播放器整体构成
- U6 ~* t& ?) b3 T$ Z
3 @2 R" X( e% [/ F" m8 p" q/ X. i在设计过程中,主要经过3个阶段:: } R* D Y" x/ f O' U
1) 引脚配置阶段) {0 f* M# n3 f0 k( c* p Z
2) 功能程序设计阶段, R" K% {* ?2 e+ U& d8 {/ o0 m
3) 功能测试阶段
$ R# ^5 S; C! |, W- W1. 引脚配置
5 X; d6 W8 g2 n9 j1 H5 ^ NPIC16F15324对于开发工具的限定,这里是使用MPLABX IDE v5.45为开发工具,并添加MCC进行引脚功能的配置,其引脚配置情况如图2所示。其中,PA0连接OLED屏的数据引脚,PA1连接OLED屏的时钟引脚;PC4连接MP3播放模块的串口接收引脚;PA5连接按键引脚;PC1作为备用引脚,以便调节音量。1 d* Q9 F, k( S$ @7 p5 V) E
w- }. R' j0 V4 X+ n图2 引脚功能配置
2 w5 o# G+ u' D& X此外,因程序设计的需要,还选取了延时功能,见图3所示。
6 T& k$ W1 }" f1 J' q; Q0 J1 V8 H; S" N) P
% _) q4 Z0 E3 A图3选取延时功能
! X% M3 q. w: g! ~2 {在完成了引脚的配置后,点击“Generate”即可生成程序框架及程序。
: W# F- a: k' t t/ g [4 l2 j; L2. 功能程序设计; m) ]3 _. A( f. |0 N/ D! e8 X
1) 显示程序设计6 p% x6 G2 e, g5 d$ h7 w
#define OLED_SCLK_Set() SCL_SetHigh()% Q W I5 M, t, d T
#define OLED_SDIN_Set() SDA_SetHigh()
: x% X0 J7 W) Q' w3 T+ `3 n1 I相应的OLED屏初始化函数为:
" L, ]5 @5 C; |7 |7 r- Cvoid OLED_Init(void)% L4 x8 w3 ]+ X/ \5 H3 J7 u* n
{
1 C( o+ S- O# D, l( [ ]) q8 X9 r5 R% S Write_IIC_Command(0xAE); //display off& V4 j; {# H1 ^$ L
Write_IIC_Command(0x20); //Set Memory Addressing Mode
, o& W R* d1 k Write_IIC_Command(0x10);; t! X! @% c, m- p/ ~" Q* y
Write_IIC_Command(0xb0);//Set Page Start Address for Page Addressing Mode,0-7, U+ N" X! P8 [, b! e! q
Write_IIC_Command(0xc8);//Set COM Output Scan Direction
) n% x# W( {7 l0 ?5 K Write_IIC_Command(0x00);//---set low column address
1 { m2 }: Q4 S: j8 m Write_IIC_Command(0x10);//---set high column address
5 ]( @" [* K' A0 C# x Write_IIC_Command(0x40);//--set start line address* i2 {( g5 j3 |+ u1 K! j4 N- l, U6 e, }
Write_IIC_Command(0x81);//--set contrast control register
# D, x! O0 x6 A+ y Write_IIC_Command(0xdf);
7 a/ i( H% K: ^7 {" Q4 H Write_IIC_Command(0xa1);//--set segment re-map 0 to 127
$ Q8 R) A- k% g5 }+ P: V Write_IIC_Command(0xa6);//--set normal display/ z! u) z% {8 s# m& o% @
Write_IIC_Command(0xa8);//--set multiplex ratio(1 to 64)
: ^9 L0 r) M+ Q k0 G Write_IIC_Command(0x3F);//
m: ~2 b7 g9 ]4 U! R& a! E Write_IIC_Command(0xa4);//
5 b" W6 X9 \- z Write_IIC_Command(0xd3);//-set display offset6 V# M1 O& U# C' A( s. z7 ~
Write_IIC_Command(0x00);//-not offset
( N3 t' F" E. C D" M: E% C Write_IIC_Command(0xd5);//--set display clock divide ratio/oscillator frequency5 e: k3 Z7 Q$ H" D& ^
Write_IIC_Command(0xf0);//--set divide ratio
$ O2 j) r- \' X9 z Write_IIC_Command(0xd9);//--set pre-charge period# S3 o* Q$ u) E# f2 X* L4 J2 }
Write_IIC_Command(0x22); //: P( o& n D5 N2 O5 g
Write_IIC_Command(0xda);//--set com pins hardware configuration
0 N) `: m* i( D4 m Write_IIC_Command(0x12);1 g2 K; i7 M, D/ H2 L
Write_IIC_Command(0xdb);//--set vcomh
! i' P+ u9 V3 X1 D0 \' _$ D Write_IIC_Command(0x20);//0x20,0.77xVcc
$ ~3 F! j; e& `' Z" ~ Write_IIC_Command(0x8d);//--set DC-DC enable
/ D6 ]- `! `, K, P8 A' ?2 O: ? Write_IIC_Command(0x14);//6 x. s) d3 H: s8 C7 F3 O
Write_IIC_Command(0xaf);//--turn on oled panel
# Q" o \, Z+ R: F+ U OLED_Clear();
1 b* k; S0 a; \5 s+ a3 N0 z" | }
1 l2 k* T) H1 X: I- C( z
- B! a# r) V$ A8 c' L" A, d- V4 n0 A" v* Z4 V
2) 提取字模及歌曲选择5 ]' \2 Z- g$ ?; s
为了实现图4所示的歌曲选择界面,将所用到的汉字字模用字模提取工具提取出来,并构建了小字库。
: R$ b# j8 r p6 O: Q' q; X- [; s- J# D/ m
3 j3 A) H& e% J6 a图4 歌曲选择界面
4 s9 R1 H( k1 J
* P1 U) h" m) F* A( r0 p M图5 提取字模
) B9 C) A X# m: x7 y汉字的显示函数为:
# c3 F) a* m9 ]void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no)
: V; h$ M% y/ s) _$ l# j! o {$ A) m) u. w b& S% z
unsigned char t,adder=0;$ d& V \ V3 R
OLED_Set_Pos(x,y);# h4 o/ e2 G, ?% w4 v+ }# J' f
for(t=0;t<16;t++)3 A$ j. L' e6 k- A( f
{
7 p5 t, [ B/ X$ X9 ` OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
# n5 r) I( d- x1 D# o2 \" Y% B adder+=1;
5 h; t- s- l b! }: ^# [# X9 k8 s4 G }0 B5 F ~- Y( n( i
OLED_Set_Pos(x,y+1);- J/ u, K: @( c
for(t=0;t<16;t++) R) n4 V! ^# `5 K5 D) \1 i
{
) A: A/ B3 E, _+ @9 T OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);6 {* S4 `! W( w% D, Z' D# l
adder+=1;& X; G0 K$ ]) S+ k
}
3 Z) w1 H3 l8 G- P7 q }
$ D; |8 U: F1 q) ^0 L1 l 6 `0 R$ ]" w4 |7 |+ R4 ^
借助开发板上的按键,可实现播放歌曲的选择,其原理图如图6所示。5 _; i) u# \* K: |* k; d# r% e
# ? o2 @' E8 O$ z图6按键原理图
/ w- L6 `7 M3 I1 y在按键的控制下,实现歌曲选择的程序如下:void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no)
& o8 U O* F; w7 t( v0 s8 d {
; a! ~& V2 V" V8 O" `7 d unsigned char t,adder=0;: E! d- u6 f3 o. }
OLED_Set_Pos(x,y);
) \3 W" T5 h. f" F! o for(t=0;t<16;t++)
( E7 r# H' Z7 F. E8 r {
0 \. E2 S! u, E OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);) {. s( o( a3 n/ q& {
adder+=1;
$ E3 J% I8 U! }5 h& v }
0 w, I3 d& s: [ OLED_Set_Pos(x,y+1);
$ k, i+ p1 {* Z" N! P% T l5 E for(t=0;t<16;t++)0 n% u4 u {0 ^! A* T. ?
{
; h& w/ ?: G. T& R/ Y OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
/ E/ R% [# F% G- @& F8 f# L adder+=1;+ j% ?3 {- T& b6 Y( k; t
}
5 ?- B# U) p f. H; e9 E2 O9 A } 8 q( D% U2 j; T% i
# S: w$ K# X. B! h5 \: X; s
: d% k) c: w8 D
0 p% G( s7 n' y: h. z0 V3)串行通信及应用
% K$ R$ M1 T* ]( b6 ?由于MP3播放模块是支持串口控制的,故这里用串口的发送功能来发送控制指令,其引脚排列如图7所示。% A- m' M$ O; l, W! {/ z3 x; |
; K$ {. m7 V. Q3 w3 Z: h: _图7 MP3播放模块引脚排列3 ~5 m' h3 H- U. i$ _# m, l1 u9 C4 H; h
为便于指令的方式,特将指令存放到数组中,其内容如下:
( g+ n" @0 ^" P0 D# |/ ^' Aunsigned charcmd3[10] = {0X7E, 0xFF, 0x06, 0X03, 0x00, 0x00, 0x01, 0xFE, 0xF7, 0XEF};//*play index
1 L. T$ x% T" R$ J6 Sunsigned charcmd6[10] = {0X7E, 0xFF, 0x06, 0X06, 0x00, 0x00, 0x10, 0xFE, 0xE5, 0XEF};//*set Volume; l! O, u, G: t9 P; U/ z5 N
此外,播放指定乐曲的指令为:
& i" I2 s' r, U; ]* r! Z1 lplayn(num);for(i=0;i<10;i++){ EUSART1_Write(cmd3);}调整音量的指令为:setVolume(18);for(i=0;i<10;i++){ EUSART1_Write(cmd6);}
+ |4 n% K4 L: ]8 v3. 功能测试# p. _7 c" D) Z; x9 K8 l3 c! D
以MP3指令发送为例,其功能验证界面如图8所示。
$ Q, s9 v: `& R
" q c. d) J* A* ~图8 指令发送验证
+ v+ g0 k. S; v/ X3 h7 p# v6 G
6 ?+ ?! s2 K1 P& u6 }6 Y7 l
图9 开发板驱动测试
" h7 F+ b( ]6 c3 x0 P在完成各环节的测试后,程序的编译结果如图10所示,看见该设计对存储资源的占用还非常高。6 O. x9 @0 W- U) y1 G9 L q
, H: [7 Q5 x2 _# }$ |
图10 编译结果; c: K& c# V6 g k
此外,我们还进行一项T卡测试,如果仔细观察就会发现,在MP3播放模块上所用的T卡而不是TF卡。经实际测试,效果一样良好。
% J) g5 P9 p9 ?+ ~: L
+ {2 Y* b8 z9 ]
图11 初始界面
$ b/ Q3 n2 O" U$ d( j6 P
7 V$ ]: d8 A2 R! S图12 播放界面
4 v$ ^6 V- {6 U& b- S! b8 T由此可见PIC16F15324开发板虽然体型小,功能有限,但小芯片依然有大能量,在外设的配合下也能显示中文菜单,也能播放语音等。
$ x% _ w& _, m' P, O0 Z/ D 演示视频:0 s5 x! u: b% ?9 G$ P* x2 b. G
https://mp.weixin.qq.com/s/5tl7GiDtJFMpc-QQ_arQpQ
* k: z3 }8 T- r$ y
0 [ B J8 u3 n |