久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2727|回復: 2
打印 上一主題 下一主題
收起左側

開始MP3的制作!

[復制鏈接]
跳轉到指定樓層
樓主
ID:83710 發表于 2015-6-23 16:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 hongniu 于 2015-6-23 16:48 編輯

MP3從今天下午開時做,到5點數據調整完畢,完整的播放一首《第一次愛的人》音質可以和我的P4媲美!那叫一個爽。‖F在我才知道SD卡的牛逼!只有玩過的人才會說:原來是這樣!看程序!/*真是爽!今天下午我沒去上班!把MP3搞定了!昨天搞定TFT9325 TFT液晶!現在播放那!。!12月24日。。。。∮糜郎y忘。。。。。*/



  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit p1_7=P1^7;
  5. sbit CS=P2^0; //片選信號(低電平有效)
  6. sbit DATEIN =P2^1;//主-從數據輸入
  7. sbit SCLK=P2^2;//時鐘信號
  8. sbit DATEOUT=P2^3;//從-主數據輸出
  9. uint btime;
  10. uchar c;

  11. sbit led4=P1^0;
  12. sbit led3=P1^1;    //第一個自己編寫的c程序,付出了太多,才換回這幾行代碼,源于熱愛!2010年8月8日與天津開發區
  13. sbit led2=P1^2;
  14. sbit led1=P1^3;
  15. uchar g=0,s=0,bw=0,q=0; //顯示單元 個位、十位、百位、千位
  16. uchar code tab1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//不帶小數點顯示0~9

  17. unsigned char bdata dat;
  18. sbit dat_0=dat^0;
  19. sbit dat_1=dat^1;
  20. sbit dat_2=dat^2;
  21. sbit dat_3=dat^3;
  22. sbit dat_4=dat^4;
  23. sbit dat_5=dat^5;
  24. sbit dat_6=dat^6;
  25. sbit dat_7=dat^7;

  26. bit is_init;//決定是否延時;
  27.   uchar lpp;
  28. unsigned char fhz;//返回值
  29. uchar fhz_buff; //讀返回值中間量
  30. unsigned char xdata tab[512];

  31. ///*******************以上是SD卡
  32. /*
  33. VS1003mp3模塊的接口定義

  34. */
  35. sbit XRST=P1^0;//復位
  36. sbit DREQ=P1^1; //數據請求
  37. sbit XDCS=P1^2;  //數據片選
  38. sbit XCS=P1^3; //命令片選
  39. /*
  40. /* VS1003mp3SPI通信接口定義
  41. */
  42. sbit SCK=P1^4; //時鐘
  43. sbit SI=P1^5; //串行輸入
  44. sbit SO=P1^6;  //串行輸出










  45. void delay(uint time)
  46. {  while(time)
  47.   time--;
  48. }

  49. //**********************************************
  50. /*讀sd卡子程序,無返回值,有參函數,參數為要寫入DATEIN數據線的字節*/
  51. void write(unsigned char wr_)// 寫入一個字節SD卡
  52. {
  53.            dat=wr_;
  54.         DATEIN=dat_7;
  55.    
  56.       SCLK=0;
  57.    if(is_init)delay(200);
  58.      if(!is_init)delay(2);
  59.       SCLK=1;
  60.       if(is_init) delay(200);
  61.        if(!is_init)delay(2);
  62.   
  63.       DATEIN=dat_6;
  64.    
  65.       SCLK=0;
  66.      if(!is_init)delay(2);
  67.     if(is_init)delay(200);
  68.       SCLK=1;
  69.       if(is_init) delay(200);
  70.      if(!is_init)delay(2);

  71.       DATEIN=dat_5;
  72.    
  73.       SCLK=0;
  74.     if(is_init)delay(200);
  75.      if(!is_init)delay(2);
  76.       SCLK=1;
  77.       if(is_init) delay(200);
  78.     if(!is_init)delay(2);

  79.       DATEIN=dat_4;
  80.    
  81.       SCLK=0;
  82.     if(is_init)delay(200);
  83.       if(!is_init)delay(2);
  84.       SCLK=1;
  85.       if(is_init) delay(200);
  86.      if(!is_init)delay(2);

  87.      DATEIN=dat_3;
  88.    
  89.       SCLK=0;
  90.     if(is_init)delay(200);
  91.       if(!is_init)delay(2);
  92.       SCLK=1;
  93.       if(is_init) delay(200);
  94.     if(!is_init)delay(2);

  95.      DATEIN=dat_2;
  96.    
  97.       SCLK=0;
  98.     if(is_init)delay(200);
  99.       if(!is_init)delay(2);
  100.       SCLK=1;
  101.       if(is_init) delay(200);
  102.       if(!is_init)delay(2);

  103.     DATEIN=dat_1;
  104.    
  105.       SCLK=0;
  106.     if(is_init)delay(200);
  107.      if(!is_init)delay(2);
  108.       SCLK=1;
  109.       if(is_init) delay(200);
  110.      if(!is_init)delay(2);

  111.     DATEIN=dat_0;
  112.    
  113.       SCLK=0;
  114.     if(is_init)delay(200);
  115.       if(!is_init)delay(2);
  116.       SCLK=1;
  117.       if(is_init) delay(200);
  118.      if(!is_init)delay(2);
  119. }
  120. unsigned char read()// 讀取一個字節SD卡
  121. {
  122.           DATEOUT=1;
  123.          SCLK=1;
  124.    if(is_init)delay(200);
  125.      if(!is_init)delay(2);
  126.    SCLK=0;
  127.     if(is_init)delay(200);
  128.    if(!is_init)delay(2);
  129.     dat_7=DATEOUT;

  130.      SCLK=1;
  131.    if(is_init)delay(200);
  132.    if(!is_init)delay(2);
  133.    SCLK=0;
  134.     if(is_init)delay(200);
  135.      if(!is_init)delay(2);
  136.     dat_6=DATEOUT;

  137.     SCLK=1;
  138.    if(is_init)delay(200);
  139.     if(!is_init)delay(2);
  140.    SCLK=0;
  141.     if(is_init)delay(200);
  142.     if(!is_init)delay(2);
  143.     dat_5=DATEOUT;

  144.     SCLK=1;
  145.    if(is_init)delay(200);
  146.      if(!is_init)delay(2);
  147.    SCLK=0;
  148.     if(is_init)delay(200);
  149.    if(!is_init)delay(2);
  150.     dat_4=DATEOUT;

  151.      SCLK=1;
  152.    if(is_init)delay(200);
  153.     if(!is_init)delay(2);
  154.    SCLK=0;
  155.     if(is_init)delay(200);
  156.      if(!is_init)delay(2);
  157.     dat_3=DATEOUT;

  158.     SCLK=1;
  159.    if(is_init)delay(200);
  160.        if(!is_init)delay(2);
  161.    SCLK=0;
  162.     if(is_init)delay(200);
  163.        if(!is_init)delay(2);
  164.     dat_2=DATEOUT;

  165.      SCLK=1;
  166.    if(is_init)delay(200);
  167.         if(!is_init)delay(2);
  168.    SCLK=0;
  169.     if(is_init)delay(200);
  170.        if(!is_init)delay(2);
  171.     dat_1=DATEOUT;


  172.      SCLK=1;
  173.    if(is_init)delay(200);
  174.          if(!is_init)delay(2);
  175.    SCLK=0;
  176.     if(is_init)delay(200);
  177.           if(!is_init)delay(2);
  178.     dat_0=DATEOUT;


  179.    return (dat);

  180. }

  181. void restsd()//復位SD卡
  182. {  uchar i;
  183. uchar pcmd[6]={0x40,0x00,0x00,0x00,0x00,0x95};
  184. is_init=1;

  185. CS=1;
  186. for(i=0;i<15;i++)
  187. {
  188.        //120時鐘
  189.    write(0xff);
  190. }


  191.   
  192.   
  193.       CS=1;
  194.    write(0xff);//據說是提高兼容性
  195.    CS=0;//片選開

  196.    write( pcmd[0]);
  197.    write( pcmd[1]);
  198.    write( pcmd[2]);
  199.    write( pcmd[3]);
  200.    write( pcmd[4]);
  201.    write( pcmd[5]);

  202.    fhz=read();
  203. for(;;)
  204. {
  205.    fhz=read();
  206.    if(fhz==0x01)break;


  207. }

  208.   
  209.   CS=1;
  210.   write(0xff);

  211. }




  212. void initsd()//初始化
  213. {
  214. //
  215.    uchar pcmd[6]={0x41,0x00,0x00,0x00,0x00,0xff};//
  216. //

  217.       CS=1;
  218.    write(0xff);//據說是提高兼容性
  219.    CS=0;//片選開

  220.    write( pcmd[0]);
  221.    write( pcmd[1]);
  222.    write( pcmd[2]);
  223.    write( pcmd[3]);
  224.    write( pcmd[4]);
  225.    write( pcmd[5]);

  226.   
  227.    fhz=read();
  228. for(;;)
  229. {
  230.    fhz=read();
  231.    if(fhz==0x00)break;


  232. }

  233.   
  234.   CS=1;
  235.   write(0xff);








  236. }

  237. void readsd(unsigned long addstart)//讀SD卡物理扇區
  238.    
  239. {  unsigned long sdbuff1,sdbuff2,sdbuff3,sdbuff4;  
  240.    uint j,n;
  241. uchar zh1,zh2,zh3,zh4;
  242.   sdbuff1=addstart;
  243.   sdbuff2=addstart;
  244.   sdbuff3=addstart;
  245.   sdbuff4=addstart;

  246.      zh1=(sdbuff1>>24)&0x000000ff;
  247.     zh2=(sdbuff2>>16)&0x000000ff;
  248.       zh3=(sdbuff3>>8)&0x000000ff;
  249.      zh4=sdbuff4&0x000000ff;
  250.    // uchar pcmd[6]={0x51,zh1,zh2,zh3,zh4,0xff};//原來這里是高地址字節在前地地址在后啊201012月14日邏輯扇區在253*512=0X0001fa00



  251.    CS=1;
  252.    write(0xff);//據說是提高兼容性
  253.    CS=0;//片選開

  254.    write( 0x51);
  255.    write( zh1);
  256.    write( zh2);
  257.    write( zh3);
  258.    write( zh4);
  259.    write( 0xff);
  260.    DATEOUT=1;
  261.   
  262. for(;;)
  263. {
  264.    fhz=read();
  265.    if(fhz==0x00)break;


  266. }
  267. DATEOUT=1;

  268.    for(;;)
  269. {
  270.    fhz=read();
  271.    if(fhz==0xfe)break;


  272. }

  273.   DATEOUT=1;
  274. n=0;
  275. for(j=512;j;j--)
  276. {  
  277.    tab[n]=read();
  278.     n++;

  279. }
  280. fhz=read();
  281. fhz=read();
  282. CS=1;
  283. write(0xff);








  284. }


  285. ////***************************************以上是SD主程序


  286. ///*************************************以下是MP3模塊的程序

  287. void delay1ms(uint j)//延時100us
  288. {unsigned char i;

  289.    for(i=j;i;i--)
  290.    {
  291.    
  292.       


  293.   }
  294. }



  295. void spi_write_mp3(uchar h)//SPI寫入一個字節,這里是最底層的數據發送!
  296. {
  297.   uchar i;

  298. SCLK=1;
  299. for(i=8;i;i--)
  300. {

  301.       SI=h&0x80;
  302.    h=h<<1;
  303.    SCK=0;
  304.    //delay1ms(1);  //這里不要加任何的延時!提高寫入MP3模塊的寫入速度!
  305.       SCK=1;
  306.   // delay1ms(1);

  307. }






  308. }


  309. /*uchar spi_read_mp3()// SPI讀取一個字節
  310. {
  311.     uchar i,read;
  312.    for(i=8;i;i--)
  313.    {
  314.     SCLK=1;
  315.        delay();
  316.        SCLK=0;
  317.     delay();
  318.        read=SO&0x80;
  319.        read=(read<<1);

  320.     }
  321.     SCLK=1;

  322.   return (read);
  323. }
  324. */
  325. void write_comd_mp3(uchar add,uint date)//寫入控制命令add地址date是數據注意這里是16位的數據,內部做分開了處理
  326. {     
  327.     uchar h,l;
  328.     l=date;
  329.     h=(date>>8);

  330.         DREQ=1;
  331.        while(!DREQ); //檢測MP3模塊的忙狀態
  332.   XCS=0;
  333.     spi_write_mp3(2); //表示寫操作
  334.     spi_write_mp3(add);
  335.     spi_write_mp3(h);  //先寫高8位
  336.     spi_write_mp3(l);
  337.     XCS=1;




  338. }

  339. void write_date_mp3(uchar dat)//寫入音頻數據信息這里還有一點是XDCS在此函數外拉低
  340. {

  341.    DREQ=1;
  342.        while(!DREQ);
  343.   spi_write_mp3(dat);



  344. }

  345. void init_mp3()  //初始化vs1003
  346. {
  347.   XRST=1;
  348.   delay1ms(100);
  349.   XRST=0;
  350.   delay1ms(100);
  351.   XRST=1;
  352.   delay1ms(100);

  353.     write_comd_mp3(0x00,0x0804);//模式設置
  354. write_comd_mp3(0x03,0x9800);//時鐘控制
  355. write_comd_mp3(0x0b,0x0000);//聲音控制 00是最大的。。。!

  356. XDCS=0;//數據片選
  357. spi_write_mp3(0);
  358. spi_write_mp3(0);
  359. spi_write_mp3(0);
  360. spi_write_mp3(0);
  361. XDCS=1;


  362. }

  363. void sing(uchar fhz)//正選測試
  364. {
  365.   
  366.   
  367.    write_comd_mp3(0x00,0x0820);
  368.    DREQ=1;
  369.        while(!DREQ);
  370.     XDCS=0;
  371.     write_date_mp3(0x53);
  372.     write_date_mp3(0xef);
  373.     write_date_mp3(0x6e);//正選測試開啟
  374.     write_date_mp3(fhz); //頻率選擇

  375.     write_date_mp3(0);
  376.     write_date_mp3(0);
  377.        write_date_mp3(0);
  378.     write_date_mp3(0);
  379.      delay1ms(60000);
  380.     write_date_mp3(0x45);   //正選關段
  381.     write_date_mp3(0x78);
  382.     write_date_mp3(0x69);
  383.     write_date_mp3(0x74);

  384.     write_date_mp3(0);
  385.     write_date_mp3(0);
  386.        write_date_mp3(0);
  387.     write_date_mp3(0);
  388.      XDCS=1;











  389. }

  390. //以上是MP3程序
  391. void main()
  392. { unsigned long numb,k;
  393. uint  i;
  394. uchar sd_mp3_buff;
  395.    while(1)
  396.    {
  397. init_mp3();//初始化MP3
  398. ////////////////
  399. is_init=1;
  400. restsd();
  401. initsd();
  402. is_init=0;//提高始終頻率
  403. ///////////////




  404. sing(100);//正選測試
  405. XDCS=0;
  406.    numb=4327936;




  407. for(k=11388;k;k--)
  408. {
  409.      readsd(numb);//讀物理扇區

  410.                 for(i=0;i<512;i++)  //一個扇區的數據送入MP3中
  411.                  {
  412.       
  413.    
  414.    
  415.                   sd_mp3_buff=tab[i];
  416.                  write_date_mp3( sd_mp3_buff);
  417.    
  418.    

  419.                     }

  420.      numb=(numb+512);





  421.   }
  422.    XDCS=1;





  423.     }


  424. }
