急、急、急??!望大家?guī)蛶臀遥诰€等?。?

  我現(xiàn)在用STC89C54RD+和CH375及STA013做讀U盤MP3播放器,但是現(xiàn)在出現(xiàn)的問題是: 1、播放速度跟不上,一開始我以為是單片機(jī)的處理速度不夠(24MH),但是我倍頻后,撥放速度更慢. 2、好象這里下在的庫沒支持中文歌名的顯示,要做到這點(diǎn),應(yīng)該怎么做,請大家給個提示.

代碼如下:

#include #include #include "mainH.H"

#define MAX_BYTE_IO 192 /* 以字節(jié)為單位單次讀寫文件時的最大長度,默認(rèn)值是29,值大則占用內(nèi)存多,值小則超過該長度必須分多次讀寫 */

/* 以下定義的詳細(xì)說明請看CH375HFC.H文件 */ #define LIB_CFG_FILE_IO 1 /* 文件讀寫的數(shù)據(jù)的復(fù)制方式,0為"外部子程序",1為"內(nèi)部復(fù)制" */ #define LIB_CFG_INT_EN 0 /* CH375的INT#引腳連接方式,0為"查詢方式",1為"中斷方式" */ #define LIB_CFG_UPD_SIZE 1 /* 在添加數(shù)據(jù)后是否自動更新文件長度: 0為"不更新",1為"自動更新" */ /* 默認(rèn)情況下,如果扇區(qū)數(shù)/字節(jié)數(shù)不為0那么CH375FileWrite/CH375ByteWrite只負(fù)責(zé)寫入數(shù)據(jù)而不修改文件長度, 如果需要每次寫完數(shù)據(jù)后會自動修改/更新文件長度,那么可以使全局變量CH375LibConfig的位4為1, 如果長時間不寫入數(shù)據(jù)則應(yīng)該更新文件長度,防止突然斷電后前面寫入的數(shù)據(jù)與文件長度不相符, 如果確定不會突然斷電或者后面很快有數(shù)據(jù)不斷寫入則不必更新文件長度,可以提高速度并減少U盤損耗(U盤內(nèi)部的內(nèi)存壽命有限,不宜頻繁改寫) */

/* 只使用單片機(jī)內(nèi)置的1KB外部RAM: 0000H-01FFH 為磁盤讀寫緩沖區(qū), 以字節(jié)為單位讀寫文件不需要文件數(shù)據(jù)讀寫緩沖區(qū)FILE_DATA_BUF */ #define DISK_BASE_BUF_ADDR 0x0000 /* 外部RAM的磁盤數(shù)據(jù)緩沖區(qū)的起始地址,從該單元開始的緩沖區(qū)長度為SECTOR_SIZE */ #define FILE_DATA_BUF_ADDR 0x0000 /* 外部RAM的文件數(shù)據(jù)緩沖區(qū)的起始地址,緩沖區(qū)長度不小于一次讀寫的數(shù)據(jù)長度,字節(jié)模式不用該緩沖區(qū) */ /* 由于單片機(jī)內(nèi)置的外部RAM只有1KB, 有些單片機(jī)還要去掉256字節(jié)內(nèi)部RAM, 只剩下768字節(jié)的外部RAM, 其中前512字節(jié)由CH375子程序用于磁盤數(shù)據(jù)緩沖 */ //#define FILE_DATA_BUF_LEN 0x0200 /* 外部RAM的文件數(shù)據(jù)緩沖區(qū),緩沖區(qū)長度不小于一次讀寫的數(shù)據(jù)長度,字節(jié)模式不用該緩沖區(qū) */ /* 如果準(zhǔn)備使用雙緩沖區(qū)交替讀寫,那么不要定義FILE_DATA_BUF_LEN,而是在參數(shù)中指定緩沖區(qū)起址,用CH375FileReadX代替CH375FileRead,用CH375FileWriteX代替CH375FileWrite */

#define CH375_INT_WIRE INT3 /* P3.2, INT0, CH375的中斷線INT#引腳,連接CH375的INT#引腳,用于查詢中斷狀態(tài) */

#include "CH375HFC.H" #include "sta013H.H"

/* 本例用I/O引腳模擬產(chǎn)生CH375的并口讀寫時序 */ /* 本例中的硬件連接方式如下(實際應(yīng)用電路可以參照修改下述3個并口讀寫子程序) */ /* 單片機(jī)的引腳 CH375芯片的引腳 P3.2 INT# P1.0 A0 P1.1 CS# 如果模擬出的并口上只有CH375,那么CS#可以直接接低電平,強(qiáng)制片選 P1.2 WR# P1.3 RD# P0(8位端口) D7-D0 */ sbit CH375_A0 = P4^1; //sbit CH375_CS = P3^5; //CS->GND sbit CH375_WR = P3^6; // sbit CH375_RD = P3^7; //

void mDelay1_2uS( ) /* 至少延時1.2uS,根據(jù)單片機(jī)主頻調(diào)整 */ { return; }

