亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? atmel mp3.c

?? 在C51上 mp3 開發程序 32M MP3 MP3功能的測試源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:

/*********************************************************************************************************
**                                        
**                                  MP3 and U Disk Source Code
**                           Copyright (c) 2005,北京博創興業科技有限公司
**                                      All Rights Reserved
**                                           V3.00.0
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名:	 ATMEL MP3.C
**創   建   人:	 Frank   Wang Xiao Jun
**創 建  日 期:  2003.12
**描        述:  文件系統和MP3歌曲的解碼播放代碼
**
**--------------歷史版本信息----------------------------------------------------------------------------
** 創建人: 	Frank   Wang Xiao Jun
** 版  本:	V1.00.0
** 日 期: 	2003.12
** 描 述:  文件系統和MP3歌曲的解碼播放代碼
**
**------------------------------------------------------------------------------------------------------
** 修改人:	Kent   Zou Ying
** 版  本:  V2.00.0
** 日 期:	2004. 5
** 描 述:	文件系統和MP3歌曲的解碼播放代碼
**
**--------------當前版本修訂------------------------------------------------------------------------------
** 修改人: 	Phoenix    Hua Yue Guang
** 版  本:  V3.00.0
** 日 期:	2005.3
** 描 述:	文件系統和MP3歌曲的解碼播放代碼
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include <string.h>

#define Root_Cluster	 (0)
#define Begin_Cluster	 (0)				  //MBR所在的簇號
#define Data_Cluster	 (1)				  //數據真正開始的扇區

#define BPB_Sector	     (0)
#define Fat_Sector	     (BPB_Sector + 1)
#define Directory_Sector (Fat_Sector + 4)
#define End_Cluster		 (Disk_Size / 32)

#define UNUSED_MARK		 (0xFF)
#define BAD_MARK		 (0x00)
#define LAST_BLOCK		 (0xFFFF)
#define FILE_NO_FOUND	 (512)

#define PagePerClus	      32

#define FAT12            (12)
#define FAT16            (16)
#define FAT32            (32)

#define	K9F_FUN				P5
#define K9F5608				0x4000
#define	COMMAND				0x03	
#define	ADDRESS				0x05	
#define	D_DATA				0x01
#define	INACTIVE			0x09	
#define	RB					0x01

//數據結構與全局變量定義  
unsigned char Page_Buf[512];
extern unsigned char SONG[];
long int Current_Cluster, DataRead = 0, DataRemain = 0, Sector_Offset = 0x21d;
unsigned int TotalCluster, BootSector, RsdSector, SectorofFatSize, TotalCapacity, RootEntry, SecPerClus;
unsigned int TotalSector, BytesPerSec, FirstDataSec;
unsigned char FAT_TYPE; 


int ReadSector(unsigned char *Name, unsigned char *databuff);
unsigned char GetMP3List(void);
void Init_FAT_Info(void);

extern void ReadPage(unsigned int block, unsigned int page, unsigned char *pPage);


void Init_FAT_Info(void)
{
/*	得到引導扇區所在扇區號,如果介質是不帶分區的,則0扇區就是BootSector了。 */
	ReadPage(Begin_Cluster, 0, Page_Buf);

	if (!(Page_Buf[0] == 0xeb && Page_Buf[2] == 0x90))					  //通過判斷EB ?? 90來看是否已經是BPB了
	{																	  //帶分區的介質
		
		BootSector = Page_Buf[454] + Page_Buf[455] * 256 + Page_Buf[456] * (256 * 256) + Page_Buf[457] * (256 * 256 * 256);
	}
	else 
	{
		BootSector = 0;
	}

