网站导航

超详细的干货:使用PIC单片机制作MP3音乐播放器

位置:主页 > 行业信息 >

超详细的干货:使用PIC单片机制作MP3音乐播放器

由21ic Forum的jinglixixi网站生产:bbs.21ic.com PIC16F15324开发板是一个小型开发板,板上装有LED和KEY等基本测试单元,可以完成简单的学习和测试目标。

为了充分体验和演示PIC16F15324的性能,基于原始开发板,配置了具有I2C接口的OLED屏幕来显示信息,使用UART控制MP3音乐模块播放音频文件,并使用KEY来控制PIC16F15324的性能。

选择播放内容,从而形成可以显示的显示。

用于中文播放列表的MP3播放器的总体结构如图1所示。

图1设计过程中播放器的总体结构,主要通过3个阶段:1)引脚配置阶段2)功能编程阶段3)功能测试阶段1。

& nbsp;& nbsp;引脚为开发工具配置PIC16F15324的限制,这里使用MPLABX IDE v5.45作为开发工具,并添加MCC来配置引脚功能,引脚配置如图2所示。

连接至OLED屏幕的数据引脚,PA1连接至OLED屏幕的时钟引脚。

PC4连接到MP3播放器模块的串行端口接收引脚; PA5连接到按钮引脚; PC1用作备用引脚来调节音量。

图2引脚功能配置另外,由于程序设计的需要,还选择了延迟功能,如图3所示。

图3选择延迟功能完成引脚配置后,单击“ Generate”(生成)。

生成程序框架和程序。

2.  & nbsp;& nbsp;  功能性程序设计1)  显示程序设计#define OLED_SCLK_Set()  & nbsp; SCL_SetHigh()#定义OLED_SDIN_Set()& nbsp; & nbsp; SDA_SetHigh()对应的OLED屏幕初始化函数是:void OLED_Init(void){Write_IIC_Command(0xAE); //显示offWrite_IIC_Command(0x20); //设置内存寻址模式Write_IIC_Command(0x10); Write_IIC_Command(0xb0); //设置页面寻址模式的页面起始地址,0 -7Write_IIC_Command(0xc8); //设置COM输出扫描方向Write_IIC_Command(0x00); //-设置低列地址Write_IIC_Command(0x10); //-设置高列地址Write_IIC_Command(0x40); //设置起始行地址Write_IIC_Command(0x81); //设置对比度控制寄存器Write_IIC_Command(0xdf); Write_IIC_Command(0xa1); / //设置段重新映射0到127Write_IIC_Command(0xa6); //设置普通显示Write_IIC_Command(0xa8); //设置复用比(1至64)Write_IIC_Command(0x3F); // Write_IIC_Command(0xa4); // Write_IIC_Command(0xd3); //设置显示偏移量Write_IIC_Command(0x00); //不设置偏移量Write_IIC_Command(0xd5); //-设置显示时钟分频比/振荡器频率Write_IIC_Command(0xf0); //-设置分频比Write_IIC_Command( 0xd9); //-设置预充电周期Write_IIC_Command(0x22); // Write_IIC_Command(0xda); //-设置com引脚硬件配置Write_IIC_Command(0x12); Write_IIC_Command(0xdb); //-设置vcomhWrite_IIC_Command(0x20); // 0x20,0.77xVccWrite_IIC_Command(0x8d); //- DC-DC enableWrite_IIC_Command(0x14); // Write_IIC_Command(0x14); // Write_IIC_Command //-打开oled panelOLED_Clear();} 2)& nbsp;& nbsp;提取字体和歌曲选择以实现歌曲选择界面如图4所示,使用的中文字体是通过字体提取工具提取的,并构建了Small字体库。

图4歌曲选择界面图5用于提取字体汉字的显示功能为:void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no){unsigned char t,adder = 0; OLED_Set_Pos(x,y); for( t = 0; t& lt; 16; t ++){OLED_WR_Byte(Hzk [2 * no] [t],OLED_DATA); adder + = 1;} OLED_Set_Pos(x,y + 1); for(t = 0; t& lt; 16; t ++){OLED_WR_Byte(Hzk [2 * no + 1] [t],OLED_DATA); adder + = 1;}}借助开发板上的按钮,可以选择播放歌曲。

原理图如图6所示。

图6按钮原理图在按钮的控制下,实现歌曲选择的过程如下:void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no){unsigned char t ,adder = 0; OLED_Set_Pos(x,y);对于(t = 0; t& lt; 16; t ++){OLED_WR_Byte(Hzk [2 * no] [t],OLED_DATA); adder + = 1;} OLED_Set_Pos(x ,y + 1); for(t = 0; t& lt; 16; t ++){OLED_WR_Byte(Hzk [2 * no + 1] [t],OLED_DATA); adder + = 1;}} 3)串行通信和应用由于MP3播放器模块支持串行端口控制,因此该串行端口用于在此处发送功能以发送控制命令,其引脚排列如图7所示。

图7 MP3播放器的引脚排列模块是一种方便的说明方法。

指令存储在数组中。

内容如下:unsigned charcmd3 [10] = {0X7E,0xFF,0x06,0X03,0x00,0x00,0x01,0xFE,0xF7,0XEF}; // *播放索引unsigned charcmd6 [10] = {0X7E,0xFF, 0x06、0X06、0x00








相关信息
行业资讯

欢迎与我们交流!

联系我们

Copyright © 2024 版权所有

在线客服 联系我们 二维码

服务热线

晶圆电阻

扫一扫,微信联系