锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

MCC、超详细干货:用PIC单片机做一个MP3音乐播放器

时间:2021-09-17 19:52:37

出品 21ic论坛 jinglixixi

网站:bbs.21ic.com


PIC16F15324启垦板是一款玲珑的启垦板,它板载了LED和KEY 等基础尝试单位,不妨完毕简略的进修和尝试目的。为了充足感受和展现PIC16F15324的本能,在本启垦板的前提上经过摆设I2C交口的OLED屏来显现信息,运用UART来统制MP3音乐模块来播搁音频文献,运用KEY采用播搁实质,进而形成了一个不妨显现华文歌单的MP3播搁安装,其完全构偏睹图1所示。

图1 播搁器完全形成
在安排历程中,重要经过3个阶段: 1) 引足摆设阶段 2)  功效步调安排阶段 3) 功效尝试阶段
1.      引足摆设
PIC16F15324关于于启垦东西的规定,此地是运用MPLABX IDE v5.45为启垦东西,并增添MCC举行引足功效的摆设,其引足摆设状况如图2所示。 个中,PA0对交OLED屏的数据引足,PA1对交OLED屏的时钟引足;PC4对交MP3播搁模块的串口交管引足;PA5对交按键引足;PC1动作备用引足,以便安排音量。
图2 引足功效摆设
另外,因步调安排的须要,还采用了延时功效,睹图3所示。
图3采用延时功效
在完毕了引足的摆设后,点打“Generate”即可天生步调框架及步调。 2.      功效步调安排 1)  显现步调安排
#define OLED_SCLK_Set()   SCL_SetHigh() #define OLED_SDIN_Set()   SDA_SetHigh() 相映的OLED屏初始化函数为:
  1. void OLED_Init(void)

  2. {

  3. Write_IIC_Command(0xAE); //display off

  4. Write_IIC_Command(0x20); //Set Memory Addressing Mode

  5. Write_IIC_Command(0x10);

  6. Write_IIC_Command(0xb0);//Set Page Start Address for Page Addressing Mode,0-7

  7. Write_IIC_Command(0xc8);//Set COM Output Scan Direction

  8. Write_IIC_Command(0x00);//---set low column address

  9. Write_IIC_Command(0x10);//---set high column address

  10. Write_IIC_Command(0x40);//--set start line address

  11. Write_IIC_Command(0x81);//--set contrast control register

  12. Write_IIC_Command(0xdf);

  13. Write_IIC_Command(0xa1);//--set segment re-map 0 to 127

  14. Write_IIC_Command(0xa6);//--set normal display

  15. Write_IIC_Command(0xa8);//--set multiplex ratio(1 to 64)

  16. Write_IIC_Command(0x3F);//

  17. Write_IIC_Command(0xa4);//

  18. Write_IIC_Command(0xd3);//-set display offset

  19. Write_IIC_Command(0x00);//-not offset

  20. Write_IIC_Command(0xd5);//--set display clock divide ratio/oscillator frequency

  21. Write_IIC_Command(0xf0);//--set divide ratio

  22. Write_IIC_Command(0xd9);//--set pre-charge period

  23. Write_IIC_Command(0x22); //

  24. Write_IIC_Command(0xda);//--set com pins hardware configuration

  25. Write_IIC_Command(0x12);

  26. Write_IIC_Command(0xdb);//--set vcomh

  27. Write_IIC_Command(0x20);//0x20,0.77xVcc

  28. Write_IIC_Command(0x8d);//--set DC-DC enable

  29. Write_IIC_Command(0x14);//

  30. Write_IIC_Command(0xaf);//--turn on oled panel

  31. OLED_Clear();

  32. }



2)  提取字模及歌曲采用
为了实行图4所示的歌曲采用界面,将所用到的汉字字模用字模提取东西提取出来,并修立了小字库。
图4 歌曲采用界面
图5 提取字模
汉字的显现函数为:
  1. void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no)

  2. {

  3. unsigned char t,adder=0;

  4. OLED_Set_Pos(x,y);

  5. for(t=0;t<16;t++)

  6. {

  7. OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);

  8. adder+=1;

  9. }

  10. OLED_Set_Pos(x,y+1);

  11. for(t=0;t<16;t++)

  12. {

  13. OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);

  14. adder+=1;

  15. }

  16. }


借帮启垦板上的按键,可实行播搁歌曲的采用,其本理图如图6所示。
图6按键本理图
在按键的统制下,实行歌曲采用的步调如下:
  1. void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no)

  2. {

  3. unsigned char t,adder=0;

  4. OLED_Set_Pos(x,y);

  5. for(t=0;t<16;t++)

  6. {

  7. OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);

  8. adder+=1;

  9. }

  10. OLED_Set_Pos(x,y+1);

  11. for(t=0;t<16;t++)

  12. {

  13. OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);

  14. adder+=1;

  15. }

  16. }



3)串行通讯及运用
因为MP3播搁模块是支援串口统制的,故此地用串口的发送功效来发送统制指令,其引足陈设如图7所示。
图7  MP3播搁模块引足陈设
为便于指令的办法,特将指令寄存到数组中,其实质如下:
unsigned charcmd3[10] = {0X7E, 0xFF, 0x06, 0X03, 0x00, 0x00, 0x01, 0xFE, 0xF7, 0XEF};//*play index
unsigned charcmd6[10] = {0X7E, 0xFF, 0x06, 0X06, 0x00, 0x00, 0x10, 0xFE, 0xE5, 0XEF};//*set  Volume
另外,播搁指定乐曲的指令为:
playn(num); for(i=0;i<10;i++) { EUSART1_Write(cmd3); } 安排音量的指令为: setVolume(18); for(i=0;i<10;i++) { EUSART1_Write(cmd6); } 3.      功效尝试
以MP3指令发送为例,其功效考证界面如图8所示。
图8 指令发送考证
图9 启垦板启动尝试
在完毕各关节的尝试后,步调的编译截止如图10所示,瞅睹该安排关于保存资材的占用还十分高。

图10  编译截止
另外,咱们还举行一项T卡尝试,假如小心考察便会创造,在MP3播搁模块上所用的T卡而没有是TF卡。经本质尝试,效验一般良佳。
图11 初始界面

图12 播搁界面
由此瞅来PIC16F15324启垦板固然体型小,功效有限,但是小芯片依旧有大能量,在外设的协同下也能显现华文菜单,也能播搁语音等。


本文系21ic论坛网友jinglixixi本创  

免责证明:本文实质由21ic赢得受权后颁布,版权归本作家一切,本平台仅供给信息保存效劳。文章仅代表作家部分睹解,没有代表本平台态度,如有问题,请通联咱们,感谢!

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章