/*	得到保留扇區數,總扇區數,總扇區數/每簇扇區數得到簇數,是FAT類型的依據	   */
	ReadPage(Begin_Cluster, BootSector, Page_Buf);
	RsdSector = Page_Buf[14] + Page_Buf[15] * 256;
	SecPerClus = Page_Buf[13];

	BytesPerSec = Page_Buf[12] * 256 + Page_Buf[11];

	TotalSector = (Page_Buf[20] * 256 + Page_Buf[19]);
	TotalCapacity = TotalSector * BytesPerSec;
	TotalCluster = TotalSector / SecPerClus;                              //FAT16的簇總數=扇區總數/每簇扇區數

	SectorofFatSize = ((Page_Buf[22] + Page_Buf[23] * 256));
	RootEntry = (Page_Buf[18] * 256 + Page_Buf[17]);
 
	FirstDataSec = BootSector + RsdSector + (SectorofFatSize * 2) + ((RootEntry * 32 + (BytesPerSec-1)) / BytesPerSec);

	if (TotalCluster > 65525)											  //FAT32的扇區總數和FAT表項長度
	{               
		FAT_TYPE = FAT32;

		if (TotalSector == 0) 
		{
			TotalSector = (Page_Buf[32] + Page_Buf[33] * 256 + Page_Buf[34] * 256 * 256 + Page_Buf[35] * 256 * 256 * 256);
		}
		TotalCapacity = TotalSector * BytesPerSec;
		TotalCluster = TotalSector / SecPerClus;

		SectorofFatSize = (Page_Buf[36] + Page_Buf[37] * 256 + Page_Buf[38] * 256 * 256 + Page_Buf[39] * 256 * 256 * 256);
		if (SectorofFatSize > (TotalCluster * 16 / 512))
		{
			SectorofFatSize = ((Page_Buf[22] + Page_Buf[23] * 256));
		}
		RootEntry = (Page_Buf[44] * 256 + Page_Buf[43]);
		FirstDataSec = BootSector+RsdSector + (SectorofFatSize * 2) + ((RootEntry * 32 + (BytesPerSec-1)) / BytesPerSec);
		
	}
	else if ((TotalCluster > 0) && (TotalCluster < 4085)) 
	{
		FAT_TYPE = FAT12;
	}
	else
	{	
		FAT_TYPE = FAT16;
	}
}

unsigned char GetMP3List(void)
{
	unsigned char i = 0, j = 0, l = 0;
	int k = 0;
	unsigned char MP3[3] = {'M', 'P', '3'};
	Init_FAT_Info();

	k = BootSector + RsdSector + 2 * SectorofFatSize;

	ReadPage(0 + k / 32, k % 32, Page_Buf);
 
	while (Page_Buf[0] != 0)									          //遍歷整個目錄
	{
		for (j=0; j<16; j++)
		{
			if (!Page_Buf[j * 32]) break;
			if (Page_Buf[j * 32] == 0xE5) continue;

			if (!memcmp(MP3, &Page_Buf[j * 32 + 8], 3))					  //file find
			{	
					for (i=0; i<11; i++) 
					{
						SONG[l * 11 + i] = Page_Buf[j * 32 + i];
					}
					l++;
			}
		}
		k++;
		ReadPage(0 + k / 32, k % 32, Page_Buf);
	}
	return (l);
}

int ReadSector(unsigned char *Name, unsigned char *databuff)
{
	int i, k, Page;
	unsigned  long CurrentSector;
	if (DataRead == 0)                                                    //第一次讀取,先查找文件,然后進行讀取
		{
			Page = BootSector + RsdSector + 2 * SectorofFatSize;
			ReadPage(0 + Page / 32, Page % 32, databuff);
			while (databuff[0] != 0)									  //遍歷整個目錄
			{
				for (i=0; i<16; i++)
				{
					if (!memcmp(Name, &databuff[i * 32], 11))
					{
						Current_Cluster = databuff[32 * i + 27] * 256 + databuff[32 * i + 26];
						for (k=31; k>27; k--) 
						{
							DataRemain = (DataRemain << 8) | databuff[i * 32 + k];
						}
								
						CurrentSector = (Current_Cluster - 2) * SecPerClus + FirstDataSec;
						ReadPage(CurrentSector / 32, CurrentSector % 32, databuff);
								
						DataRead += 512;
						DataRemain -= 512;
						if (DataRemain < 0) 
						{
							DataRead = 0;
							return (DataRemain + 512);
						}
						else
						{
							return (512);
						}
					}
				}
				Page++;
				ReadPage(0 + Page / 32, Page % 32, databuff);
		  }
		  return (0);
		}
	else
		{
			Current_Cluster++;
			CurrentSector = (Current_Cluster - 2) * SecPerClus + FirstDataSec;
			ReadPage(CurrentSector / 32, CurrentSector % 32, databuff);

			DataRead += 512;
			DataRemain -= 512;
			if (DataRemain < 0) 
			{
				DataRead = 0;
				return (DataRemain + 512);
			}
			else return (512);
		}

}

