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

📄 main.c

📁 用Mega32+VS1003做的MP3(FAT32文件系统浏览)——源代码
💻 C
字号:
/************************************************************/
/*		         MP3 Code for   M32L					    */
/*				   By   pasyong								*/
/*				   2006-4									*/
/*				   Base ICC6.31A					        */
/************************************************************/ 
#include "info.h"   

void Menu_Oper(void);  //主目录操作函数,也是系统最顶层的操作函数  
void Radio_Play(void); //收音机控制函数,收音机模式时用
void Play_Order(uchar);//mp3控制函数,播放音乐时用
void Vs1003_set(void); //VS1003控制函数,控制vs1003的设置 
void Other_Mode(void); //其他模式控制函数,包括游戏和vs1003的设置功能,次级目录函数
//主循环
void main(void)
{        
    DDRA=0XFF;  
    init_system();//初始化系统     
    Menu_Oper();             
}  
//显示主菜单
void Menu_Show(void)
{
    uchar t;
    for(t=0;t<4;t++)LCD_write_String(t,12,menu[t],0);//写菜单
}    
//显示警告信息    
void warningshow(void)
{
    Cleardisplay(4);
    LCD_write_cstr(1,8,"unitogb.bin Failed!");
    delay_ms(2000);
    LCD_write_cstr(2,26,"Please Check!"); 
    delay_ms(2000);
    Cleardisplay(4);
    Menu_Show();
}
//主操作程序
void Menu_Oper(void)
{      
    uchar temp;                            
    uchar t;   
    READY=1;  
    Menu_Show();
    while(1)
    { 
        if(READY)
        {
            keyval=key_process();    
            if(keyval==PREV)if(MenuOper)MenuOper--;//目录向上移动 
            else MenuOper=3; 
            else if(keyval==NEXT)MenuOper++;//目录向下移动 
            if(MenuOper>3)MenuOper=0;   
            if(keyval==PLAY)//播放/暂停/进入 
            { 
                switch(MenuOper)
                {
                    case Music_Mode://音乐播放模式
                    {  
                        if(!Unit){warningshow();break;} //显示警告信息 
                        Read_RootDir();//读取根目录信息 
                        while(1)
                        {     
                            temp=View_File();//浏览文件      
                            if(temp>3)break; 
                            Play_Order(temp); 
                        }          
                        Cleardisplay(4);//清除显示
                        Menu_Show();    //显示主菜单 
                        break;
                    }
                    case Ebook_Mode:   //电子书模式
                    {  
                        if(!Unit){warningshow();break;}//显示警告信息  
                        Read_RootDir();//读取根目录信息
                        while(1)
                        {   
                            temp=View_File();
                            if(temp>3)break;//跳出
                            Read_Book(temp);  
                        }  
                        Cleardisplay(4);//清除显示
                        Menu_Show();    //显示主菜单 
                        break;
                    }
                    case Radio_Mode:    //收音机模式
                    {          
                        Radio_Play();   //播放收音机模式
                        Cleardisplay(4);//清屏
                        Menu_Show();    //显示主目录
                        break;
                    }        
                    case Set_Mode://设置VS1003模式
                    { 
                        Other_Mode();
                        Cleardisplay(4);//清屏
                        Menu_Show();    //显示主目录
                        break;
                    }
                } 
            }
            for(t=0;t<4;t++)//显示图标
            {                                  
                if(MenuOper==t)invt=1; 
                else invt=0;
                Show_icon(t,0,t); 
            } 
        }
    }
}     
  
