51单片机MP3音乐播放器设计详解

一.硬件方案

       mp3音乐播放器是以51单片机为核心控制器,设计一个音乐播放器,主要完成TF卡存储的音频文件数据提取及播放任务。该播放器类似于个人计算机的音乐播放软件,可识别、提取TF卡所存储的WMA、MP3格式的文件并可自行完成音频解码数据处理,最后送扬声器或耳机进行播放。通过自定义键盘设定,当有键按下时,能控制歌曲的播放或音量,并通过LCD来显示播放音乐的时间等。硬件主要由51单片机+MP3​播放模块(自带3W功放)+3W音乐喇叭+U盘插口+SD卡+耳机接口+按键+液晶显示屏+蓝牙模块;

二.设计功能

1.读取U盘或SD卡里面的音乐,在屏幕上面显示播放状态,当前的音量。
2.按键可进行上一曲、下一曲切换,音量大小可调。
3.支持TF内存卡(支持最大32g),U盘,以及支持MP3和wav格式音乐,同时可外接耳机,音质超好。
4.可通过蓝牙模块实现手机APP控制、和播放。

 三.设计原理图

原理图如图:

 

PCB图如下:

 

四.软件设计

主程序源码

/********************************************************************
* 名称   : 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);
        }
    }

}

资料链接:https://pan.baidu.com/s/1XvkMuPWAqXTOpMpnXn5FVQ?pwd=y4l4 
提取码:y4l4

物联沃分享整理
物联沃-IOTWORD物联网 » 51单片机MP3音乐播放器设计详解

发表评论