//定義與MP3播放相關的寄存器
sfr PLLNDIV = 0xEE;
sfr PLLRDIV = 0xEF;
sfr IEN1    = 0xB1;
sfr KBCON   = 0xA3;
sfr MP3STA1 = 0xAF;
sfr AUDCON0 = 0x9A;
sfr AUDCON1 = 0x9B;
sfr MP3CON  = 0xAA;
sfr PLLCON  = 0xE9;
sfr CKCON   = 0x8F;
sfr AUDCLK  = 0xEC;
sfr AUXR1 = 0xA2;
sfr P1      = 0x90;

sfr MP3DAT  = 0xAC;
sfr MP3ANC  = 0xAD;
sfr MP3VOL  = 0x9E;
sfr MP3VOR  = 0x9F;
sfr MP3BAS  = 0xB4;
sfr MP3MED  = 0xB5;
sfr MP3TRE  = 0xB6;
sfr MP3CLK  = 0xEB;

int m = 0;
extern unsigned char data MP3InitFlag;
unsigned char data FirstStart = 1;
unsigned char data MP3_Framehead[4];                            //解析MP3幀頭數組

//MP3有關的宏定義*********************
#define VOLUME		1
#define EFFECTION	2
#define SELECTSONG	3
#define PLAY		1
#define STOP		0

#define EKB		(0x10)
#define	MPBREQ 	(0x08)
#define X2		(0x1)
#define PLLRES	(0x08)
#define PLLEN	(0x02)
#define	MSKREQ	(0x08)
#define MPEN			(0x80)
#define	MPFREQ 		(0x10)


extern unsigned char data CurrentFun;
extern unsigned char data PlayState;
unsigned char data ChangeSong = 0; 

extern unsigned char data NowPlaying;
extern unsigned char data NumofSong;

