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

📄 main.c

📁 单片机实现MP3播放```程序简单实用
💻 C
字号:

/*********************************************************************************************************
**                                        
**                                  MP3 and U Disk Source Code
**                           Copyright (c) 2005,北京博创兴业科技有限公司
**                                      All Rights Reserved
**                                           V3.00.0
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名:	 MAIN.C
**创   建   人:	 Frank   Wang Xiao Jun
**创 建  日 期:  2003.12
**描        述:  ATMEL AT89C51SND1 U盘和MP3播放功能的主函数
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 	Frank   Wang Xiao Jun
** 版  本:	V1.00.0
** 日 期: 	2003.12
** 描 述:  ATMEL AT89C51SND1 U盘和MP3播放功能的主函数
**
**------------------------------------------------------------------------------------------------------
** 修改人:	Kent   Zou Ying
** 版  本:  V2.00.0
** 日 期:	2004.5
** 描 述:	ATMEL AT89C51SND1 U盘和MP3播放功能的主函数
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 	Phoenix    Hua Yue Guang
** 版  本:  V3.00.0
** 日 期:	2005.3
** 描 述:	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 key_interrupt() interrupt 11
{
		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(); break;
			default : break;
		}
		IEN1 |= EKB;	                                              //Enable KeyBoard Interrupt
		
		EA = 1;		                                                  //开中断
		return;
}

void main()
{
	printu(">>>> UP-TECH MP3 USB Disk V3.00 <<<<\n");
	CKCON|=0x01;                                                     //使能该单片机的X2模式
	Flash_Reset();											                    //Flash 芯片复位
	if(P3_4)		//usb插入,表现高电平								                             //此引脚为USB接入检测端,在硬件中设定了它的功能
 	  {														                    //在此将设备做为U盘处理
	     printu("Entering USB Mode...\n");                           //输出进入U盘功能的信息
	     AtmelUSBInit();									                    //USB寄存器配置函数
	     EpEnable();										                    //使能有关USB的配置
	     while(1)
	      {
	         if (UEPINT & EP0)   Ep0();                              //端点0的处理函数	
	         if (UEPINT & EP1)   main_txdone();                      //数据发送完的处理函数
	         if (UEPINT & EP2)	 main_rxdone();

			 UEPINT=0;
	      }
	  }
	else													                       //进入MP3播放模式
	  {
		printu("Entering MP3 Mode...\n"); 
	      MP3_Init();                                                  //MP3初始化
		KeyBoardInit();                                              //键盘初始化

		MP3InitFlag = 1;                                             //MP3初始化标志定义
		EA = 1;                                                      //开中断,键盘可以开始工作
		P3_5 = 0;                                                    //打开USB灯亮	

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

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

}

⌨️ 快捷键说明

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