基于单片机mp3音乐播放器设计
2021-09-29 来源:eefocus
一.硬件方案
本设计以单片机为核心控制器,设计一个音乐播放器,主要完成TF卡存储的音频文件数据提取及播放任务。该播放器类似于个人计算机的音乐播放软件,可识别、提取TF卡所存储的WMA、MP3格式的文件并可自行完成音频解码数据处理,最后送扬声器或耳机进行播放。通过自定义键盘设定,当有键按下时,能控制歌曲的播放或音量,并通过LCD来显示播放音乐的时间等。
主要由51单片机+MP3播放模块(自带3W功放)+3W音乐喇叭+U盘插口+SD卡+耳机接口+按键+液晶显示屏;如图:
二.设计功能
(1)读取U盘或SD卡里面的音乐,在屏幕上面显示播放状态,当前的音量。
(2)按键可进行上一曲、下一曲切换,音量大小可调。
(3)支持TF内存卡(支持最大32g),U盘,以及支持MP3和wav格式音乐,同时可外接耳机,音质超好。
(4)可通过蓝牙模块实现手机APP控制、和播放。
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:
(2)PCB图如下:
四.软件设计
(1)程序流程图
(2)主程序源码
/********************************************************************
* 名称 : main()
* 功能 : 主函数
* 变量 : 无
* 返回值 : 无
********************************************************************/
void main(void)
{
unsigned char M_VOL,flag=1;
unsigned char Table[2];
Delay_ms(1000);
LCD_init(); //初始化液晶
LCD_clear();
LCD_write_chinese_string(10,0,12,5,0,0);//显示“音乐播放器”
LCD_write_chinese_string(0,2,12,2,5,0);//显示“状态”
//LCD_write_chinese_string(40,2,12,2,9,0);//显示“播放”
LCD_write_chinese_string(40,2,12,2,11,0);//显示“停止”
LCD_write_chinese_string(0,4,12,2,7,0);//显示“音量”
UART_Init();
Delay_ms(100);
M_VOL = 25;
Table[0] = M_VOL/10+0x30;
Table[1] = M_VOL%10+0x30;
LCD_write_english_string(40,4,Table);
while(1)
{
if(!KEY2)//上一首
{
Delay_ms(20);
Music_UP();
LCD_write_chinese_string(40,2,12,2,9,0);//显示“播放”
while(!KEY2);
Delay_ms(500);
}
if(!KEY3)//下一首
{
Delay_ms(20);
Music_DOWN();
LCD_write_chinese_string(40,2,12,2,9,0);//显示“播放”
while(!KEY3);
Delay_ms(500);
}
if(flag==1)
{
if(BUSY)
{
Delay_ms(20);
Music_DOWN();
LCD_write_chinese_string(40,2,12,2,9,0);//显示“播放”
Delay_ms(500);
}
}
if(!KEY4)//音量加
{
Delay_ms(20);
M_VOL++;
if(M_VOL>30)M_VOL = 30;
Music_Vol(M_VOL);
Table[0] = M_VOL/10+0x30;
Table[1] = M_VOL%10+0x30;
LCD_write_english_string(40,4,Table);
Delay_ms(500);
}
if(!KEY5)//音量减
{
Delay_ms(20);
if(M_VOL<1)M_VOL = 1;
M_VOL--;
Music_Vol(M_VOL);
Table[0] = M_VOL/10+0x30;
Table[1] = M_VOL%10+0x30;
LCD_write_english_string(40,4,Table);
Delay_ms(500);
}
if(!KEY1)//停止
{
Delay_ms(20);
if(!KEY1)//停止
{
flag++;
if(flag==2)flag=0;
//Delay_ms(20);
if(flag==0)
{
Music_STOP();//停止
LCD_write_chinese_string(40,2,12,2,11,0);//显示“停止”
}
if(flag==1)
{
Music_Play();
LCD_write_chinese_string(40,2,12,2,9,0);//显示“播放”
}
while(!KEY1);
Delay_ms(500);
}
}
if (UART_Get == '1')
{
UART_Get = 0;
flag++;
if(flag==2)flag=0;
//Delay_ms(20);
if(flag==0)
{
Music_STOP();//停止
LCD_write_chinese_string(40,2,12,2,11,0);//显示“停止”
}
if(flag==1)
{
Music_Play();
LCD_write_chinese_string(40,2,12,2,9,0);//显示“播放”
}
}
if (UART_Get == '2')
{
UART_Get = 0;
Music_UP();
LCD_write_chinese_string(40,2,12,2,9,0);//显示“播放”
}
if (UART_Get == '3')
{
UART_Get = 0;
Music_DOWN();
LCD_write_chinese_string(40,2,12,2,9,0);//显示“播放”
}
if (UART_Get == '4')
{
UART_Get = 0;
M_VOL++;
if(M_VOL>30)M_VOL = 30;
Music_Vol(M_VOL);
Table[0] = M_VOL/10+0x30;
Table[1] = M_VOL%10+0x30;
LCD_write_english_string(40,4,Table);
}
if (UART_Get == '5')
{
UART_Get = 0;
if(M_VOL<1)M_VOL = 1;
M_VOL--;
Music_Vol(M_VOL);
Table[0] = M_VOL/10+0x30;
Table[1] = M_VOL%10+0x30;
LCD_write_english_string(40,4,Table);
}
}
}
- 英飞凌携手马瑞利采用AURIX™ TC4x MCU系列推动区域控制单元创新
- 纳芯微联合芯弦推出NS800RT系列实时控制MCU
- GD32F103C8单片机的PWM输出试验
- GD32F103C系列单片机的PWM捕获功能
- 设计笔记 | 采用GD32F130系列MCU设计冰箱压缩机变频板方案
- 基于GD32L235系列MCU的微型便携式微型电源方案
- 基于GD32L235系列MCU的土壤湿度检测带磁力翻转式显示方案
- GD32VF103:采用RISC-V内核设计的MCU
- 德州仪器推出新款实时微控制器系统 可在汽车与工业应用中实现更智能的处理流程
- 关于GD32F2系列增强型MCU的介绍和应用