⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp3.c

📁 mp3播放器
💻 C
字号:
#include "dp8051.h"
#include "config.h"
#include "absacc.h"
#include "constant.h"
#include "variable.h"
#include "function.h"
#include "sdhost.h"
#include "sssmp3_regs.h"
#include "fat.h"
#include "mp3_appl.h"
//***********************************************
//***********************************************
/*code void (*MusicMode_table[])() = 
{
  MP3EQU_Normal,
  MP3EQU_Rock,
  MP3EQU_Jazz,
  MP3EQU_Classic,
  MP3EQU_Pop
};*/
/************************************************
函 数 名: MP3EQU_Normal()
功    能:正常
说    明:
调    用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3EQU_Normal(void)
{
  MP3_EQBAND060 = 0x1F;
  MP3_EQBAND170 = 0x1F;
  MP3_EQBAND310 = 0x1F;
  MP3_EQBAND600 = 0x1F;
  MP3_EQBAND01K = 0x1F;
  MP3_EQBAND03K = 0x1F;
  MP3_EQBAND06K = 0x1F;
  MP3_EQBAND12K = 0x1F;
  MP3_EQBAND14K = 0x1F;
  MP3_EQBAND16K = 0x1F;
}
/************************************************
函 数 名: MP3EQU_Rock()
功    能:摇滚
说    明:
调    用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3EQU_Rock(void)
{
  MP3_EQBAND060 = 0x17;
  MP3_EQBAND170 = 0x1A;
  MP3_EQBAND310 = 0x25;
  MP3_EQBAND600 = 0x28;
  MP3_EQBAND01K = 0x23;
  MP3_EQBAND03K = 0x1C;
  MP3_EQBAND06K = 0x13;
  MP3_EQBAND12K = 0x0F;
  MP3_EQBAND14K = 0x0F;
  MP3_EQBAND16K = 0x0F;
}
/************************************************
函 数 名: MP3EQU_Jazz()
功    能:爵士
说    明:
调    用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3EQU_Jazz(void)
{
  MP3_EQBAND060 = 0x1F;
  MP3_EQBAND170 = 0x1F;
  MP3_EQBAND310 = 0x1C;
  MP3_EQBAND600 = 0x1C;
  MP3_EQBAND01K = 0x1C;
  MP3_EQBAND03K = 0x1E;
  MP3_EQBAND06K = 0x1C;
  MP3_EQBAND12K = 0x1A;
  MP3_EQBAND14K = 0x19;
  MP3_EQBAND16K = 0x17;
}
/************************************************
函 数 名: MP3EQU_Classic()
功    能:经典
说    明:
调    用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3EQU_Classic(void)
{
  MP3_EQBAND060 = 0x1F;
  MP3_EQBAND170 = 0x1F;
  MP3_EQBAND310 = 0x1F;
  MP3_EQBAND600 = 0x1F;
  MP3_EQBAND01K = 0x1F;
  MP3_EQBAND03K = 0x1F;
  MP3_EQBAND06K = 0x14;
  MP3_EQBAND12K = 0x14;
  MP3_EQBAND14K = 0x14;
  MP3_EQBAND16K = 0x30;
}
/************************************************
函 数 名: MP3EQU_Pop()
功    能:流行
说    明:
调    用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3EQU_Pop(void)
{
  MP3_EQBAND060 = 0x23;
  MP3_EQBAND170 = 0x1C;
  MP3_EQBAND310 = 0x17;
  MP3_EQBAND600 = 0x15;
  MP3_EQBAND01K = 0x17;
  MP3_EQBAND03K = 0x23;
  MP3_EQBAND06K = 0x25;
  MP3_EQBAND12K = 0x25;
  MP3_EQBAND14K = 0x25;
  MP3_EQBAND16K = 0x25;
}
/************************************************
函 数 名: MP3_MusicPlayMode()
功    能:MP3
说    明:
调    用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3_MusicPlayMode(void)
{
  varAl.MusicMode++;
  if(varAl.MusicMode == 0xFF)
    varAl.MusicMode = 0;
  //MusicMode_table[varAl.MusicMode % 5]();
  switch(varAl.MusicMode % 5)
  {
  case 0x00:
    MP3EQU_Normal();
    break;
  case 0x01:
    MP3EQU_Rock();
    break;
  case 0x02:
    MP3EQU_Jazz();
    break;
  case 0x03:
    MP3EQU_Classic();
    break;
  case 0x04:
    MP3EQU_Pop();
    break;
  }
}
/************************************************
函 数 名: MP3_PrevInit()
功    能:MP3
说    明:
调    用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3_PrevInit(void)
{
  //MP3_ISR_Flag = 0;
  CLASS_D_DAC_CTL = (SUSPEND | PAUSE);// suspend & Mute Class-D
  EIE = 0x00;// Disable INT3 
  MP3_INT_CLR = 0x3F; 
  MP3_INT_EN = 0x00;// 
      		   
  MP3_SWReset();   
  MP3_ISR_Flag = 0;
}
/************************************************
函 数 名: MP3_SWReset()
功    能:MP3
说    明:
调    用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3_SWReset(void)
{
  MP3_CTL |= (MP3_CLR | MUTE);//软件复位MP3解码器
  MP3_FIFOCTL = 0x00; // PCM_output FIFO Disable
  MP3_I2S_CTL = 0x00;
  MP3_DMACTL = DMA_CLR;// DMA is not ready
  //MP3_VOLUME = 31;     // 0 -> No volume gain, 31 -> Max value for volume gain
  MP3_DMACTL = 0x00; // DMA is not ready 
}
/************************************************
函 数 名: MP3_Init()
功    能:MP3
说    明:
调    用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3_Init(void)
{
  MP3_DMASTART0700_LEFT = 0x00; // in MP3 0x0 Byte  
  MP3_DMASTART1508_LEFT = 0x00;  
  MP3_DMALEN0700_LEFT = 0xFF;  // in MP3
  MP3_DMALEN1508_LEFT = 0x01; // -> 0x0 ~ 0x01FF= 512 Bytes
  MP3_CTL = STEREO | L_ENDIAN; // Bit5->Stero mode, Bit4->Little Endian,MP3 mode
}
/************************************************
函 数 名: MP3_INT_Enable()
功    能:MP3
说    明:
调    用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3_INT_Enable(void)
{
  // set-up INT3
  MP3_INT_EN = 0x7F;    // -> move to before _getkey()
  MP3_INT_MASK = 0x3F; 
  MP3_DMACTL = DMA_READY_L;  // set left DMA is ready 
  MP3_FIFOCTL = FIFO_EN;  // PCM_output FIFO enable -> Must first enable it for playback WAVE file
  MP3_I2S_RATE = 0x07;
  MP3_I2S_DUTY = 0x04;
  MP3_I2S_CTL = 0x00; // for Class-D in Parallel Mode
  EIP = 0x02;
  EIE = 0x02;  // enable INT3
}
/************************************************
函 数 名: MP3_ActiveFAT()
功    能:MP3
说    明:
调    用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3_ActiveFAT(void)
{
  FileData.dwMovedDataToBuffSizeCNT = 0;
  MP3_Init();
  
  CLASS_D_DAC_CTL &= 0xF0;
  MP3_ISR_Flag = 0;
  tmpINT3 = 0;
  varAl.SystemFlag &= ~(END_FILEADDR_FLAG);
  MP3_INT_Enable();
}
/************************************************
函 数 名: MP3_Play_Task()
功    能:MP3
说    明:
调    用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3_Play_Task(void)
{
  switch(mp3_play_status)
  {
  case MP3_IDEL:
    if(allow_mp3_play)
	{
	  mp3_play_status = MP3_INIT;
	}
    break;
  case MP3_INIT:
    FileData.dwCurSecLba = 0;
	MP3_PrevInit();
	ReadSector(FileData.dwCurSecLba++,0x05);
	ReadSector(FileData.dwCurSecLba++,0x06);
	MP3_ActiveFAT();
	FileData.dwMovedDataToBuffSizeCNT += CFatData.wBytesPerSec;
    mp3_play_status = MP3_PLAY;
    break;
  case MP3_PLAY:
    if(varAl.SystemFlag & END_FILEADDR_FLAG)
	{
	  mp3_play_status = MP3_NEXT;
	}
    break;
  case MP3_PREVIOUS:
    MP3_PrevInit();
	if(!Backward())
	{
	  FileData.wCurFDBNo = 0;
      mp3_play_status = MP3_NEXT;
    }
    mp3_play_status = MP3_IDEL;
    break;
  case MP3_NEXT:
    MP3_PrevInit();
    if(CFatData.fFAT32)
    {
      if(++FileData.wCurFDBNo >= (U16)CFatData.bSectorsPerClu * CFatData.wBytesPerSec / DIREntrySize)
	  {
	    FileData.wCurFDBNo = 0;
		if(++FileData.dwCurCluNo >= FileData.RootDirNum)
		  FileData.dwCurCluNo = 0;
	  }
    }
    else
    {
	  if(++FileData.wCurFDBNo >= (U16)FileData.RootDirNum)
	    FileData.wCurFDBNo = 0;
    }
	if(Forward())
	  mp3_play_status = MP3_IDEL;
    break;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -