可以到300K了:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- //******************
- sbit p1_7=P1^7;
- sbit CS=P2^0; //片選信號(低電平有效)
- sbit DATEIN =P2^1;//主-從數(shù)據(jù)輸入
- sbit SCLK=P2^2;//時鐘信號
- 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;//決定是否延時;
- uchar lpp;
- unsigned char fhz;//返回值
- uchar fhz_buff; //讀返回值中間量
- //unsigned char xdata tab[512];
- ///*******************以上是SD卡
- /*
- VS1003mp3模塊的接口定義
- */
- sbit XRST=P1^0;//復(fù)位
- sbit DREQ=P1^1; //數(shù)據(jù)請求
- sbit XDCS=P1^2; //數(shù)據(jù)片選
- sbit XCS=P1^3; //命令片選
- /*
- /* VS1003mp3SPI通信接口定義
- */
- sbit SCK=P1^4; //時鐘
- 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模塊的程序
- void delay1ms(uint j)//延時100us
- {unsigned char i;
- for(i=j;i;i--)
- {
- }
- }
- void spi_write_mp3_1(uchar h)//SPI寫入一個字節(jié),這里是最底層的數(shù)據(jù)發(fā)送!
- {
- datmp3=h;
- /*SCLK=1;
- for(i=8;i;i--)
- {
-
- SI=h&0x80;
- h=h<<1;
- SCK=0;
- //delay1ms(1); //這里不要加任何的延時!提高寫入MP3模塊的寫入速度!
- SCK=1;
- // delay1ms(1);
-
-
- }*/
- SI=datmp3_7;
- //為了進一步提高速度我這里采用了順序結(jié)構(gòu)!全是斷橋殘雪惹的禍!第一次愛的人播放正常!而斷橋殘雪不行了!一定盡全力
- SCK=0; //從SD讀取和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()// SPI讀取一個字節(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ù),內(nèi)部做分開了處理
- {
- uchar h,l;
- l=date;
- h=(date>>8);
- DREQ=1;
- while(!DREQ); //檢測MP3模塊的忙狀態(tài)
- 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)//寫入音頻數(shù)據(jù)信息這里還有一點是XDCS在此函數(shù)外拉低
- {
- DREQ=1;
- while(!DREQ);
- datmp3=dat;
- SI=datmp3_7;
- //為了進一步提高速度我這里采用了順序結(jié)構(gòu)!全是斷橋殘雪惹的禍!第一次愛的人播放正常!而斷橋殘雪不行了!一定盡全力
- SCK=0; //從SD讀取和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);//模式設(shè)置
- write_comd_mp3(0x03,0x9800);//時鐘控制
- write_comd_mp3(0x0b,250);//聲音音量控制 00是最大的。。。!
- XDCS=0;//數(shù)據(jù)片選
- 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)//正選測試
- {
-
-
- write_comd_mp3(0x00,0x0820);
- DREQ=1;
- while(!DREQ);
- XDCS=0;
- write_date_mp3(0x53);
- write_date_mp3(0xef);
- write_date_mp3(0x6e);//正選測試開啟
- write_date_mp3(fhz); //頻率選擇
- write_date_mp3(0);
- write_date_mp3(0);
- write_date_mp3(0);
- write_date_mp3(0);
- delay1ms(60000);
- write_date_mp3(0x45); //正選關(guān)段
- 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程序
- //*//**********************************************
- /*讀sd卡子程序,無返回值,有參函數(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()// 讀取一個字節(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()// 讀取一個字節(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++)
- {
- //120時鐘
- write(0xff);
- }
-
-
- CS=1;
- write(0xff);//據(jù)說是提高兼容性
- CS=0;//片選開
- 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()//初始化
- {
- //
- uchar pcmd[6]={0x41,0x00,0x00,0x00,0x00,0xff};//
- //
-
- CS=1;
- write(0xff);//據(jù)說是提高兼容性
- CS=0;//片選開
- 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)//讀SD卡物理扇區(qū)
-
- { unsigned long sdbuff2;
- uint j,n;
- uchar sd_mp3_buff;
- uchar zh2,zh3,zh4;
- sdbuff2=addstart;
-
- zh4=addstart;
- zh2=(sdbuff2>>16); //把以前的代碼大部分省略,為了速度!1!。
- zh3=(addstart>>8);
-
- // uchar pcmd[6]={0x51,zh1,zh2,zh3,zh4,0xff};//原來這里是高地址字節(jié)在前地地址在后啊201012月14日邏輯扇區(qū)在253*512=0X0001fa00
-
-
- //CS=1;
- // write(0xff);//據(jù)說是提高兼容性 ;;;;速度!提高
- CS=0;//片選開
- 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(j=512;j;j--)
- {
- // tab[n]=read1();
- // n++;
- //sd_mp3_buff=tab[i];
- sd_mp3_buff=read1();
- write_date_mp3( sd_mp3_buff);
-
- }
- fhz=read1();
- fhz=read1();
- CS=1;
- write1(0xff);
-
-
-
- } */
- ////***************************************以上是SD主程序
- void main() //主程序
- {
- uchar *p;
- static unsigned long numb;
- uint j,n;
- //uchar sd_mp3_buff;
- uchar zh2,zh3,zh4;
- //uint i;
-
- init_mp3();//初始化MP3
- ////////////////
- is_init=1;
- restsd();
- initsd();
- is_init=0;//提高始終頻率
- ///////////////
-
-
-
-
- sing(100);//正選測試
-
-
- while(1)
- {
-
- numb=4327936; //從4327936物理地址開始讀歌曲!
-
- //這里的指針操作比移位操作快多了。。!
- XDCS=0;
- for(;;)
- {
-
- p=&numb; //取出存放Numb的地址的最高位!詳細請看匯編!
- p++; //由于最高位不用所以這里舍去小于2G
- zh2=*p;//從高到底的地第二字節(jié) 、、
- p++;
- zh3=*p; //從高到底的地第三字節(jié)
- p++;
- zh4=*p; //從高到底的地第四字節(jié)
- //readsd(numb);//讀物理扇區(qū)
- //**************
- //sdbuff2=numb;
-
- /*zh4=numb;
- zh3=(numb>>8);
- zh2=(numb>>16); //把以前的代碼大部分省略,為了速度!1。!
- */
-
- // uchar pcmd[6]={0x51,zh1,zh2,zh3,zh4,0xff};//原來這里是高地址字節(jié)在前地地址在后啊201012月14日邏輯扇區(qū)在253*512=0X0001fa00
-
-
- //CS=1;
- // write(0xff);//據(jù)說是提高兼容性 ;;;;速度!提高
- CS=0;//片選開
- // write1( 0x51); //fhz=read1(); 以下是寫SD卡物理扇區(qū)地址
- 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(); 以上是寫SD卡
- //write1( 0x00);//這里是2G以下可以為00 //fhz=read1(); 以下是寫SD卡
- 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(); 以上是寫SD卡
- //write1( zh2); //fhz=read1(); 以下是寫SD卡
- 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(); 以上是寫SD卡
- // write1( zh3); //fhz=read1(); 以下是寫SD卡
- 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(); 以上是寫SD卡
- //write1( zh4); //fhz=read1(); 以下是寫SD卡
- 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(); 以上是寫SD卡
- // write1( 0xff); //fhz=read1(); 以下是寫SD卡
- 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; // 以上是寫SD卡
-
- for(;;)
- {
- //fhz=read1(); 以下是讀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;
- fhz=dat; // 以上是讀SD卡
- if(fhz==0x00)break;
-
-
- }
- DATEOUT=1;
- for(;;)
- {
- // fhz=read1(); 以下是讀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;
- fhz=dat; //fhz=read1(); 以上是讀SD卡
- if(fhz==0xfe)break;
-
-
- }
- DATEOUT=1;
- n=0;
- for(j=512;j;j--)
- {
- DATEOUT=1; //fhz=read1(); 以下是讀SD卡
- 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(); 以上是讀SD卡
- datmp3=dat; //fhz=read1(); 以下是寫mp3bit流
- DREQ=1;
- while(!DREQ);
-
- SI=datmp3_7;
- //為了進一步提高速度我這里采用了順序結(jié)構(gòu)!全是斷橋殘雪惹的禍!第一次愛的人播放正常!而斷橋殘雪不行了!一定盡全力
- SCK=0; //從SD讀取和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;
-
-
-
-
-
-
-
- //以上是寫mp3bit流
- }
- //**********************以下是讀CRC*****
- 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;
- //**********************以上是讀CRC*****
- //**************
-
- numb=(numb+0x200);
-
-
-
- }
-
- // XDCS=1;
-
- }
-
- }
復(fù)制代碼 |