void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫命令 */ { mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延時1uS */ P0 = mCmd; /* 向CH375的并口輸出數(shù)據(jù) */ CH375_A0 = 1; // CH375_A0 = 1; CH375_WR = 0; /* 輸出有效寫控制信號, 寫CH375芯片的命令端口 */ CH375_A0 = 1; /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */ CH375_WR = 1; /* 輸出無效的控制信號, 完成操作CH375芯片 */ // CH375_CS = 1; CH375_A0 = 0; // P0 = 0xFF; /* 禁止數(shù)據(jù)輸出 */ mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延時2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫數(shù)據(jù) */ { P0 = mData; /* 向CH375的并口輸出數(shù)據(jù) */ CH375_A0 = 0; // CH375_A0 = 0; CH375_WR = 0; /* 輸出有效寫控制信號, 寫CH375芯片的數(shù)據(jù)端口 */ CH375_A0 = 0; /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */ CH375_WR = 1; /* 輸出無效的控制信號, 完成操作CH375芯片 */ // CH375_CS = 1; // P0 = 0xFF; /* 禁止數(shù)據(jù)輸出 */ mDelay1_2uS( ); /* 至少延時1.2uS */ }

UINT8 xReadCH375Data( void ) /* 外部定義的被CH375程序庫調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mData; P0 = 0xFF; /* 輸入 */ mDelay1_2uS( ); /* 至少延時1.2uS */ CH375_A0 = 0; // CH375_A0 = 0; CH375_RD = 0; /* 輸出有效寫控制信號, 讀CH375芯片的數(shù)據(jù)端口 */ CH375_A0 = 0; /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */ mData = P0; /* 從CH375的并口輸入數(shù)據(jù) */ CH375_RD = 1; /* 輸出無效的控制信號, 完成操作CH375芯片 */ // CH375_CS = 1; return( mData ); }

/* 延時100毫秒,不精確 */ void mDelay100mS( ) { UINT8 i, j, c; for ( i = 200; i != 0; i -- ) for ( j = 200; j != 0; j -- ) c+=3; }

/* 將程序空間的字符串復(fù)制到外部RAM中,返回字符串長度 */ UINT8 mCopyCodeStringToXRAM( UINT8 xdata *iDestination, UINT8 code *iSource ) { UINT8 i = 0; while ( *iDestination = *iSource ) { iDestination ++; iSource ++; i ++; } return( i ); }

/* 檢查操作狀態(tài),如果錯誤則顯示錯誤代碼并停機(jī) */ void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* 操作成功 */ printf( "Error: %02X\n", (UINT16)iError ); /* 顯示錯誤 */ while ( 1 ) { mDelay100mS( ); mDelay100mS( ); } }

/* 為printf和getkey輸入輸出初始化串口 */ void mInitSTDIO( ) { T2CON=0X34; SCON=0X50; RCAP2H=0XFF; RCAP2L=0Xb0; //RCAP2L=fa 9600bps @24.576Mhz TMOD=0x91; TR2=TI=1; ET1=IT1=EX1=EA=1; }

U8 ReadData() { mCmdParam.ByteRead.mByteCount = 1; CH375ByteRead(); return(mCmdParam.ByteRead.mByteBuffer[0]); } /********************************* Playing mp3 file **********************************/ void PlayMp3() { U8 i; U8 *p=128; while(1){ i = mCopyCodeStringToXRAM( mCmdParam.Open.mPathName, "\\*" ); //*搜索文件名,*為通配符 mCmdParam.Open.mPathName[ i ] = FileNo; /* 根據(jù)字符串長度將結(jié)束符替換為搜索的序號,從0到254 */ i = CH375FileOpen( ); /* 打開文件,如果文件名中含有通配符*,則為搜索文件而不打開 */ if ( i == ERR_MISS_FILE ){ if(FileNo>1)FileNo-=1; else break; } else break; } if ( CH375FileOpen() == ERR_SUCCESS ) { /* 搜索到與通配符相匹配的文件名,文件名及其完整路徑在命令緩沖區(qū)中 */ printf( " Playing file %s\n", mCmdParam.Open.mPathName ); /* 顯示序號和搜索到的匹配文件名或者子目錄名 */ } mCmdParam.ByteLocate.mByteOffset = 0; /* 移到文件的頭部 */ CH375ByteLocate( ); mCmdParam.ByteRead.mByteCount = 64; CH375ByteRead(); // for (i=0; i<128; i++){ *p=mCmdParam.ByteRead.mByteBuffer[i]; p++; } // CH375FileClose( ); /* 關(guān)閉文件 */ sta013StartDecoder(); Playing=1; }

main( ) { UINT8 i,j,dat; //, month, hour;// UINT16 date, adc, len; mDelay100mS( ); /* 延時100毫秒 */ mInitSTDIO( ); /* 為了讓計算機(jī)通過串口監(jiān)控過程 */ i = CH375LibInit( ); /* 初始化CH375程序庫和CH375芯片,操作成功返回0 */ mStopIfError( i ); printf( "Waiting Insert Udisk\n" ); while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 */ mDelay100mS( ); /* 延時,可選操作,有的USB存儲器需要幾十毫秒的延時 */ mDelay100mS( ); /* 檢查U盤是否準(zhǔn)備好,有些U盤不需要這一步,但是某些U盤必須要執(zhí)行這一步才能工作 */ for ( i = 0; i < 5; i ++ ) { /* 有的U盤總是返回未準(zhǔn)備好,不過可以被忽略 */ mDelay100mS( ); printf( "Ready ?\n" ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查詢磁盤是否準(zhǔn)備好 */ }

/* 其它電路初始化 */ if (sta013Init()=='F') printf("Intilize Sta013 Fail\n"); else printf("Intilize Sta013 OK!!!\n"); FileNo=1; i=0; volum('+'); PlayMp3();

while

1:字節(jié)讀寫肯定不行,改為扇區(qū)讀寫. 2:軟件模擬SPI速度要優(yōu)化,建議使用硬件SPI或這串口方式0.


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频

字体
字号
代码语言