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

📄 info.h~

📁 用Mega32+VS1003做的MP3(FAT32文件系统浏览)——源代码
💻 H~
字号:
#ifndef _INFO_INCLUDED_
#define _INFO_INCLUDED_   
#include <mega32.h>
#include <stdio.h>   
#include "red.h"   
#include "mp3.h"
#include "txt.h"  
#include "tea5767.h" 
#include "snake.h" 
#include "russia.h"

//正点原子@scut 08/09/11
//联合其他头文件的一个头文件,实现一些高层的功能 

uchar View_File(void);   //目录浏览 
void Ico_Chg(uchar fpos,uchar fnum);//显示图标,及选中位置  
void Read_RootDir(void); //读取根目录的信息           
uchar File_Search(MENU_CONECT CurFile,uchar ord);//搜寻txt/document/music 文件

//显示文件名字      
void show_name(uchar list)
{ 
    uchar i;
    Cleardisplay(4); //清屏
    for(i=0;i<list;i++)LCD_write_String(i,12,m_c[i].LongName,0);   
}                           
//ord:1,向上找 ord:2,向下找 3:从新开始
//check ok 08/09/04     
//update:08/09/05 根正了一个向上查找跳跃式的 bug 
//curfile 当前选中的的文件信息      
//CurDir  当前目录
uchar File_Search(MENU_CONECT CurFile,uchar ord)
{    
    bit FileLess=0;//第二批目录个数不符合常规要求      
    uchar num=0;  
    uint curindex=0;
    uint finalindex=0;   
    {   
        if(CurFile.FileIndex<=1)return 5;//已经是首部了,直接返回一个结束代码 5
        if(ord>1)//向下查找
        {       
            if(ord==3)num=SerarchFile(CurDir.Clust,6,0,0);//第一次进入目录查找
            else if(CurFile.Type==6)num=SerarchFile(CurDir.Clust,6,CurFile.FileIndex+1,0);//找文件
            if(num==4)return num; //找足了四个      
            if(CurFile.Type<6)num=SerarchFile(CurDir.Clust,MenuOper,CurFile.FileIndex+1,0);//找音乐
            else num=SerarchFile(CurDir.Clust,MenuOper,0,num);  
            if(num==0)return 5;//最后的文件,直接返回一个结束代码 5
            return num;   
        }
        finalindex=CurFile.FileIndex;//获得当前索引  
        m_c[3].FileIndex=0;          //把最后一个文件的索引清掉,以免影响后面
        //printf("finalindex:%d\n\n",finalindex);
        if(ord==1)//向上查找
        {            
            if(m_c[0].FileIndex<4)FileLess=1;//第二批首目录少于4!!!  
            do//找文件夹
            {            
                //printf("CurDir.Clust:%d\n",CurDir.Clust);
                //printf("curindex:%d\n",curindex);   
                num=SerarchFile(CurDir.Clust,6,curindex,0);//从0开始找    
                curindex=m_c[3].FileIndex; 
                //printf("search file curindex:%d\n",curindex); 
                //printf("file num:%d\n",num);   
                if(num<4)break;//文件夹搜索完毕
            }while(m_c[3].FileIndex<(finalindex-1));//首先从文件夹搜索      
            if(FileLess&&num==4)return 4;//目录够了    
            if(m_c[3].FileIndex==(finalindex-1))return 4;  
            curindex=0;    
            do//从mp3搜索
            {     
                //printf("num:%d\n",num); 
                if(num==4)num=SerarchFile(CurDir.Clust,MenuOper,curindex,0);       
                else num=SerarchFile(CurDir.Clust,MenuOper,curindex,num);//从0开始找    
                curindex=m_c[3].FileIndex+1; 
                //printf("curindex:%d\n",curindex);  
            }while(m_c[3].FileIndex<(finalindex-1));  
            return 4; 
        } 
    }
}  
//读取根目录信息
//check ok 08/09/04 
void Read_RootDir(void)
{  
    //uchar fnum;
    //fnum=SerarchFile(RootDir.Clust,6,0,0);//读取根目录
    CurDir.Clust=RootDir.Clust;           //改变当前目录路径
    CurDir.Type=6;//文件夹
    CurDir.FileIndex=6;
    //show_name(fnum);//显示文件信息
    //Ico_Chg(0,fnum);
    //MaxFile=fnum;
}    
//目录浏览
//check ok 08/09/04
//实现功能:浏览当前目录CurDir下的文件
uchar View_File(void)
{                
    uchar filenum;   
    uchar filepos=0;  
    uchar temp=0;   
    keyval=0; 
    
    filenum=File_Search(CurDir,3);  
    show_name(filenum);//显示名字
    Ico_Chg(0,filenum);
    MaxFile=filenum;
       
    //printf("CurDir.clust:%d\n",CurDir.Clust);
    //printf("filenum:%d\n",filenum);
    while(1)
    {    
        if(READY)keyval=key_process();                            
        if(keyval!=0)                                   
        {                                         
            switch(keyval)
            {
                case PREV://向上查找文件
                {
                    if(filepos)filepos--;
                    else 
                    {       
                        temp=File_Search(m_c[0],1);//到达顶部
                        if(temp!=5){MaxFile=filenum=temp;filepos=3;}//发生了变化 
                        show_name(filenum);//有清屏操作 
                    }              
                    break;
                } 
                case NEXT://向下查找文件
                {
                    filepos++;
                    if(filepos>filenum-1)
                    {
                        if(filepos==4)
                        {
                            temp=File_Search(m_c[3],2);//目录底部  
                            if(temp!=5){MaxFile=filenum=temp;filepos=0;}//发生了变化  
                            else filepos=3;
                        }else filepos--;//退回原位 
                        show_name(filenum);//有清屏操作
                    } 
                    break;
                }    
                case PLAY:
                { 
                    if(m_c[filepos].Type!=6)return filepos;//非文件夹文件,返回当前选中位置
                    else CurDir=m_c[filepos]; 
                    temp=File_Search(CurDir,3);  
                    if(temp!=5)MaxFile=filenum=temp;//发生了变化 
                    show_name(filenum);//有清屏操作 
                    filepos=0;
                    m_c[filepos].FileIndex=0;
                    break;
                } 
                case QUIT:return 4;//跳出这个模式      
            } 
            Ico_Chg(filepos,filenum);//显示选定的文件
        }
        keyval=0;//清除键值 
    }
}         
//显示图标
//fpos 文件的位置
//fnum 文件的个数    
//功能:图标位置改变(指示当前选中的文件)
void Ico_Chg(uchar fpos,uchar fnum)
{   
    uchar t;          
    for(t=0;t<fnum;t++)
    {     
        if(fpos==t)invt=1; 
        else invt=0;      
        if(m_c[t].Type<6)Show_icon(t,0,MenuOper);//显示相应的图标
        else Show_icon(t,0,4);//显示音乐图标 
    }    
}                    
//系统初始化
void init_system(void)
{     
    uchar t1,t; 
    uart_init();   
    LCD_init();    //液晶初始化   
    LCD_LED=1;//开背光             
    
    printf("system initing...\n");//   
    draw_picture(picture);//显示开机图画
    delay_ms(3000);
    Cleardisplay(4);//清空显示
    LCD_write_cstr(0,20,"System Initing.");
    delay_ms(500);
    LCD_write_cstr(0,20,"System Initing..");
    delay_ms(500);
    LCD_write_cstr(0,20,"System Initing...");
    delay_ms(500);    
    
    spi_init();    //初始化spi 
    sd_port_init();//sd卡端口初始化 
    t1=SD_Init();     //sd卡初始化    
    t=0;
    while(t1==0xff)
    {    
        LCD_write_cstr(1,10,"SDcard Init Failed!"); 
        LED=!LED;
        delay_ms(500);
        t++;
        if(t>4)
        {
            t=0;    
            t1=SD_Init();
        } 
    }
    Cleardisplay(1); 
    if(DSP[0][0]==0XFF)//初始化eeprom
    {
        for(t=0;t<5;t++)
        for(t1=0;t1<4;t1++)DSP[t][t1]=0;
        dspepm=0;
    }else             //加载默认dsp
    {
        for(t=0;t<4;t++)voltemp[t]=DSP[dspepm][t]; 
        dspram=dspepm;
    }
    if(Ch_Value[0]==0xffff)for(t=0;t<30;t++)Ch_Value[0]=0;//初始化CHx 
    //mp3口初始化  
    SPCR = 0x50;   //提速
    SPSR = 0x01;   //setup SPI   
    fatInit(); //查询SDFAT格式 /文件系统初始化  
    //显示磁盘信息 
    if(Fat32Enabled)LCD_write_cstr(1,10,"File system:FAT32");
    else LCD_write_cstr(1,10,"File System:FAT16");//显示文件系统 
    LCD_write_cstr(2,22,"Card Size:    M");
    Show_num(2,82,card_size/100);              //显示容量
    Show_num(2,94,card_size%100);
    delay_ms(1000);
    LCD_write_cstr(3,0,"Searching SysFiles..");//开始找系统文件  
    //printf("fat ok!");  
    t1=FindSysFile();
    Cleardisplay(3);//清除最后一行  
    switch(t1)
    {
        case 0:LCD_write_cstr(3,20, "Both Failed!!!");break;//while(1);//死机
        case 1:
        {
            LCD_write_cstr(3,10,"font12.fon Failed!"); 
            delay_ms(1000);
            LCD_write_cstr(3,8,"System init Failed!");
            while(1);//死机
        }
        case 2:LCD_write_cstr(3,8,"unitogb.bin Failed!");break;
        case 3:LCD_write_cstr(3,20,"Start Successe!");break;        
    } 
    if(t1!=3)delay_ms(5000);
    else delay_ms(500);     
    Cleardisplay(4);//清空显示 
    red_init();     //红外初始化
    mp3_port_init();//vs1003端口初始化   
    Mp3Reset();     //硬复位                                                                                                                                                                                                                                                                                                            
    vs1003_Reset(); //软复位vs1003
    vs1003_init();  //vs1003初始化  
    radio_init();   //收音机初始化 
    init_cd3315(Audio_Ch); //初始化cd3315 最后初始化,避免杂声
    timer_init();   //定时器中断初始化  
    En_backlight=1;
}

#endif
  















⌨️ 快捷键说明

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