亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
在线观看视频91| 国内一区二区在线| 国产女人水真多18毛片18精品视频| 欧美视频你懂的| 欧美性受xxxx黑人xyx性爽| 日本二三区不卡| 欧美天天综合网| 欧美日韩一级片网站| 欧美老年两性高潮| 91精品在线一区二区| 日韩一区二区不卡| 欧美va天堂va视频va在线| 精品处破学生在线二十三| 日韩美女在线视频| 国产日韩综合av| 国产精品色呦呦| 一区二区三区在线观看视频 | 日韩高清中文字幕一区| 午夜视频在线观看一区二区三区| 亚洲成a人片综合在线| 日韩黄色小视频| 国产乱码精品一区二区三| 成人a级免费电影| 欧洲人成人精品| 欧美电视剧在线看免费| 国产精品嫩草影院com| 亚洲免费伊人电影| 日本不卡的三区四区五区| 狠狠色丁香久久婷婷综| 99精品黄色片免费大全| 欧美精品一二三区| 中文字幕精品在线不卡| 午夜精品久久久久久不卡8050| 久久国产成人午夜av影院| 成人激情图片网| 欧美日韩mp4| 国产精品污网站| 日日夜夜精品视频免费| 成人sese在线| 欧美一区二区在线免费观看| 国产精品水嫩水嫩| 日韩成人一区二区三区在线观看| 国产成人午夜精品5599| 欧美久久一二三四区| 欧美激情综合五月色丁香小说| 亚洲综合视频在线观看| 国产suv精品一区二区三区| 欧美性猛交xxxx黑人交| 国产精品午夜在线观看| 欧美bbbbb| 91精品福利视频| 中文字幕av一区二区三区高| 日韩精品福利网| 色综合久久久网| 日本一区二区三区国色天香| 欧美aaaaa成人免费观看视频| 99久久99久久久精品齐齐| 精品久久久久久久久久久久久久久久久 | 色香色香欲天天天影视综合网| 日韩久久久精品| 一区二区三区欧美激情| 成人a免费在线看| 国产天堂亚洲国产碰碰| 免费观看在线综合色| 91久久线看在观草草青青| 国产精品日韩成人| 国产一区二区福利视频| 欧美一区二区三区婷婷月色| 亚洲午夜久久久久久久久电影网| 99久久er热在这里只有精品66| 国产日产欧美一区二区视频| 韩国精品主播一区二区在线观看 | 调教+趴+乳夹+国产+精品| 色天使久久综合网天天| 亚洲欧美日韩国产一区二区三区| 成人中文字幕合集| 欧美激情在线观看视频免费| 国产成人亚洲综合a∨婷婷| 久久你懂得1024| 国产精品1区2区| 国产午夜精品一区二区三区四区| 国内久久婷婷综合| 久久久综合激的五月天| 国产一区二区三区四区五区美女 | 欧美四级电影网| 亚洲观看高清完整版在线观看 | 精品一区二区在线视频| 精品少妇一区二区三区视频免付费 | 色婷婷精品久久二区二区蜜臀av | 丝袜美腿高跟呻吟高潮一区| 欧美裸体bbwbbwbbw| 天堂影院一区二区| 欧美成人高清电影在线| 国产精品18久久久| 国产精品的网站| 91激情五月电影| 日韩综合一区二区| 精品国产一区二区三区久久久蜜月| 国产一区二区伦理| 亚洲日本丝袜连裤袜办公室| 欧美这里有精品| 麻豆精品视频在线观看视频| 久久综合色综合88| 色综合久久综合| 麻豆精品一区二区三区| 欧美国产乱子伦| 欧美午夜片在线观看| 蜜桃传媒麻豆第一区在线观看| 26uuu久久天堂性欧美| www.在线成人| 天天综合日日夜夜精品| 久久久久久久久97黄色工厂| 日本电影欧美片| 极品少妇一区二区三区精品视频| ●精品国产综合乱码久久久久| 欧美日韩在线亚洲一区蜜芽| 国产一区二区不卡老阿姨| 一区二区三区av电影 | 成人黄页毛片网站| 视频一区二区中文字幕| 中文字幕av一区 二区| 欧美一区二区三区喷汁尤物| 成人精品一区二区三区四区 | 国产精品网站导航| 日韩一区二区高清| 欧洲一区在线观看| 成人免费电影视频| 激情五月婷婷综合| 肉色丝袜一区二区| 亚洲免费av在线| 国产亚洲制服色| 欧美成人综合网站| 欧美久久久一区| 91久久精品日日躁夜夜躁欧美| 国产精品一级片| 久久精品国产亚洲a| 亚洲自拍欧美精品| 亚洲女与黑人做爰| 国产精品久久777777| 久久久噜噜噜久久人人看| 制服丝袜av成人在线看| 欧美又粗又大又爽| 色悠悠久久综合| 99热这里都是精品| 成+人+亚洲+综合天堂| 国产一区二区三区四区五区入口 | 亚洲制服丝袜av| 亚洲欧美电影院| 亚洲欧美电影一区二区| 亚洲人成精品久久久久久| 国产精品五月天| 亚洲国产精品国自产拍av| 国产网站一区二区三区| 国产三级一区二区三区| 久久久午夜精品| 欧美激情资源网| 国产精品久久久久久久久免费樱桃| 久久久综合视频| 国产三级欧美三级| 国产精品乱码久久久久久| 国产精品女主播在线观看| 国产精品久久久久久亚洲伦| 亚洲日本一区二区| 午夜精品久久久久久不卡8050| 日韩有码一区二区三区| 男男成人高潮片免费网站| 蜜桃在线一区二区三区| 韩国一区二区在线观看| 粉嫩久久99精品久久久久久夜| 成人小视频在线| 色综合视频一区二区三区高清| 欧美体内she精高潮| 日韩午夜在线观看| 久久久精品蜜桃| 亚洲视频一二区| 亚洲成人av中文| 九九九久久久精品| 盗摄精品av一区二区三区| 色综合天天狠狠| 日韩网站在线看片你懂的| 国产亚洲一区二区三区在线观看| 国产精品萝li| 日本三级韩国三级欧美三级| 国内国产精品久久| 99精品热视频| 精品日韩99亚洲| 最新国产成人在线观看| 日本网站在线观看一区二区三区 | 久久精品国产亚洲a| 成年人午夜久久久| 欧美一区二区在线免费观看| 中文字幕欧美国产| 五月综合激情日本mⅴ| 粉嫩久久99精品久久久久久夜| 欧美色成人综合| 欧美韩日一区二区三区| 亚洲成精国产精品女| 国产高清亚洲一区| 欧美片在线播放| 国产精品日韩精品欧美在线|