(bio)}:
ͻ340KbpsMP3aF(xin)
[ӡ]
:
hongniu
rg:
2015-6-23 16:42
(bio)}:
ͻ340KbpsMP3aF(xin)
ǂֵüo(j)KڌF(xin)340KbpsaζҵMP3ЈIһ(dng)ȻڽķҲ|(zh)Qĺãһһεĉs(zh)ЕrgָᘁλƲͨ^RaУCZԵ_ԣF(xin)_ʼcҮ(dng)rҏąR_ʼҪȻǿѭh(hun)(ni)ĺ(sh){(dio)ȫijѭ(zh)УSDľ_^(q)hֱڃ(ni){(dio)ãF(xin)SDcağopBѾߵ12MHZ!ҵˮƽ@ôֻwľˣ
Դa
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar xdata tab[512];
//******************
sbit p1_7=P1^7;
sbit CS=P2^0; //Ƭx̖ƽЧ
sbit DATEIN =P2^1;//-Ĕ(sh)(j)ݔ
sbit SCLK=P2^2;//r̖
sbit DATEOUT=P2^3;//-(sh)(j)ݔ
unsigned char bdata dat;
sbit dat_0=dat^0;
sbit dat_1=dat^1;
sbit dat_2=dat^2;
sbit dat_3=dat^3;
sbit dat_4=dat^4;
sbit dat_5=dat^5;
sbit dat_6=dat^6;
sbit dat_7=dat^7;
bit is_init;//QǷӕr
uchar lpp;
unsigned char fhz;//ֵ
uchar fhz_buff; //xֵg
//unsigned char xdata tab[512];
///*******************SD
/*
VS1003mp3ģKĽӿڶx
*/
sbit XRST=P1^0;//(f)λ
sbit DREQ=P1^1; //(sh)(j)Ո
sbit XDCS=P1^2; //(sh)(j)Ƭx
sbit XCS=P1^3; //Ƭx
/*
/* VS1003mp3SPIͨŽӿڶx
*/
sbit SCK=P1^4; //r
sbit SI=P1^5; //ݔ
sbit SO=P1^6; //ݔ
//*******************************
void delay(uint time)
{ while(time)
time--;
}
//***************************
unsigned char bdata datmp3;
sbit datmp3_0=datmp3^0;
sbit datmp3_1=datmp3^1;
sbit datmp3_2=datmp3^2;
sbit datmp3_3=datmp3^3;
sbit datmp3_4=datmp3^4;
sbit datmp3_5=datmp3^5;
sbit datmp3_6=datmp3^6;
sbit datmp3_7=datmp3^7;
///*************************************MP3ģKij
void delay1ms(uint j)//ӕr100us
{unsigned char i;
for(i=j;i;i--)
{
}
}
void spi_write_mp3_1(uchar h)//SPIһֹ(ji),@ӵĔ(sh)(j)l(f)ͣ
{
datmp3=h;
SI=datmp3_7;
//Mһٶ@Y(ji)(gu)ȫǔѩǵĵһΐ۵˲ѩһMȫ
SCK=0; //SDxȡMP3(sh)(j)
SCK=1;
SI=datmp3_6;
SCK=0;
SCK=1;
SI=datmp3_5;
SCK=0;
SCK=1;
SI=datmp3_4;
SCK=0;
SCK=1;
SI=datmp3_3;
SCK=0;
SCK=1;
SI=datmp3_2;
SCK=0;
SCK=1;
SI=datmp3_1;
SCK=0;
SCK=1;
SI=datmp3_0;
SCK=0;
SCK=1;
}
/*uchar spi_read_mp3()// SPIxȡһֹ(ji)
{
uchar i,read;
for(i=8;i;i--)
{
SCLK=1;
delay();
SCLK=0;
delay();
read=SO&0x80;
read=(read<<1);
}
SCLK=1;
return (read);
}
*/
void write_comd_mp3(uchar add,uint date)//addַdateǔ(sh)(j)ע@16λĔ(sh)(j)(ni)_̎
{
uchar h,l;
l=date;
h=(date>>8);
DREQ=1;
while(!DREQ); //zyMP3ģKæB(ti)
XCS=0;
spi_write_mp3_1(2); //ʾ
spi_write_mp3_1(add);
spi_write_mp3_1(h); //Ȍ8λ
spi_write_mp3_1(l);
XCS=1;
}
void write_date_mp3(uchar dat)//l(sh)(j)Ϣ@߀һcXDCSڴ˺(sh)
{
DREQ=1;
while(!DREQ);
datmp3=dat;
SI=datmp3_7;
//Mһٶ@Y(ji)(gu)ȫǔѩǵĵһΐ۵˲ѩˣһMȫ
SCK=0; //SDxȡMP3(sh)(j)
SCK=1;
SI=datmp3_6;
SCK=0;
SCK=1;
SI=datmp3_5;
SCK=0;
SCK=1;
SI=datmp3_4;
SCK=0;
SCK=1;
SI=datmp3_3;
SCK=0;
SCK=1;
SI=datmp3_2;
SCK=0;
SCK=1;
SI=datmp3_1;
SCK=0;
SCK=1;
SI=datmp3_0;
SCK=0;
SCK=1;
}
void init_mp3() //ʼvs1003
{
XRST=1;
delay1ms(100);
XRST=0;
delay1ms(100);
XRST=1;
delay1ms(100);
write_comd_mp3(0x00,0x0804);//ģʽO(sh)
write_comd_mp3(0x03,0x9800);//r犿
write_comd_mp3(0x0b,15000);// 00ģ@Ҳʮλ
XDCS=0;//(sh)(j)Ƭx
spi_write_mp3_1(0);
spi_write_mp3_1(0);
spi_write_mp3_1(0);
spi_write_mp3_1(0);
XDCS=1;
}
void sing(uchar fhz)//xyԇ
{
write_comd_mp3(0x00,0x0820);
DREQ=1;
while(!DREQ);
XDCS=0;
write_date_mp3(0x53);
write_date_mp3(0xef);
write_date_mp3(0x6e);//xyԇ_
write_date_mp3(fhz); //lx
write_date_mp3(0);
write_date_mp3(0);
write_date_mp3(0);
write_date_mp3(0);
delay1ms(60000);
write_date_mp3(0x45); //xP(gun)
write_date_mp3(0x78);
write_date_mp3(0x69);
write_date_mp3(0x74);
write_date_mp3(0);
write_date_mp3(0);
write_date_mp3(0);
write_date_mp3(0);
XDCS=1;
}
//MP3
//*//**********************************************
/*xsdӳoֵЅ(sh)(sh)ҪDATEIN(sh)(j)ֹ(ji)*/
void write(unsigned char wr_)// һֹ(ji)SD
{
dat=wr_;
DATEIN=dat_7;
SCLK=0;
if(is_init)delay(200);
//if(!is_init)delay(1);
SCLK=1;
if(is_init) delay(200);
// if(!is_init)delay(1);
DATEIN=dat_6;
SCLK=0;
//if(!is_init)delay(1);
if(is_init)delay(200);
SCLK=1;
if(is_init) delay(200);
// if(!is_init)delay(1);
DATEIN=dat_5;
SCLK=0;
if(is_init)delay(200);
// if(!is_init)delay(1);
SCLK=1;
if(is_init) delay(200);
//if(!is_init)delay(1);
DATEIN=dat_4;
SCLK=0;
if(is_init)delay(200);
// if(!is_init)delay(1);
SCLK=1;
if(is_init) delay(200);
// if(!is_init)delay(1);
DATEIN=dat_3;
SCLK=0;
if(is_init)delay(200);
//if(!is_init)delay(1);
SCLK=1;
if(is_init) delay(200);
// if(!is_init)delay(1);
DATEIN=dat_2;
SCLK=0;
if(is_init)delay(200);
// if(!is_init)delay(1);
SCLK=1;
if(is_init) delay(200);
// if(!is_init)delay(1);
DATEIN=dat_1;
SCLK=0;
if(is_init)delay(200);
// if(!is_init)delay(1);
SCLK=1;
if(is_init) delay(200);
// if(!is_init)delay(1);
DATEIN=dat_0;
SCLK=0;
if(is_init)delay(200);
//if(!is_init)delay(1);
SCLK=1;
if(is_init) delay(200);
//if(!is_init)delay(1);
}
unsigned char read()// xȡһֹ(ji)SD
{
DATEOUT=1;
SCLK=1;
if(is_init)delay(200);
//if(!is_init)delay(1);
SCLK=0;
if(is_init)delay(200);
//if(!is_init)delay(1);
dat_7=DATEOUT;
SCLK=1;
if(is_init)delay(200);
//if(!is_init)delay(1);
SCLK=0;
if(is_init)delay(200);
//if(!is_init)delay(1);
dat_6=DATEOUT;
SCLK=1;
if(is_init)delay(200);
// if(!is_init)delay(1);
SCLK=0;
if(is_init)delay(200);
// if(!is_init)delay(1);
dat_5=DATEOUT;
SCLK=1;
if(is_init)delay(200);
// if(!is_init)delay(1);
SCLK=0;
if(is_init)delay(200);
// if(!is_init)delay(1);
dat_4=DATEOUT;
SCLK=1;
if(is_init)delay(200);
// if(!is_init)delay(1);
SCLK=0;
if(is_init)delay(200);
// if(!is_init)delay(1);
dat_3=DATEOUT;
SCLK=1;
if(is_init)delay(200);
// if(!is_init)delay(1);
SCLK=0;
if(is_init)delay(200);
// if(!is_init)delay(1);
dat_2=DATEOUT;
SCLK=1;
if(is_init)delay(200);
// if(!is_init)delay(1);
SCLK=0;
if(is_init)delay(200);
// if(!is_init)delay(1);
dat_1=DATEOUT;
SCLK=1;
if(is_init)delay(200);
// if(!is_init)delay(1);
SCLK=0;
if(is_init)delay(200);
// if(!is_init)delay(1);
dat_0=DATEOUT;
return (dat);
}
//****************************
void write1(unsigned char wr_)// һֹ(ji)SD
{
dat=wr_;
DATEIN=dat_7;
SCLK=0;
SCLK=1;
DATEIN=dat_6;
SCLK=0;
SCLK=1;
DATEIN=dat_5;
SCLK=0;
SCLK=1;
DATEIN=dat_4;
SCLK=0;
SCLK=1;
DATEIN=dat_3;
SCLK=0;
SCLK=1;
DATEIN=dat_2;
SCLK=0;
SCLK=1;
DATEIN=dat_1;
SCLK=0;
SCLK=1;
DATEIN=dat_0;
SCLK=0;
SCLK=1;
}
unsigned char read1()// xȡһֹ(ji)SD
{
DATEOUT=1;
SCLK=1;
//if(!is_init)delay(1);
SCLK=0;
//if(!is_init)delay(1);
dat_7=DATEOUT;
SCLK=1;
//if(!is_init)delay(1);
SCLK=0;
//if(!is_init)delay(1);
dat_6=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_5=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_4=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_3=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_2=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_1=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_0=DATEOUT;
return (dat);
}
//******************************8
void restsd()//(f)λSD
{ uchar i;
uchar pcmd[6]={0x40,0x00,0x00,0x00,0x00,0x95};
is_init=1;
CS=1;
for(i=0;i<15;i++)
{
//120r
write(0xff);
}
CS=1;
write(0xff);//(j)f
CS=0;//Ƭx_
write( pcmd[0]);
write( pcmd[1]);
write( pcmd[2]);
write( pcmd[3]);
write( pcmd[4]);
write( pcmd[5]);
fhz=read();
for(;;)
{
fhz=read();
if(fhz==0x01)break;
}
CS=1;
write(0xff);
}
void initsd()//ʼSD
{
//
uchar pcmd[6]={0x41,0x00,0x00,0x00,0x00,0xff};//
//
CS=1;
write(0xff);//(j)f
CS=0;//Ƭx_
write( pcmd[0]);
write( pcmd[1]);
write( pcmd[2]);
write( pcmd[3]);
write( pcmd[4]);
write( pcmd[5]);
fhz=read();
for(;;)
{
fhz=read();
if(fhz==0x00)break;
}
CS=1;
write(0xff);
}
void readsd(unsigned long addstart)//xSDһȅ^(q)ֵTAB
{
uint k,n;
uchar zh2,zh3,zh4;
uchar *p;
p=&addstart; //ȡNumbĵַλԔՈR
p++; //λ@ȥС2G
zh2=*p;//ĸߵĵصڶֹ(ji)
p++;
zh3=*p; //ĸߵĵصֹ(ji)
p++;
zh4=*p; //ĸߵĵصֹ(ji)
//readsd(numb);//xȅ^(q)
//**************
CS=0;//Ƭx_
write1( 0x51);
write1( 0x00);//@2G¿Ԟ00
write1( zh2);
write1( zh3);
write1( zh4);
write1( 0xff);
DATEOUT=1;
for(;;)
{
fhz=read1();
if(fhz==0x00)break;
}
DATEOUT=1;
for(;;)
{
fhz=read1();
if(fhz==0xfe)break;
}
DATEOUT=1;
n=0;
for(k=512;k;k--)
{
tab[n]=read1();
n++;
}
fhz=read1();
fhz=read1();
CS=1;
write1(0xff);
}
void readsd_mp3(unsigned long numbs) //xһȅ^(q)Ĕ(sh)(j)MP3a
{
uchar *p;
uchar zh2,zh3,zh4;
uint j;
p=&numbs; //ȡNumbĵַλԔՈR
p++; //λ@ȥС2G
zh2=*p;//ĸߵĵصڶֹ(ji)
p++;
zh3=*p; //ĸߵĵصֹ(ji)
p++;
zh4=*p; //ĸߵĵصֹ(ji)
//readsd(numb);//xȅ^(q)
//**************
XDCS=0;
CS=0;//Ƭx_
dat=0x51;
DATEIN=dat_7;
SCLK=0;
SCLK=1;
DATEIN=dat_6;
SCLK=0;
SCLK=1;
DATEIN=dat_5;
SCLK=0;
SCLK=1;
DATEIN=dat_4;
SCLK=0;
SCLK=1;
DATEIN=dat_3;
SCLK=0;
SCLK=1;
DATEIN=dat_2;
SCLK=0;
SCLK=1;
DATEIN=dat_1;
SCLK=0;
SCLK=1;
DATEIN=dat_0;
SCLK=0;
SCLK=1; //fhz=read1(); njSD
//write1( 0x00);//@2G¿Ԟ00 //fhz=read1(); njSD
dat=0x00;
DATEIN=dat_7;
SCLK=0;
SCLK=1;
DATEIN=dat_6;
SCLK=0;
SCLK=1;
DATEIN=dat_5;
SCLK=0;
SCLK=1;
DATEIN=dat_4;
SCLK=0;
SCLK=1;
DATEIN=dat_3;
SCLK=0;
SCLK=1;
DATEIN=dat_2;
SCLK=0;
SCLK=1;
DATEIN=dat_1;
SCLK=0;
SCLK=1;
DATEIN=dat_0;
SCLK=0;
SCLK=1; //fhz=read1(); njSD
//write1( zh2); //fhz=read1(); njSD
dat=zh2;
DATEIN=dat_7;
SCLK=0;
SCLK=1;
DATEIN=dat_6;
SCLK=0;
SCLK=1;
DATEIN=dat_5;
SCLK=0;
SCLK=1;
DATEIN=dat_4;
SCLK=0;
SCLK=1;
DATEIN=dat_3;
SCLK=0;
SCLK=1;
DATEIN=dat_2;
SCLK=0;
SCLK=1;
DATEIN=dat_1;
SCLK=0;
SCLK=1;
DATEIN=dat_0;
SCLK=0;
SCLK=1; //fhz=read1(); njSD
// write1( zh3); //fhz=read1(); njSD
dat=zh3;
DATEIN=dat_7;
SCLK=0;
SCLK=1;
DATEIN=dat_6;
SCLK=0;
SCLK=1;
DATEIN=dat_5;
SCLK=0;
SCLK=1;
DATEIN=dat_4;
SCLK=0;
SCLK=1;
DATEIN=dat_3;
SCLK=0;
SCLK=1;
DATEIN=dat_2;
SCLK=0;
SCLK=1;
DATEIN=dat_1;
SCLK=0;
SCLK=1;
DATEIN=dat_0;
SCLK=0;
SCLK=1; //fhz=read1(); njSD
//write1( zh4); //fhz=read1(); njSD
dat=zh4;
DATEIN=dat_7;
SCLK=0;
SCLK=1;
DATEIN=dat_6;
SCLK=0;
SCLK=1;
DATEIN=dat_5;
SCLK=0;
SCLK=1;
DATEIN=dat_4;
SCLK=0;
SCLK=1;
DATEIN=dat_3;
SCLK=0;
SCLK=1;
DATEIN=dat_2;
SCLK=0;
SCLK=1;
DATEIN=dat_1;
SCLK=0;
SCLK=1;
DATEIN=dat_0;
SCLK=0;
SCLK=1; //fhz=read1(); njSD
// write1( 0xff); //fhz=read1(); njSD
dat=0xff;
DATEIN=dat_7;
SCLK=0;
SCLK=1;
DATEIN=dat_6;
SCLK=0;
SCLK=1;
DATEIN=dat_5;
SCLK=0;
SCLK=1;
DATEIN=dat_4;
SCLK=0;
SCLK=1;
DATEIN=dat_3;
SCLK=0;
SCLK=1;
DATEIN=dat_2;
SCLK=0;
SCLK=1;
DATEIN=dat_1;
SCLK=0;
SCLK=1;
DATEIN=dat_0;
SCLK=0;
SCLK=1;
DATEOUT=1; // njSD
for(;;)
{
//fhz=read1(); xSD
DATEOUT=1;
SCLK=1;
//if(!is_init)delay(1);
SCLK=0;
//if(!is_init)delay(1);
dat_7=DATEOUT;
SCLK=1;
//if(!is_init)delay(1);
SCLK=0;
//if(!is_init)delay(1);
dat_6=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_5=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_4=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_3=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_2=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_1=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_0=DATEOUT;
fhz=dat; // xSD
if(fhz==0x00)break;
}
DATEOUT=1;
for(;;)
{
// fhz=read1(); xSD
DATEOUT=1;
SCLK=1;
//if(!is_init)delay(1);
SCLK=0;
//if(!is_init)delay(1);
dat_7=DATEOUT;
SCLK=1;
//if(!is_init)delay(1);
SCLK=0;
//if(!is_init)delay(1);
dat_6=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_5=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_4=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_3=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_2=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_1=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_0=DATEOUT;
fhz=dat; //fhz=read1(); xSD
if(fhz==0xfe)break;
}
DATEOUT=1;
// n=0;
for(j=512;j;j--)
{
DATEOUT=1; //fhz=read1(); xSD
SCLK=1;
//if(!is_init)delay(1);
SCLK=0;
//if(!is_init)delay(1);
dat_7=DATEOUT;
SCLK=1;
//if(!is_init)delay(1);
SCLK=0;
//if(!is_init)delay(1);
dat_6=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_5=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_4=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_3=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_2=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_1=DATEOUT;
SCLK=1;
// if(!is_init)delay(1);
SCLK=0;
// if(!is_init)delay(1);
dat_0=DATEOUT; //fhz=read1(); xSD
datmp3=dat; //fhz=read1(); njmp3bit
DREQ=1;
while(!DREQ);
SI=datmp3_7;
//Mһٶ@Y(ji)(gu)ȫǔѩǵĵһΐ۵˲ѩˣһMȫ
SCK=0; //SDxȡMP3(sh)(j)
SCK=1;
SI=datmp3_6;
SCK=0;
SCK=1;
SI=datmp3_5;
SCK=0;
SCK=1;
SI=datmp3_4;
SCK=0;
SCK=1;
SI=datmp3_3;
SCK=0;
SCK=1;
SI=datmp3_2;
SCK=0;
SCK=1;
SI=datmp3_1;
SCK=0;
SCK=1;
SI=datmp3_0;
SCK=0;
SCK=1;
//njmp3bit
}
//**********************xCRC*****
DATEOUT=1;
SCLK=1;
SCLK=0;
dat_7=DATEOUT;
SCLK=1;
SCLK=0;
dat_6=DATEOUT;
SCLK=1;
SCLK=0;
dat_5=DATEOUT;
SCLK=1;
SCLK=0;
dat_4=DATEOUT;
SCLK=1;
SCLK=0;
dat_3=DATEOUT;
SCLK=1;
SCLK=0;
dat_2=DATEOUT;
SCLK=1;
SCLK=0;
dat_1=DATEOUT;
SCLK=1;
SCLK=0;
dat_0=DATEOUT;
DATEOUT=1;
SCLK=1;
SCLK=0;
dat_7=DATEOUT;
SCLK=1;
SCLK=0;
dat_6=DATEOUT;
SCLK=1;
SCLK=0;
dat_5=DATEOUT;
SCLK=1;
SCLK=0;
dat_4=DATEOUT;
SCLK=1;
SCLK=0;
dat_3=DATEOUT;
SCLK=1;
SCLK=0;
dat_2=DATEOUT;
SCLK=1;
SCLK=0;
dat_1=DATEOUT;
SCLK=1;
SCLK=0;
dat_0=DATEOUT;
CS=1;
dat=0xff;
DATEIN=dat_7;
SCLK=0;
SCLK=1;
DATEIN=dat_6;
SCLK=0;
SCLK=1;
DATEIN=dat_5;
SCLK=0;
SCLK=1;
DATEIN=dat_4;
SCLK=0;
SCLK=1;
DATEIN=dat_3;
SCLK=0;
SCLK=1;
DATEIN=dat_2;
SCLK=0;
SCLK=1;
DATEIN=dat_1;
SCLK=0;
SCLK=1;
DATEIN=dat_0;
SCLK=0;
SCLK=1;
XDCS=1;
//**********************xCRC***** //**************
}
////***************************************SD
/*
FAT32ļϵy(tng)Á팤Ҹļֶ횵 ////////////////////////////////////////////////////////////////////////////////////////////////////
*/
/*****************************************************************
/* (sh)unsigned long find_sd_type(); *
/* ãFAT32ϵy(tng)Á팤ҸĿеMP3ļ *
/* ݔ룺o *
/* ݔһLҵMP3ļ_ʼַ *
/* *
/* *
/* *
/* *
/*****************************************************************
*/
unsigned long find_sd_type()
{ uchar i,n,a,m;
unsigned long h1,h2,h3,h4,startadd;
readsd(4323840);//ѸĿеĵһȅ^(q)(sh)(j)xtabУ
for(;;)
{
n=tab[8+(16*i)];
a=tab[9+(16*i)];
m=tab[10+(16*i)];
i++;
if((n==0x4d)&(a==0x50)&(m==0x33)){i--;break;} //mp3ļԒ˳]оһֱң
}
h1=tab[21+(16*i)];
h2=tab[22+(16*i)];
h3=tab[27+(16*i)];
h4=tab[28+(16*i)];
h1=(h1<<24);
h2=(h2<<16);
h3=(h3<<8);
startadd=h1+h2+h3+h4;
return(startadd);//ļ_ʼ_ʼ
}
/*****************************************************************
/* (sh)unsigned long find_sd_fat(unsigned long startadd1); *
/* ãFAT32ϵy(tng)ÁFATǷһص_ʼַ *
/* Єt]Єt˳ *
/* ݔ룺ѽ(jng)(zh)ĵĻǰһصַ *
/* ݔһLҵMP3ļһ_ʼַ*
/* *
/* *
/* *
/* *
/*****************************************************************
*/
unsigned long find_sd_fat(unsigned long startadd1)
{
unsigned long a,b,c,d,startadd;
uchar snumb;
snumb=((startadd1*4)/512);//ռȅ^(q)(sh)
readsd(2363904+(snumb*512));//xfattab
a=tab[(startadd1*4)-(snumb*512)];//ֹ(ji)
b=tab[(startadd1*4)-(snumb*512)+1];
c=tab[(startadd1*4)-(snumb*512)+2];
d=tab[(startadd1*4)-(snumb*512)+3];//ֹ(ji)
d=(d<<24);
c=(c<<16);
b=(b<<8);
startadd=a+b+c+d;
if(startadd==0x0fffffff){while(1);}
return (startadd);
}
void main() //
{
unsigned long numb,f;
uchar d;
init_mp3();//ʼMP3
////////////////
is_init=1;
restsd();
initsd();
is_init=0;//ʼKl
///////////////
sing(100);//xyԇ
while(1)
{
// numb=4327936; //4327936ַ_ʼx
numb=find_sd_type();
while(1)
{
f=(4323840+(numb-2)*4096);
for(d=4;d;d--)
{
readsd_mp3(f);
delay(28000);
f=(f+0x200);
}
numb=find_sd_fat(numb);
}
}
}
(f)ƴa
gӭR (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1