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

📄 main.c

📁 89c51snd1c的FLASH MP3 U盘的详细代码
💻 C
字号:


//	ATMEL AT89C51SND1 U盘和MP3播放功能的主函数


#include "REGSND1.H"
#include "UART.H"
/** 宏定义USB端点中断的标志位 **/
#define 	EP2 		(0x1<<2)		      
#define 	EP1 		(0x1<<1)
#define 	EP0 		(0x1<<0)

#define     EKB		    (0x10)
/** 宏定义MP3播放功能的标志位 **/
#define SELECTSONG	3
#define PLAY		1
#define STOP		0
/** 声明外部函数 **/
extern void AtmelUSBInit();
extern void EpEnable();
extern void Ep0();
extern void main_txdone();
extern void main_rxdone();
extern void Flash_Reset(void);

extern void MP3_Init();
extern void PlayInit(unsigned char *SongName);
extern unsigned char GetMP3List(void);

extern void Func();
extern void Next();
extern void Previous();
extern void PlayPause();
extern void PlayMP3(unsigned char *SongName);
extern void KeyBoardInit();

/** 定义MP3播放相关的变量 **/
unsigned char SONG[88] = {'M', 'O', 'O', 'N', ' ', ' ', ' ', ' ', 'T', 'X', 'T'};
unsigned char data CurrentFun = SELECTSONG;
unsigned char data PlayState = STOP;
unsigned char data NowPlaying = 0;
unsigned char data NumofSong = 0;
unsigned char data MP3InitFlag;

void sleep()
{int t=0;
for(t=0;t<1000;t++); }
void key_interrupt() interrupt 11
{		 int t=0;
		unsigned char i = 200;
		EA = 0;			                                             //关中断	 
		IEN1 &= (~EKB);	                                             //Enable KeyBoard Interrupt

		while (i)
		{
			i--;
		}

		i = KBSTA;		                                             //取键盘中断位
		switch (i)
		{		                                                     //依次处理四个键中的某个键
			case 1 : Func();break;									 //被按下时的情况
			case 2 : Next();break;
			case 4 : Previous();break;
			case 8 : PlayPause();
			if(PlayState==STOP)
			printuf("Pause\n",0);
			else printuf("Playing\n",0); break;
			default : break;
		}
		
		IEN1 |= EKB;	                                              //Enable KeyBoard Interrupt
		
		EA = 1;		                                                  //开中断
		return;
}

void main()
{
	printuf(">>>> BLK's MP3 USB Disk  <<<<\n",0);
	CKCON|=0x01;   //使能该单片机的X2模式
	Flash_Reset();											         //Flash 芯片复位
	if(P3_4)										                 //此引脚为USB接入检测端
 	  {														         //在此将设备做为U盘处理
	     printuf("Entering USB Mode...\n",0);                           //输出进入U盘功能的信息
	     AtmelUSBInit();									         //USB寄存器配置函数
	     EpEnable();										         //使能有关USB的配置
	     while(1)
	      {
	         if (UEPINT & EP0)   Ep0();
	         if (UEPINT & EP1)   main_txdone(); 
	         if (UEPINT & EP2)	 main_rxdone();
	          
			 UEPINT=0;
	      }
	  }
	else													         //进入MP3播放模式
	  {
		printuf("Entering MP3 Mode...\n",0); 
	    MP3_Init();                                                  //MP3初始化
		KeyBoardInit();                                              //键盘初始化

		MP3InitFlag = 1;
		EA = 1;                                                      //开中断,键盘可以开始工作
		P3_5 = 0;                                                    //打开USB灯亮	

		NumofSong = GetMP3List();                                    //得到U盘中的MP3歌曲列表
		printuf("Song:%x\n", NumofSong);                             //输出歌曲总数信息
		if(NumofSong == 0) 
		{
		   printuf("There is no MP3 file in USB Disk!\n",0);
		   P3_5 = 1;                                                 //关闭指示LED	 
		}

		while(1) 
		{
			if(NumofSong != 0)
			{
				if(MP3InitFlag)
				{
					PlayInit(&SONG[11 * NowPlaying]);
					MP3InitFlag = 0;
				}
				PlayMP3(&SONG[11 * NowPlaying]);                     //如果处于播放状态,则播放当前歌曲
			}
			if(NowPlaying == NumofSong) 
			{
				PlayState = STOP;			                         //全部歌曲播放完了,播放器停止
//				NowPlaying = 0;                                      //循环播放  
 			}
			P3_5 =~P3_5;                                             //指示LED闪烁
		} 
	  
	  }

}

⌨️ 快捷键说明

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