void Other_Mode(void)
{          
    uchar menupos=0;
    uchar t=0;     
    Cleardisplay(4);
    LCD_write_cstr(0,12,"VS1003 Set");  
    LCD_write_cstr(1,12,"Greedy Snake"); 
    LCD_write_cstr(2,12,"Toy Bricks");
    READY=1;//无条件更新目录
    order=0;//清空按键缓冲区
    while(1)
    {
        if(READY)
        {
            switch(key_process())
            {       
                case PREV:
                { 
                    if(menupos)menupos--;
                    else menupos=1;
                    break;
                }         
                case NEXT:
                {
                    menupos++;
                    if(menupos>2)menupos=0;
                    break;
                }            
                case PLAY:
                {
                    Cleardisplay(4);//清除显示
                    switch(menupos)
                    {
                        case 0:Vs1003_set();break;
                        case 1:
                        {
                            Snake_Ini(0,0,2);
                            Play_Snake();//游戏 
                            break;
                        }         
                        case 2:
                        {
                            fk_init();
                            Play_Russia();
                            break;
                        }
                    } 
                    Cleardisplay(4);
                    LCD_write_cstr(0,12,"VS1003 Set");  
                    LCD_write_cstr(1,12,"Snake Game"); 
                    LCD_write_cstr(2,12,"Russia Game");
                    break; 
                }
                case QUIT:return;
            }
            for(t=0;t<3;t++)//显示icon移动
            {  
                if(menupos==t)invt=1;
                else invt=0; 
                Show_icon(t,0,18+t);//18:set,19:snake,20:russia 
            } 
        }
    }
}
//设置vs1003
//音量,高音和低音设置
//建议,用了CD3315可以不用vs1003的设置
//把音量调到最大,高低音调节可以关了
void Vs1003_set(void)
{ 
    uchar t=0;
    Vs1003_GUI();
    Vs1003_msg();
    while(1)
    { 
        if(READY)
        {
            keyval=key_process();
            switch(keyval)
            {
                case 122://高音加
                {   
                    if(vs1003ram[0]<15)vs1003ram[0]++;
                    else vs1003ram[0]=15;
                    break;
                } 
                case 234://高音减
                {   
                    if(vs1003ram[0])vs1003ram[0]--;
                    else vs1003ram[0]=0;
                    break;
                } 
                case 184://主音量加
                {   
                    if(vs1003ram[4]<255)vs1003ram[4]++;
                    else vs1003ram[4]=255; 
                    break;
                } 
                case 40://主音量减
                {   
                    if(vs1003ram[4])vs1003ram[4]--;
                    else vs1003ram[4]=0; 
                    break;
                } 
                case 120://低音加
                {   
                    if(vs1003ram[2]<15)vs1003ram[2]++;
                    else vs1003ram[2]=15;
                    break;
                } 
                case 232://低音减
                {   
                    if(vs1003ram[2])vs1003ram[2]--;
                    else vs1003ram[2]=0;
                    break;
                } 
                case 168://高频加
                {   
                    if(vs1003ram[1]<15)vs1003ram[1]++;
                    else vs1003ram[1]=15;
                    break;
                } 
                case 48://高频减
                {   
                    if(vs1003ram[1])vs1003ram[1]--;
                    else vs1003ram[1]=0;
                    break;
                } 
                case 104://低频加
                {   
                    if(vs1003ram[3]<15)vs1003ram[3]++;
                    else vs1003ram[3]=15;
                    break;
                } 
                case 240://低频减
                {   
                    if(vs1003ram[3]>2)vs1003ram[3]--;
                    else vs1003ram[3]=2;
                    break;
                } 
                case 250://保存
                {      
                    Cleardisplay(4);//清屏
                    LCD_write_cstr(1,35,"VS1003 Msg");
                    save_show();     
                    for(t=0;t<5;t++)vs1003epm[t]=vs1003ram[t];//保存
                    Vs1003_GUI(); 
                    READY=0;//清除键值
                    break;
                }
                case QUIT://退出此次设置
                {
                    set1003();//退出前把vs1003设到指定值
                    return ;
                }  
            }
            Vs1003_msg();
            keyval=0;
        } 
    }
} 
//check ok 08/09/05 
//主播放程序 
//目录顺序播放 
//支持前后选曲
void Play_Order(uchar fpos)
{                
    uchar i; 
    uchar temp;
    uchar key=0;
    //printf("MaxFile:%d\n",MaxFile); 
    Audio_Ch=2;//通道选择mp3  
    init_cd3315(Audio_Ch);//初始化cd3315
    while(1)
    {
        key=play(fpos);//播放选中的歌曲    
        switch(key)//next 播放下一手. prev 播放上一首
        {
            case NEXT://播放下一曲
            {
                if(fpos<MaxFile-1){fpos++;Ico_Chg(fpos,MaxFile);}//播放下一首歌曲
                else //本层目录播放完毕
                {
RSTART:             temp=File_Search(m_c[fpos],2);//向下搜索   
                    if(temp==5)//文件末尾
                    { 
                        temp=File_Search(CurDir,3);//从目录下,重新查找
                        while(1)//一只要找到符合条件的才退出
                        {   
                            for(i=0;i<4;i++)if(m_c[i].Type<4)break;
                            if(i<4)break;//找到了一个音乐文件   
                            temp=File_Search(m_c[3],2);//从最后一个文件开始再向下查找,一定是找到四个的
                            //printf("Search:%d\n",m_c[3].Clust);
                        }
                        fpos=i;
                    }else fpos=0;
                    MaxFile=temp;//更改最长文件     
                    //printf("MaxFile:%d\n",MaxFile);
                    //printf("now playing:%d\n",fpos); 
                    show_name(MaxFile); //显示此次文件的更新目录
                    Ico_Chg(fpos,MaxFile);//图标移动 
                } 
                break;
            }
            case PREV://播放上一曲
            { 
                if(fpos)fpos--;//播放上一首歌曲
                else 
                {
                    temp=File_Search(m_c[0],1);//向上搜索 ,一定找到四个文件  
                    fpos=3; 
                    MaxFile=temp;//更改最长文件      
                    show_name(MaxFile);        //显示此次文件的更新目录 
                } 
                Ico_Chg(fpos,MaxFile);//图标移动 
                if(m_c[fpos].Type>3)fpos++;//已经到达目录部分了,再向上无效
                if(fpos>3){fpos=3;goto RSTART;}//最后一个就是目录文件,查找下一页播放
                break; 
            } 
            case QUIT:return ;//退出 
        }               
    }
}     

⌨️ 快捷键说明

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