|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請問有誰做過CD-ROM控制 |
| 作者:lisongping 欄目:單片機 |
我現(xiàn)在要做一個CD-ROM空制器,是用s51通過APAPI協(xié)議來控制 不知道誰有APAPI的資料,我要的是那幾條命令(播放,開窗,上一曲,下一曲,停止,暫停)還有就是怎么知道我的CD里有多少歌曲。 |
| 2樓: | >>參與討論 |
| 作者: ymq8328 于 2005/6/9 10:39:00 發(fā)布:
這個東西不是什么新技術(shù)了,資料多的是。 把你的問題好好描寫一下,我可以幫你。 S51好像不太可能。 |
|
| 3樓: | >>參與討論 |
| 作者: lisongping 于 2005/6/9 13:07:00 發(fā)布:
CD-ROM.html">CD-ROM 你有CD-ROM的控制過程嗎 就是他的時序 做cd,用什么工作方式 |
|
| 4樓: | >>參與討論 |
| 作者: 來與君 于 2005/6/9 13:20:00 發(fā)布:
在什么地方見過 好象是 bbs.cdle.net 叫什么明浩的 樓主奔過去瞅瞅 |
|
| 5樓: | >>參與討論 |
| 作者: computer00 于 2005/6/9 13:23:00 發(fā)布:
51控制CDROM。忘記在哪下載到的了,下載回來還沒看過呢。 #include <at89x51.h> #define A0 P0_0 #define A1 P0_1 #define A2 P0_2 #define CS0 P0_3 #define CS1 P0_4 #define WR P0_5 #define RD P0_6 #define RST P0_7 #define CDCOM P0 //CDROM控制線 #define INTRQ P3_7 //INTRQ #define DBM P2 //CDROM數(shù)據(jù)線高8位 #define DBL P1 //CDROM數(shù)據(jù)線低8位 //------------------------------------------// // // // P0.0--------------------------------P0.7 // // A0 A1 A2 CS0 CS1 WR RD RST // // // //------------------------------------------// //用變量設(shè)置P0的值,以方便對應(yīng)于各寄存器的地址值 #define REG_Data 0xE0 #define REG_Err 0xE1 //Features #define REG_Features 0xE1 #define REG_Sector 0xE2 #define REG_CyLow 0xE4 #define REG_CyHig 0xE5 #define REG_DriveHead 0xE6 #define REG_Status 0xE7 //Command #define REG_Command 0xE7 #define PLAYKey P3_2 #define EJECTKey P3_3 #define STOPKey P3_5 #define NEXTKey P3_4 #define PREVIOUSKey P3_6 #define ERRLED P3_7 unsigned CHAR code ReadSubP[]={0x42,0x02,0x40,0x01,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00}; //ReadSub命令信息包 unsigned CHAR code ReadTOCP[]={0x43,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00}; //ReadTOC命令信息包 unsigned CHAR code PlayMSFP[]={0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //MSF播放命令信息包 unsigned CHAR data PacketTemp[24]; //信息包暫存RAM,用寫數(shù)據(jù)和讀數(shù)據(jù)的暫存 unsigned CHAR REGBL=0, REGBM=0; //用于暫存讀取寄存器的值 unsigned CHAR PacketSize; //用于保存CDROM定義的信息包長度,有12,16 unsigned CHAR bdata CDStatusREG; //可位尋址變量保存CDROM的狀態(tài)寄存器值 sbit ERR = CDStatusREG^0; //錯誤 sbit DRQ = CDStatusREG^3; //數(shù)據(jù)請求 sbit DRDY = CDStatusREG^6; //設(shè)備就緒 sbit BSY = CDStatusREG^7; //忙 unsigned CHAR bdata CDErr=0; //保存各種錯誤標識 sbit INITERR = CDErr^0; //初始化錯誤 sbit TESTERR = CDErr^1; //CDROM自身診斷錯誤 sbit UKERR = CDErr^2; //未知錯誤 sbit EJECTING = CDErr^3; //彈出 sbit CDOK = CDErr^4; //CD就緒 sbit PLAYING = CDErr^5; sbit PAUSEING = CDErr^6; sbit STOPING = CDErr^7; unsigned CHAR DEV; //選擇驅(qū)動器時所用的參數(shù) unsigned CHAR AudioStatus; //當前的播放狀態(tài) unsigned CHAR StartTrackNum; //開始曲目 unsigned CHAR EndTrackNum; //結(jié)束曲目 unsigned CHAR CurrentTrackNum; //當前曲目 unsigned CHAR CurrentM, CurrentS, CurrentF; //當前MSF值 unsigned CHAR StartM, StartS, StartF; //開始的MSF值 unsigned CHAR EndM, EndS, EndF; //結(jié)束的MSF值 void dmsec(unsigned int msec); void RedREG(unsigned CHAR REG); void WriREG(unsigned CHAR LSB, unsigned CHAR MSB, unsigned CHAR REG); void SendPacket(unsigned CHAR SkipDRQ); void TestCD(void); void ReadSub(void); void ReadTOC(unsigned CHAR Track); void ResData(unsigned CHAR Count); void ReadStatus(void); void InitCDROM(void); void BSYWait(void); //void INTRQWait(void); void DRQWait(void); void NDRQWait(void); void LoadPacket(unsigned CHAR code *RT); void TestUnitReady(void); void PlayMSF(void); void Eject(unsigned CHAR EJ); void Pause(unsigned CHAR PR); void Next(unsigned CHAR NP); void Stop(void); void main(void) { InitCDROM(); do { if (!PLAYKey) //play or pause 要求CD就緒才響應(yīng) { if (CDOK) { dmsec(20); //延時20ms防抖動 if (!PLAYKey) { if (PLAYING) //CD正在播放中的處理 { if (PAUSEING) //繼續(xù)播放 { Pause(0); PAUSEING = 0; } else //暫停播放 { Pause(1); PAUSEING = 1; } } else //CD就緒按play后播放 { ReadTOC(CurrentTrackNum); //讀當前TOC ReadTOC(0xAA); PlayMSF(); //播放 PLAYING = 1; //標識 } } } dmsec(2000); } if (!STOPKey) //當CD在播放中 { if (PLAYING) { dmsec(20); if (!STOPKey) { Pause(1); //暫停 Stop(); PLAYING = 0; PAUSEING = 0; } } dmsec(2000); } if (!NEXTKey) { if (PLAYING) { dmsec(20); if (!NEXTKey) { Next(1); } } dmsec(2000); } &nb |
|
| 6樓: | >>參與討論 |
| 作者: computer00 于 2005/6/9 13:26:00 發(fā)布:
想起來了,這里有一個: http://www.cdle.net/alldata/mywz/04050701_1.htm |
|
| 7樓: | >>參與討論 |
| 作者: lisongping 于 2005/6/9 14:58:00 發(fā)布:
謝謝各位了! |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |