最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng)
驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe

提供用ATmega103的MP3解碼方案

作者:esuo 欄目:單片機
提供用ATMEGA103的MP3解碼方案
硬件:
MCU:ATMEGA103
解碼芯片: MAS3507D
DAC芯片: DAC3550A
LCD: 64x128 (HD61202 chipset)
數(shù)據(jù)源:CD-ROM /ide HardDisk

提供C源代碼、原理圖、相關開發(fā)文檔。需要的請發(fā)Email到y(tǒng)orki@163.net,最好郵件聯(lián)系,我不經常來。


* - 本貼最后修改時間:2003-10-16 17:38:16 修改者:esuo

2樓: >>參與討論
esuo
部分代碼
#define FAT_C
#include "equates.h"

u08 *pSecBuff = (u08 *)SEC_BUFFER;      // pointer to Sector Buffer
u08 *pFatBuff = (u08 *)FAT_BUFFER;      // pointer to FileAlocationTable Buffer
u08 *pTmpBuff = (u08 *)TMP_BUFFER;      // pointer to TEMP LFN Buffer


void FAT_FileInfo(STRUCT_FILE_INFO file){
  #ifdef DEBUG_FILE
    printf("%20s ", file.NAME);
    printf("a:0x%x ", file.attr);
    printf("cls:%lu ", file.clus);
    printf("sz:%lu ", file.size);
    printf("dtsec:%lu ", file.dtSec);
    printf("dtde:%u\n\r", file.dtDE);
  #else
    printf(" %s", file.NAME);
  #endif
}

STRUCT_FILE_INFO FAT_ChangeDir(STRUCT_FILE_INFO dir){
  STRUCT_FILE_INFO nextDir;

  nextDir = dir;
  nextDir.dtSec = FAT_cls2sec(dir.clus) - 1;//FAT_cls2sec(dir.clus);
  nextDir.dtDE  = 15;//0;
  #ifdef DEBUG_FAT
    printf("\n\rCHANGE DIR\n\r");
    printf("in  dir.dtDE(%2u) .clus(%lu)\n\r", dir.dtDE, dir.clus);
    printf("out dir.dtDE(%2u) .dtSec(%lu)\n\r", nextDir.dtDE, nextDir.dtSec+1);
  #endif

  return nextDir;
}