復制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:155785 發表于 2017-2-28 07:52 | 只看該作者
您好,能否分享電路,謝謝
回復

使用道具 舉報

板凳
ID:171696 發表于 2017-3-19 17:20 | 只看該作者
請分享電路圖
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91麻豆产精品久久久久久夏晴子 | 亚洲天堂影院 | 色桃网 | 欧美精品一区三区 | 国产一区二区在线免费视频 | 一本色道精品久久一区二区三区 | 91精品国产91久久久久游泳池 | 免费一区二区三区 | 夜夜夜夜草 | 久草福利 | 天堂成人国产精品一区 | www.亚洲一区二区三区 | 久草在线 | 亚洲综合大片69999 | 看毛片网站 | 欧洲亚洲一区二区三区 | 午夜视频在线免费观看 | 成人免费在线小视频 | 日韩在线一区二区三区 | 免费一级黄色录像 | 国产精品久久久亚洲 | 精品日韩在线 | 国外成人在线视频网站 | 欧美日韩国产中文 | 欧美日韩国产高清 | 久久久久国产 | 亚洲高清av | 一区二区三区av | 久久岛国 | 一级欧美一级日韩片免费观看 | 在线看av网址 | 色视频在线播放 | 欧美亚洲成人网 | 婷婷在线视频 | 国产精品成av人在线视午夜片 | 91精品国产乱码久久久久久久久 | 亚洲www啪成人一区二区 | 成人精品鲁一区一区二区 | 中文字幕视频在线观看 | 99久久久久久 | 久久精品国产亚洲一区二区 |