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

📄 main.i

📁 用Mega32+VS1003做的MP3(FAT32文件系统浏览)——源代码
💻 I
📖 第 1 页 / 共 3 页
字号:
{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x00,0x00,0x00,0x00},/*",",12*/
{0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00},/*".",14*/
{0x00,0x80,0x60,0x1C,0x02,0x00,0x04,0x03,0x00,0x00,0x00,0x00},/*"/",15*/
{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"0",16*/
{0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"1",17*/
{0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00},/*"2",18*/
{0x08,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"3",19*/
{0x40,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x02,0x00},/*"4",20*/
{0x3C,0x24,0x24,0x24,0xC4,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"5",21*/
{0xF8,0x24,0x24,0x2C,0xC0,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"6",22*/
{0x0C,0x04,0xE4,0x1C,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00},/*"7",23*/
{0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"8",24*/
{0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x03,0x02,0x02,0x01,0x00},/*"9",25*/
{0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*":",26*/
{0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00},/*";",27*/
{0x00,0x20,0x50,0x88,0x04,0x02,0x00,0x00,0x00,0x00,0x01,0x02},/*"<",28*/
{0x90,0x90,0x90,0x90,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/
{0x00,0x02,0x04,0x88,0x50,0x20,0x00,0x02,0x01,0x00,0x00,0x00},/*">",30*/
{0x18,0x04,0xC4,0x24,0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*"?",31*/
{0xF8,0x04,0xE4,0x94,0xF8,0x00,0x01,0x02,0x02,0x02,0x02,0x00},/*"@",32*/
{0x00,0xE0,0x9C,0xF0,0x80,0x00,0x02,0x03,0x00,0x00,0x03,0x02},/*"A",33*/
{0x04,0xFC,0x24,0x24,0xD8,0x00,0x02,0x03,0x02,0x02,0x01,0x00},/*"B",34*/
{0xF8,0x04,0x04,0x04,0x0C,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"C",35*/
{0x04,0xFC,0x04,0x04,0xF8,0x00,0x02,0x03,0x02,0x02,0x01,0x00},/*"D",36*/
{0x04,0xFC,0x24,0x74,0x0C,0x00,0x02,0x03,0x02,0x02,0x03,0x00},/*"E",37*/
{0x04,0xFC,0x24,0x74,0x0C,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"F",38*/
{0xF0,0x08,0x04,0x44,0xCC,0x40,0x00,0x01,0x02,0x02,0x01,0x00},/*"G",39*/
{0x04,0xFC,0x20,0x20,0xFC,0x04,0x02,0x03,0x00,0x00,0x03,0x02},/*"H",40*/
{0x04,0x04,0xFC,0x04,0x04,0x00,0x02,0x02,0x03,0x02,0x02,0x00},/*"I",41*/
{0x00,0x04,0x04,0xFC,0x04,0x04,0x06,0x04,0x04,0x03,0x00,0x00},/*"J",42*/
{0x04,0xFC,0x24,0xD0,0x0C,0x04,0x02,0x03,0x02,0x00,0x03,0x02},/*"K",43*/
{0x04,0xFC,0x04,0x00,0x00,0x00,0x02,0x03,0x02,0x02,0x02,0x03},/*"L",44*/
{0xFC,0x3C,0xC0,0x3C,0xFC,0x00,0x03,0x00,0x03,0x00,0x03,0x00},/*"M",45*/
{0x04,0xFC,0x30,0xC4,0xFC,0x04,0x02,0x03,0x02,0x00,0x03,0x00},/*"N",46*/
{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"O",47*/
{0x04,0xFC,0x24,0x24,0x18,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"P",48*/
{0xF8,0x84,0x84,0x04,0xF8,0x00,0x01,0x02,0x02,0x07,0x05,0x00},/*"Q",49*/
{0x04,0xFC,0x24,0x64,0x98,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"R",50*/
{0x18,0x24,0x24,0x44,0x8C,0x00,0x03,0x02,0x02,0x02,0x01,0x00},/*"S",51*/
{0x0C,0x04,0xFC,0x04,0x0C,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"T",52*/
{0x04,0xFC,0x00,0x00,0xFC,0x04,0x00,0x01,0x02,0x02,0x01,0x00},/*"U",53*/
{0x04,0x7C,0x80,0xE0,0x1C,0x04,0x00,0x00,0x03,0x00,0x00,0x00},/*"V",54*/
{0x1C,0xE0,0x3C,0xE0,0x1C,0x00,0x00,0x03,0x00,0x03,0x00,0x00},/*"W",55*/
{0x04,0x9C,0x60,0x9C,0x04,0x00,0x02,0x03,0x00,0x03,0x02,0x00},/*"X",56*/
{0x04,0x1C,0xE0,0x1C,0x04,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"Y",57*/
{0x0C,0x84,0x64,0x1C,0x04,0x00,0x02,0x03,0x02,0x02,0x03,0x00},/*"Z",58*/
{0x00,0x00,0xFE,0x02,0x02,0x00,0x00,0x00,0x07,0x04,0x04,0x00},/*"[",59*/
{0x00,0x0E,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00},/*"\",60*/
{0x00,0x02,0x02,0xFE,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00},/*"]",61*/
{0x00,0x04,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08},/*"_",63*/
{0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
{0x00,0x40,0xA0,0xA0,0xC0,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"a",65*/
{0x04,0xFC,0x20,0x20,0xC0,0x00,0x00,0x03,0x02,0x02,0x01,0x00},/*"b",66*/
{0x00,0xC0,0x20,0x20,0x60,0x00,0x00,0x01,0x02,0x02,0x02,0x00},/*"c",67*/
{0x00,0xC0,0x20,0x24,0xFC,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"d",68*/
{0x00,0xC0,0xA0,0xA0,0xC0,0x00,0x00,0x01,0x02,0x02,0x02,0x00},/*"e",69*/
{0x00,0x20,0xF8,0x24,0x24,0x04,0x00,0x02,0x03,0x02,0x02,0x00},/*"f",70*/
{0x00,0x40,0xA0,0xA0,0x60,0x20,0x00,0x07,0x0A,0x0A,0x0A,0x04},/*"g",71*/
{0x04,0xFC,0x20,0x20,0xC0,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"h",72*/
{0x00,0x20,0xE4,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"i",73*/
{0x00,0x00,0x20,0xE4,0x00,0x00,0x08,0x08,0x08,0x07,0x00,0x00},/*"j",74*/
{0x04,0xFC,0x80,0xE0,0x20,0x20,0x02,0x03,0x02,0x00,0x03,0x02},/*"k",75*/
{0x04,0x04,0xFC,0x00,0x00,0x00,0x02,0x02,0x03,0x02,0x02,0x00},/*"l",76*/
{0xE0,0x20,0xE0,0x20,0xC0,0x00,0x03,0x00,0x03,0x00,0x03,0x00},/*"m",77*/
{0x20,0xE0,0x20,0x20,0xC0,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"n",78*/
{0x00,0xC0,0x20,0x20,0xC0,0x00,0x00,0x01,0x02,0x02,0x01,0x00},/*"o",79*/
{0x20,0xE0,0x20,0x20,0xC0,0x00,0x08,0x0F,0x0A,0x02,0x01,0x00},/*"p",80*/
{0x00,0xC0,0x20,0x20,0xE0,0x00,0x00,0x01,0x02,0x0A,0x0F,0x08},/*"q",81*/
{0x20,0xE0,0x40,0x20,0x20,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"r",82*/
{0x00,0x60,0xA0,0xA0,0x20,0x00,0x00,0x02,0x02,0x02,0x03,0x00},/*"s",83*/
{0x00,0x20,0xF8,0x20,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x00},/*"t",84*/
{0x20,0xE0,0x00,0x20,0xE0,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"u",85*/
{0x20,0xE0,0x20,0x80,0x60,0x20,0x00,0x00,0x03,0x01,0x00,0x00},/*"v",86*/
{0x60,0x80,0xE0,0x80,0x60,0x00,0x00,0x03,0x00,0x03,0x00,0x00},/*"w",87*/
{0x20,0x60,0x80,0x60,0x20,0x00,0x02,0x03,0x00,0x03,0x02,0x00},/*"x",88*/
{0x20,0xE0,0x20,0x80,0x60,0x20,0x08,0x08,0x07,0x01,0x00,0x00},/*"y",89*/
{0x00,0x20,0xA0,0x60,0x20,0x00,0x00,0x02,0x03,0x02,0x02,0x00},/*"z",90*/
{0x00,0x00,0x20,0xDE,0x02,0x00,0x00,0x00,0x00,0x07,0x04,0x00},/*"{",91*/
{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00},/*"|",92*/
{0x00,0x02,0xDE,0x20,0x00,0x00,0x00,0x04,0x07,0x00,0x00,0x00},/*"}",93*/
{0x02,0x01,0x02,0x04,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00} /*"~",94*/
};                                                                                                           

/************************************************************/
/*		         HEAD FILE  for   FAT					    */
/*				   By   pasyong								*/
/*				   2006-4									*/
/*				   Base ICC6.31A					        */
/************************************************************/
/************************************************************/
/*		         HEAD FILE  for   sd					    */
/*				   By   pasyong								*/
/*				   2006-4									*/
/*				   Base ICC6.31A					        */
/************************************************************/
// CodeVisionAVR C Compiler
// (C) 1998-2004 Pavel Haiduc, HP InfoTech S.R.L.

// I/O registers definitions for the ATmega32





											

// CodeVisionAVR C Compiler
// (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L.


#pragma used+
#pragma used+
#pragma used+
#pragma used+
#pragma used+

void delay_us(unsigned int n);
void delay_ms(unsigned int n);

#pragma used-

//正点原子@scut 08/09/11
//很多部分参考网友(波仔)的

// CodeVisionAVR C Compiler
// (C) 1998-2004 Pavel Haiduc, HP InfoTech S.R.L.

// I/O registers definitions for the ATmega32





											

//全为了调试方便 
unsigned char uart_order=0;
unsigned char uart_order=0;
unsigned char uart_order=0;
bit cmden=0;

 
// USART Receiver interrupt service routine
interrupt [14] void usart_rx_isr(void)
{
    char status;
    status=UCSRA;  
    cmden=0;
    if ((status & ((1<<4  ) | (1<<2) | (1<<3) ))==0)
    {
        uart_order=getchar();
        //uart_order=48; //得到实际值
        cmden=1;     
    };
} 
void uart_init(void)
{      
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=0x00;  
    UCSRB=0x08;//防止串口接收中断使系统运行故障!!!!!
    //UCSRB=0x98;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x67;    
    #asm("sei") //开中断
}
// CodeVisionAVR C Compiler
// (C) 1998-2004 Pavel Haiduc, HP InfoTech S.R.L.

// I/O registers definitions for the ATmega32





											



//SPI initialize
// clock rate: 500000hz
void spi_init(void) //初始化spi
void spi_init(void) void spi_init(void) {
    DDRB=0xBF;    //SI输入,SO,SCK,SS输出
    SPCR = 0x53;  //setup SPI
    SPSR = 0x00;  //setup SPI
}
void Write_Byte_SPI(unsigned char byte)
{   
    SPDR = byte;
    while (!(SPSR & (1<<7 )));
}
unsigned char Read_Byte_SPI(void)
{   
    SPDR = 0xFF;
    while (!(SPSR &(1<<7 )));
    return SPDR;
}            

        
unsigned char BUFFER[512]; //扇区缓冲区 
bit reading=0;     //标记读写,1:读

void  spi_init(void);    //初始化spi
unsigned char SD_Write_Command(unsigned char cmd,unsigned long arg);//写命令到sd卡
void  sd_port_init(void);//初始化sd卡的io
unsigned char SD_Init(void);     //sd卡初始化             
unsigned char SD_Read_Block(unsigned long address); //读取一个块数据  
void  sd_port_init()     //把cs端口放到sd卡上去
{
    PORTB  |=0X10    ;
} 
//****************************************************************************
//Send a Command to MMC/SD-Card
//Return: the second byte of response register of MMC/SD-Card
//****************************************************************************
unsigned char SD_Write_Command(unsigned char cmd,unsigned long arg)
{
    unsigned char tmp;
    unsigned char retry=0;
   
    //MMC_PORT|=MMC_CS_PIN;       //SD卡关闭   
    //send 8 Clock Impulse
    Write_Byte_SPI(0xFF);  
    PORTB  &=~0X10    ;      //SD卡使能 
    Write_Byte_SPI(cmd|0x40);   //送头命令
    Write_Byte_SPI(arg>>24);
    Write_Byte_SPI(arg>>16);    //send 6 Byte Command to MMC/SD-Card
    Write_Byte_SPI(arg>>8);
    Write_Byte_SPI(arg&0xff);
    Write_Byte_SPI(0x95);       //仅仅对RESET有效的CRC效验码 
       //get 8 bit response 
    do //Read_Byte_MMC(); //read the first byte,ignore it. 
    { 
        tmp = Read_Byte_SPI(); //Only last 8 bit is used here.Read it out. 
        retry++;
    }
    while((tmp==0xff)&&(retry<100));   //当没有收到有效的命令的时候
    if(reading==0)PORTB  |=0X10    ;//MMC_CS_PIN=1;
    else PORTB  &=~0X10    ;        //MMC_CS_PIN=0;   
    return(tmp);
} 
//****************************************************************************
//SD卡初始化(SPI-MODE)
//****************************************************************************
unsigned char SD_Init(void)
{  
    unsigned char retry,temp;
    unsigned char i;
    PORTB  &=~0X10    ; //SD卡使能 
    delay_us(250);         //Wait MMC/SD ready...
    for (i=0;i<0x0f;i++) 
    {
        Write_Byte_SPI(0xff); //send 74 clock at least!!!
    } 
    retry=0; 
    do//Send Command CMD0 to MMC/SD Card
    { 
        temp=SD_Write_Command(0,0);//retry 200 times to send CMD0 command 
        retry++;
        if(retry==100)return 0xff;//CMD0 Error!  
    } 
    while(temp!=1);  
    retry=0;
    do//Send Command CMD1 to MMC/SD-Card
    { 
        temp=SD_Write_Command(1,0);//retry 100 times to send CMD1 command 
        retry++;
        if(retry==100);
    }while(temp!=0); 
    retry=0; 
    SD_Write_Command(16,512);     //设置一次读写BLOCK的长度为512个字节 
    PORTB  |=0X10    ;   //MMC_CS_PIN=1;  //set MMC_Chip_Select to high 
    return(0); //All commands have been taken.
}  
//****************************************************************************
//从SD卡读一个扇区  Return 0 if no Error.  
//address:所在的物理扇区编号
//返回值:!0xff
//****************************************************************************
unsigned char SD_Read_Block(unsigned long address)
{  
    unsigned char temp=0;unsigned int i=0;
    reading=1; 
    temp=SD_Write_Command(17,address); //读出RESPONSE     
    while (Read_Byte_SPI()!= 0xfe)PORTA.1=1; //直到读取到了数据的开始头0XFE,才继续
    PORTA.1=0;
    for(i=0; i<512; i++)
	{
	    BUFFER[i]=Read_Byte_SPI();
	}
    Read_Byte_SPI();//CRC - Byte 
    Read_Byte_SPI();//CRC - Byte
    reading=0; 
    PORTB  |=0X10    ;        //关闭SD卡
    return(temp);
}  
//****************************************************************************
//从SD卡读一个扇区  Return 0 if no Error.
//****************************************************************************
unsigned char SD_Read_Block2(unsigned long address,unsigned char *buf)
{ 
    unsigned char temp=0;unsigned int i=0;
    reading=1; 
    temp=SD_Write_Command(17,address);     //读出RESPONSE     
    while (Read_Byte_SPI()!= 0xfe);//直到读取到了数据的开始头0XFE,才继续
    for(i=0; i<512; i++)
	{
        buf[i]=Read_Byte_SPI();
	}
    Read_Byte_SPI();//CRC - Byte 
    Read_Byte_SPI();//CRC - Byte
    reading=0; 
    PORTB  |=0X10    ;        //关闭SD卡
    return(temp);
}  

//从指定位置读取一个字
unsigned int SD_Read_Word(unsigned long address,unsigned int offset)
{
    unsigned char temp=0;unsigned int i=0;
    unsigned char k=0; 
    unsigned char buf[2]; 
    reading=1;
    temp=SD_Write_Command(17,address<<9);     //读出RESPONSE     
    while (Read_Byte_SPI()!= 0xfe);//直到读取到了数据的开始头0XFE,才继续
    for(i=0;i<offset;i++)Read_Byte_SPI();

⌨️ 快捷键说明

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