📄 main.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 + -