/*
bits name              comments
--------------------------------------------------
12   sync              0xFFF
1    version           1=mpeg1.0, 0=mpeg2.0
2    lay               4-lay = layerI, II or III
1    error protection  0=yes, 1=no
4    bitrate_index     see table below
2    sampling_freq     see table below
1    padding								  
1    extension         see table below
2    mode              see table below
2    mode_ext          used with "joint stereo" mode
1    copyright         0=no 1=yes
1    original          0=no 1=yes
2    emphasis          see table below
--------------------------------------------------
at end of file - 128 bytes
							 
offset  type  len   name
--------------------------------------------
0       char  3                   "TAG"  
3       char  30    title
33      char  30    artist
63      char  30    album
93      char  4     year   
97      char  30    comments		 
127     byte  1     genre

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线观看一区二区| 制服丝袜国产精品| 国产精品一二三四五| 日韩不卡一区二区三区| 亚洲成人1区2区| 亚洲电影一级黄| 首页亚洲欧美制服丝腿| 日日夜夜精品视频天天综合网| 亚洲精品国产精品乱码不99| 亚洲男同1069视频| 亚洲一区在线看| 亚洲超碰97人人做人人爱| 亚洲地区一二三色| 青青草原综合久久大伊人精品| 三级欧美在线一区| 老司机精品视频在线| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 欧美一区永久视频免费观看| 7777精品伊人久久久大香线蕉完整版 | 一区二区三区精品在线| 亚洲va韩国va欧美va| 麻豆精品一区二区综合av| 韩国女主播成人在线| 成人久久18免费网站麻豆| 色婷婷av一区二区三区大白胸| 在线免费不卡视频| 日韩精品一区二区三区四区视频| 精品国产免费一区二区三区四区| 亚洲国产精品99久久久久久久久 | 欧美一区二区在线看| 久久久久久久久久久久久夜| 国产精品美日韩| 亚洲高清免费视频| 国产真实乱子伦精品视频| 成人精品免费视频| 欧美美女激情18p| 国产午夜精品理论片a级大结局| 亚洲女同ⅹxx女同tv| 美女视频黄 久久| 色哟哟日韩精品| 日韩欧美黄色影院| 一区二区在线观看视频在线观看| 午夜精品视频一区| 国产v日产∨综合v精品视频| 欧美私人免费视频| 中文一区二区完整视频在线观看| 亚洲最快最全在线视频| 精品在线免费视频| 欧美日韩一区二区三区在线| 国产日韩v精品一区二区| 亚洲国产成人高清精品| 成人av一区二区三区| 欧美成人福利视频| 亚洲成a人片在线不卡一二三区 | 3atv一区二区三区| 综合电影一区二区三区| 国产乱子伦一区二区三区国色天香 | 国产剧情一区在线| 4438成人网| 亚洲制服丝袜一区| www.欧美亚洲| 国产精品国产三级国产aⅴ中文| 日本不卡一二三区黄网| 欧美性色黄大片手机版| 亚洲乱码日产精品bd| av动漫一区二区| 久久久国产午夜精品| 久久不见久久见免费视频1| 欧美日韩视频不卡| 一区二区日韩av| 色又黄又爽网站www久久| 亚洲色图在线播放| www.日韩精品| 亚洲另类中文字| 色综合久久久久久久| 亚洲色图欧美激情| 色婷婷久久久久swag精品| 亚洲欧洲精品天堂一级| 波波电影院一区二区三区| 久久网站最新地址| 粉嫩高潮美女一区二区三区| 国产三级久久久| 国产精品一区二区你懂的| 久久综合色天天久久综合图片| 蜜臀91精品一区二区三区| 精品日韩av一区二区| 国内精品伊人久久久久影院对白| 欧美va亚洲va在线观看蝴蝶网| 精品一区二区在线视频| 精品精品欲导航| 丁香啪啪综合成人亚洲小说| 国产精品久久毛片a| 97精品国产露脸对白| 亚洲精品中文在线| 欧美人与性动xxxx| 免费在线观看精品| 国产精品午夜久久| 91官网在线免费观看| 麻豆成人久久精品二区三区红| 久久综合九色综合欧美亚洲| 成人国产精品视频| 亚洲午夜精品网| 精品国产sm最大网站| 成人av在线网| 日韩电影在线免费| 国产精品久久免费看| 欧美日韩在线观看一区二区| 日本欧美大码aⅴ在线播放| 久久久国产精品午夜一区ai换脸| 91丨国产丨九色丨pron| 男人操女人的视频在线观看欧美| 久久综合丝袜日本网| 97se亚洲国产综合自在线| 日韩二区在线观看| 中文字幕在线观看一区二区| 欧美一级理论片| 99精品国产视频| 另类综合日韩欧美亚洲| 1区2区3区国产精品| 日韩欧美国产综合| 91免费视频网址| 国产精品一区一区| 日韩av中文字幕一区二区| 国产精品国产馆在线真实露脸| 欧美三级电影在线观看| 国产激情一区二区三区四区| 午夜精品久久久久久久久久久| 欧美国产1区2区| ww久久中文字幕| 91精品免费在线观看| 欧美三级一区二区| 99精品欧美一区二区三区小说| 国产精品1024久久| 蜜桃av噜噜一区| 午夜精品久久久久久久| **欧美大码日韩| 欧美韩国日本不卡| 国产午夜精品一区二区| 久久这里只有精品视频网| 欧美一区二区三区免费在线看| 欧美影院一区二区| 色综合天天综合给合国产| 国产成人激情av| 国产福利精品导航| 国内精品久久久久影院一蜜桃| 蜜乳av一区二区三区| 首页欧美精品中文字幕| 天堂精品中文字幕在线| 天使萌一区二区三区免费观看| 亚洲成人激情自拍| 爽好多水快深点欧美视频| 日韩激情在线观看| 日韩成人精品视频| 青青草伊人久久| 精品在线你懂的| 国产精品一卡二卡| 成人黄色在线看| 在线日韩一区二区| 欧美视频完全免费看| 欧美日韩另类一区| 欧美一级片在线看| 精品国产网站在线观看| 日本一区二区三区四区在线视频 | 高清国产午夜精品久久久久久| 久久成人免费日本黄色| 国产一区二区在线观看视频| 国产一区二区视频在线| 成人三级伦理片| 色狠狠av一区二区三区| 在线91免费看| 久久毛片高清国产| 中文字幕一区二区三区不卡在线 | 风间由美一区二区av101| 成人免费毛片高清视频| 91国偷自产一区二区三区成为亚洲经典| 在线精品视频免费观看| 91精品国产91久久综合桃花| 久久亚洲精精品中文字幕早川悠里| 国产无人区一区二区三区| 亚洲日本丝袜连裤袜办公室| 亚洲福中文字幕伊人影院| 久久国产精品露脸对白| 91在线视频免费91| 91精品国产欧美一区二区成人| 久久亚洲精品小早川怜子| 一区二区三区四区国产精品| 日本不卡123| av动漫一区二区| 日韩精品最新网址| 日本一区二区高清| 亚欧色一区w666天堂| 国产成人精品免费视频网站| 欧美中文字幕一区| 久久综合丝袜日本网| 一区二区三区高清在线| 国产在线精品视频| 7777女厕盗摄久久久| 亚洲女同ⅹxx女同tv| 成人一区二区视频| 欧美videos大乳护士334|