单片机
返回首页

基于单片机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);

        }

}


}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • IGBT模块通过控制门极阻断过电流

  • CCFL的工作原理及电子驱动电路解析

  • MT3608构成3.7V转12V的升压电路图

  • 运算放大器IC741的基本工作原理及在电路中的实现方式

  • 比较常见的功率整流器和滤波电路

  • 基于TDA1554的立体声放大器电路

    相关电子头条文章