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

📄 mp3.c

📁 自己手动自做MP3 
💻 C
字号:
#include "a2000.h"
#include "SPCE061A.h"

#define       key1              1
#define       key2              2
#define       key3              4

unsigned number[10]={0x3000,0x3100,0x3200,0x3300,0x3400,0x3500,0x3600,0x3700,0x3800,0x3900};
unsigned start1[8]=	{0x5700,0x6500,0x6c00,0x4300,0x6f00,0x6d00,0x6500,0x2100};							//Welcome
unsigned start2[15]={0x4500,0x6e00,0x7400,0x6500,0x7200,0x2000,0x7400,0x6800,0x6500,
					0x2000,0x6b00,0x6500,0x7900,0x3300,0x2100};  	// Enter the key3!
unsigned play1[12]={0x5000,0x6c00,0x6100,0x7900,0x2000,0x6e00,0x7500,0x6d00,0x6200,
 					0x6500,0x7200,0x2000};      		//Play 
unsigned play2[10]={0x6c00,0x6100,0x7300,0x7400,0x2000,0x2000,0x6e00,0x6500,0x7800,0x7400};
													//  last  next
unsigned volume1[6]={0x5600,0x6f00,0x6c00,0x7500,0x6d00,0x6500};  //volume
unsigned volume2[6]={0x2d00,0x2000,0x2000,0x2000,0x2000,0x2b00};						//  -   +
unsigned record[9]={0x5200,0x6500,0x6300,0x6f00,0x7200,0x6400,0x2e00,
	            	0x2e00,0x2e00};  		//record...
unsigned play_record[11]={0x5000,0x6c00,0x6100,0x7900,0x2000,0x7200,0x6500,
					0x6300,0x6f00,0x7200,0x6400};            //play record

extern void show_start();
extern void show_play();
extern void show_volume();
extern void show_record();
extern void show_play_record();
void Init();
unsigned getkey();
void PlaySnd_Auto(int Song);
void volume_fluctuata();
void Delay();
unsigned volume=7,song=1,key;
//========================================================
//  程序名称:简易mp3播放器的设计
//	端口占用资源:
//========================================================
unsigned flag=0;
int main(void)
{
	while(1)
	{	
	  Init();
	  key=getkey();	
	  if(key==key3) flag++;	
	  if(flag>4) flag=1;										//调用初始化端口子程序
	  switch(flag)
	  {
	  	case 0:   show_start();break;
	  	
	  	
	  	case 1:   show_play(); PlaySnd_Auto(song);break;
	  	
	  	
	  	case 2:   show_volume; volume_fluctuata();break;
	  	
	  	
//	  	case 3:   show_record; Recording();  break;
	  	
	  	
//	  	case 4:	  show_play_record;   record_play();  break; 	
	  	
	  	
	  	default :    break;
	  }
	  	  
	*P_Watchdog_Clear=0x0001;
	}
	
}
//========================================================
//	语法格式:	void PlaySnd_Auto(unsigned int uiSndIndex,unsigned int 
//
//
//	实现功能:	通过自动方式播放语音资源
//	参数:		1.uiSndIndex:语音资源序号 2.uiDAC_Channel:语音播放通道
//	返回值:	无
//========================================================
//////////////////////////////////////////////////////////////////////////////////////////////////////
void Init()
{
	*P_IOA_Dir=0xfff0;			
	*P_IOA_Attrib=0xffff;
	*P_IOA_Data=0x0000;

	*P_IOB_Dir=0xff0f;			//设置IOB口4,5位为带上拉电阻的输入;0-3位为同相高电平输出
	*P_IOB_Attrib=0xff0f;
	*P_IOB_Data=0x00f0;
}


//////////////////////////////////////////////////////////////////////////////////////////////////////
void PlaySnd_Auto(int Song)
{
	SACM_A2000_Initial(1);							//初始化语音播放,自动方式
	SACM_A2000_Play(song,1,3);						//播放语音
	while((SACM_A2000_Status() & 0x0001) != 0)		//判断当前是否在播放?返回最低位为1则表示当前在播放
	{
		SACM_A2000_ServiceLoop();					//服务程序		
		switch(key)
		{
			case 2:	song++;					//下一曲
					if(song>3) song=0;
					SACM_A2000_Play(song,1,3);
					show_play();						
					break;
			case 1:	song--;					//上一曲
					if(song<0) song=3;
					SACM_A2000_Play(song,1,3);
					show_play();
					break;
			default :   break;		
		}

		*P_Watchdog_Clear=0x0001;
	}
	SACM_A2000_Stop();								//停止
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void volume_fluctuata()
{   
	SACM_A2000_Initial(1);							//初始化语音播放,自动方式
	SACM_A2000_Play(song,1,3);						//播放语音
	while((SACM_A2000_Status() & 0x0001) != 0)		//判断当前是否在播放?返回最低位为1则表示当前在播放
	{
		SACM_A2000_ServiceLoop();					//服务程序		
		switch(key)
		{
			case 2:	volume++;					//下一曲
					if(volume>=15) volume=15;						
					break;
			case 1:	volume--;					//上一曲
					if(volume<=0) volume=0;
					break;
			default :   break;		
		}
		SACM_A2000_Volume(volume);
		show_volume();
		*P_Watchdog_Clear=0x0001;
	}
	SACM_A2000_Stop();								//停止
}

unsigned getkey()
{
	unsigned Data_A,k1,k2;
	Data_A=*P_IOA_Data;
	Data_A=~Data_A;
	while((Data_A&0x000f)^0x000f)
	{	k1 =*P_IOA_Data;
     	Delay(3000);            //延时15ms
     	k2=*P_IOA_Data;
     	if(k1 ==k2)
     	{     
     	while((Data_A&0x000f)^0x000f)
     	   *P_Watchdog_Clear=0x0001;
     		k1=*P_IOA_Data&0x000f;
          	return k1;
     	}
     	else break;
     	*P_Watchdog_Clear=0x0001;
	}
	return 0xffff;	
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void Delay(int number)
{
	unsigned int uiCount;
	for(uiCount=0;uiCount<number;uiCount++)
	{*P_Watchdog_Clear=0x0001;}//清看门狗操作
}
///////////////////////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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