STRUCT_FILE_INFO FAT_PrevFile(STRUCT_FILE_INFO file){
  struct STRUCT_DIR_ENTRY *pDirEnt = 0;
  struct STRUCT_LFN_ENTRY *pLfnEnt;
  STRUCT_FILE_INFO prevFile;
  u08 sfn[13];
  u08 lfnCnt;
  u08 sfnDE  = 0;
  u32 sfnSec = 0;
  u08 sfnIS = FALSE;
  u08 sfnOK = FALSE;
  u08 lfnOK = FALSE;
  u16 i;
  u08 *p;

  if((file.dtSec == fat1stDataSec) && !file.dtDE){
    return file;
  }else{
    if(file.dtDE){
      prevFile.dtSec = file.dtSec;
      prevFile.dtDE  = file.dtDE - 1;
    }else{
      prevFile.dtSec = file.dtSec - 1;
      prevFile.dtDE  = 15;
    }
  }

  #ifdef DEBUG_DIR
    printf("\n\r");
  #endif

  do{
    if(prevFile.dtSec != curInSecBuff){
      ATAPI_ReadSector(prevFile.dtSec, pSecBuff);
      curInSecBuff = prevFile.dtSec;
      #ifdef DEBUG_CURINBUF
        printf("  curInSecBuff(%lu)\n\r", curInSecBuff);
      #endif
    }
    pDirEnt = ((struct STRUCT_DIR_ENTRY *) pSecBuff) + prevFile.dtDE;
    pLfnEnt = (struct STRUCT_LFN_ENTRY *) pDirEnt;

    #ifdef DEBUG_DIR
      printf(" n<%x>a<%x>", pDirEnt->NAME[0], pDirEnt->attr);
    #endif

    if(pDirEnt->NAME[0] == DE_END) return file;                     // last DirEntry
    if(pDirEnt->NAME[0] == DE_FREE);                                // free DirEntry
    else if(*pDirEnt->NAME == '.'){          // dot & dotdot DirEntry
      if(pDirEnt->NAME[1] == '.'){      // dotdot
        prevFile.NAME[0] = '.';
        prevFile.NAME[1] = '.';
        prevFile.NAME[2] = 0;
        prevFile.clus = ((u32)pDirEnt->firstClusHI << 16) + pDirEnt->firstClusLO;
        prevFile.attr = pDirEnt->attr;
        prevFile.size = pDirEnt->fileSize;
        return prevFile;
      }
      else return file;             // dot
    }
    else if(sfnIS && (pDirEnt->attr == ATTR_LONG_NAME)){  // lfn
      lfnCnt = 13 * ((pLfnEnt->cnt - 1) & CNT_MASK);
      p = &pTmpBuff[lfnCnt];
      lfnOK = FALSE;
      for (i=0; i<10; i+=2) *p++ = pLfnEnt->NAME1[i]; // copy first PART
      for (i=0; i<12; i+=2) *p++ = pLfnEnt->NAME2[i]; // second PART
      for (i=0; i< 4; i+=2) *p++ = pLfnEnt->NAME3[i]; // and third PART
      if((pLfnEnt->cnt & CNT_1stMASK)  == CNT_1stMASK){
        *p = 0;
        lfnOK = TRUE;
        sfnOK = TRUE;
        sfnIS = FALSE;
      }
    }
    else if (((pDirEnt->attr & 0x1f) == ATTR_FILE)||(pDirEnt->attr == ATTR_DIRECTORY)){ // dir or file
      if(!sfnIS){
        p = &sfn[0];
        for (i=0; i<8; i++){ if(pDirEnt->NAME[i] != ' ')    *p++ = pDirEnt->NAME[i]; }
        if((pDirEnt->attr & 0x1f) == ATTR_FILE) *p++ = '.';
        for (i=0; i<3; i++){ if(pDirEnt->NAMEExt[i] != ' ') *p++ = pDirEnt->NAMEExt[i]; }
        *p = '\0';
        prevFile.clus = ((u32)pDirEnt->firstClusHI << 16) + pDirEnt->firstClusLO;
        prevFile.attr = pDirEnt->attr;
        prevFile.size = pDirEnt->fileSize;
        sfnDE  = prevFile.dtDE;
        sfnSec = prevFile.dtSec;
        sfnIS  = TRUE;
        lfnOK  = FALSE;
      }
      else sfnOK = TRUE;
    }
    else if(sfnIS) sfnOK = TRUE;

    if(lfnOK && sfnOK){
      lfnOK = FALSE;
      for (i=0;
3樓: >>參與討論
h2o
好資料
剛收到資料,看了一偏,的確是學習的好東西,既可學習AVR,又可學習FAT、MP3、IDE接口,值得學習,我準備DIY一個MP3,希望與大家交流。

4樓: >>參與討論
名良
摟主水平不行嘛,還有飛阿飛的線
給我一份原理圖看看
masashinakayama@sina.com.cn
3X

5樓: >>參與討論
esuo
是PCB板加工不好
大家可以照著電路圖自己做PCB

* - 本貼最后修改時間:2003-10-16 10:39:03 修改者:esuo

6樓: >>參與討論
zhermit
:(,能看嗎?發(fā)我的要密碼
:(,能看嗎?發(fā)我的要密碼

7樓: >>參與討論
win2kddk
你還是DIY嗎?
esuo,不是我說你,還好意思向大家要錢!你就差那點錢嗎?!你這樣做已經嚴重的違反了DIY的精神。別人的東西,你也要得著錢!

http://www.indata.si/grega/megapeg.htm

全套資料!這才是DIY!

8樓: >>參與討論
牧碼天河
http://elm-chan.org/works/mpc/report_e.html
http://elm-chan.org/works/mpc/report_e.html

這里也有

9樓: >>參與討論
zhao74
如果要錢就太過分了,不要就要提倡,兩年前我就DOWN
 
10樓: >>參與討論
代成志
給我一份吧!daichengzhi.com@163.com
 
11樓: >>參與討論
zzl_0426
ziliao
 我也正需要  那位老兄也傳給我一份吧
                          謝謝!
     zzl_0426@163.com

參與討論
昵稱:
討論內容:
 
 
相關帖子
新手學AVR應該從AT90s8353開始嗎?
我發(fā)覺AVR生成的代碼比51大多了,怎么回事!!!!
winavr產生的奇怪的問題。不知為何?
bootloader和應用程序下載
各位都用什么C編譯器?
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號