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

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

?? fat.c

?? AVR單片機系統開發經典實例部分源程序
?? C
字號:

#include"fat.h"
#include "Usart.h"
uint32 FAT_MASK;
uint8   Fat_Buffer[512]; 
uint32 NumOfFile;  //文件的數量


//DISK_FAT_INFO結構,用來存儲SD卡的信息
struct DISK_FAT_INFO DiskFATInfo;

//MUSIC_INFO結構,用來存儲音樂的信息,MusicInfoList用來存放音樂列表,這里限制100首
struct MUSIC_INFO MusicInfoList[3];

//******************************************************************************
//初始化FAT,將SD卡信息,存到DiskFATInfo結構
uint8 Fat_Init(void)
{
  SD_ReadBlock(0,Fat_Buffer);
  if(Fat_Buffer[0] != 0xEB)
  {
   	DiskFATInfo.DBR_LBA = (Fat_Buffer[454]|(Fat_Buffer[455]<<8)|((uint32)Fat_Buffer[456]<<16)|((uint32)Fat_Buffer[457]<<24));
	switch(Fat_Buffer[0x1C2])
	{
	    case 0x0B:
			 DiskFATInfo.FAT_Style = 32;
			 FAT_MASK = FAT32_MASK;
			 break;
		case 0x04:
			 DiskFATInfo.FAT_Style = 16;
			 FAT_MASK = FAT16_MASK;
			 break;
	}
  }
  else 
  {
   DiskFATInfo.DBR_LBA = 0;
   switch(Fat_Buffer[0x55])
   {
   	    case 0x33:
	   		 DiskFATInfo.FAT_Style = 32;
			 FAT_MASK = FAT32_MASK;
			 break;
		case 0x31:
			 DiskFATInfo.FAT_Style = 16;
			 FAT_MASK = FAT16_MASK;
			 break;
	        
   }
  }
  SD_ReadBlock(DiskFATInfo.DBR_LBA,Fat_Buffer);  
  DiskFATInfo.BytesPerSector = Fat_Buffer[0x0B] |(Fat_Buffer[0x0C] << 8);
  DiskFATInfo.SectorsPerClustor = Fat_Buffer[0x0D];
  

  DiskFATInfo.NumOfFATs = Fat_Buffer[0x10] |(Fat_Buffer[0x11] << 8);

  
  DiskFATInfo.SectorsPerFAT = Fat_Buffer[0x24] |Fat_Buffer[0x25] << 8|(uint32)Fat_Buffer[0x26]<<16|(uint32)Fat_Buffer[0x27]<<24;

  
  DiskFATInfo.FAT_LBA = DiskFATInfo.DBR_LBA + (Fat_Buffer[0x0E]|Fat_Buffer[0x0F]<<8);

  DiskFATInfo.FDT_LBA = DiskFATInfo.FAT_LBA + DiskFATInfo.SectorsPerFAT*DiskFATInfo.NumOfFATs;
 

  
  DiskFATInfo.FDT_StartClustor = Fat_Buffer[0x2C] |Fat_Buffer[0x2D] << 8|(uint32)Fat_Buffer[0x2E]<<16|(uint32)Fat_Buffer[0x2F]<<24;

  return 1;
}

//****************************************************************************
//文件擴展名匹配,匹配成功返回真
uint8 FileExt_Compare(uint8 *strExt1,uint8 *strExt2)
{
    uint8 i;
	
    for(i=0; i<3; i++)
    {
        if(strExt1[i]!= strExt2[i]) break;
    }
    if(i == 3)    return 1; 
	    
	return 0; 
}	

//****************************************************************************
//獲取音樂文件
void GetMusicFile(void)
{
  uint16  i,j,k;
  uint32  tem;	//記錄目錄起始位置
  uint32  Index_tmp=1;  //記錄目錄編號,不從0開始,因為第0項是系統占用的
  uint32  LocalOfFirstLFN;
  uint32 n;
  uint16  LocalOfMusic=0;  //音樂文件的編號
  uint8   FileExt[3]; 

	
  while(1)
  {
    n = DiskFATInfo.FDT_LBA+(Index_tmp/(DiskFATInfo.BytesPerSector/32));

    //讀取FDT的相應扇區位置的內容
    SD_ReadBlock(n,Fat_Buffer);
	
	tem=((Index_tmp)*32)%DiskFATInfo.BytesPerSector;      //獲取相應的目錄
		
	if(Fat_Buffer[tem] == 0)              //后面沒有文件了,文件查詢完畢
	{
	    Index_tmp = 0;
		break;
	}
	
	if((Fat_Buffer[tem] != 0xe5) && (Fat_Buffer[tem] != 0x05))			   //文件沒有刪除   
    {
		if(Fat_Buffer[tem+11]!= 0x0F)              //文件不為長文件名的一部分
		{
		 	for(i=0;i<3;i++)                   //讀取該文件的擴展名
			{
			  FileExt[i] = Fat_Buffer[tem+8+i];   
			  
		    }
			    
			if(FileExt_Compare(FileExt,"MP3"))   //如果該文件是MP3
			{
			  for(i=0;;i++)          //將文件名賦值給音樂列表的文件名項
    	 	  {
			     if(Fat_Buffer[tem+i] == 0x20 || i>=8)
				 {
				   MusicInfoList[LocalOfMusic].FileName[i] = '.';
				   MusicInfoList[LocalOfMusic].FileName[i+1] = 'm';
				   MusicInfoList[LocalOfMusic].FileName[i+2] = 'p';
				   MusicInfoList[LocalOfMusic].FileName[i+3] = '3';
				   break;
				 }
			     MusicInfoList[LocalOfMusic].FileName[i]=Fat_Buffer[tem+i];
			  }
			  //將文件的起始簇號賦值給音樂列表的起始簇號項
			  MusicInfoList[LocalOfMusic].FileStartClustor = Fat_Buffer[tem+0x1A]|Fat_Buffer[tem+0x1B]<<8|((uint32)Fat_Buffer[tem+0x14]<<16) | ((uint32)Fat_Buffer[tem+0x15]<<24) ;
			  MusicInfoList[LocalOfMusic].FileLength = Fat_Buffer[tem+0x1C]|(Fat_Buffer[tem+0x1D]<<8)|((uint32)Fat_Buffer[tem+0x1E]<<16)|((uint32)Fat_Buffer[tem+0x1F]<<24);
			  LocalOfMusic++;   //開始下一個音樂文件的記錄		  
			}
	   	}
		else
		{
    		LocalOfFirstLFN = Index_tmp;
		    while(1)
			{
			   Index_tmp++;
			   n = DiskFATInfo.FDT_LBA+(Index_tmp/(DiskFATInfo.BytesPerSector/32));
               //讀取FDT的相應扇區位置的內容
   			   SD_ReadBlock(n,Fat_Buffer);
			   tem = ((Index_tmp)*32)%DiskFATInfo.BytesPerSector;
			   if(Fat_Buffer[tem+11]!= 0x0F)
			   {
		  	      MusicInfoList[LocalOfMusic].FileStartClustor = Fat_Buffer[tem+0x1A]|Fat_Buffer[tem+0x1B]<<8|((uint32)Fat_Buffer[tem+0x14]<<16) | ((uint32)Fat_Buffer[tem+0x15]<<24) ;
			      MusicInfoList[LocalOfMusic].FileLength = Fat_Buffer[tem+0x1C]|(Fat_Buffer[tem+0x1D]<<8)|((uint32)Fat_Buffer[tem+0x1E]<<16)|((uint32)Fat_Buffer[tem+0x1F]<<24);		 
				  break;		
			   }
			   
			}
			k = 0;
			for(i=Index_tmp-1; i>=LocalOfFirstLFN; i--)
			{
			      n = DiskFATInfo.FDT_LBA+(i/(DiskFATInfo.BytesPerSector/32));
               //讀取FDT的相應扇區位置的內容
   			      SD_ReadBlock(n,Fat_Buffer);
			      tem = (i*32)%DiskFATInfo.BytesPerSector;
				  
				  for(j=1; j<32; j++)
			 	  {
				     if(j==0x0B|j==0x0C|j==0x0D|j==0x1A|j==0x1B)
					    continue;
					 if(Fat_Buffer[tem+j]<128 && Fat_Buffer[tem+j]!=0)
					 {
					     MusicInfoList[LocalOfMusic].FileName[k] = Fat_Buffer[tem+j];
						 k++;
					 }
					// else if(Fat_Buffer[tem+j]>128 && Fat_Buffer[tem+j]!=)
				  }
			}
			LocalOfMusic++;   //開始下一個音樂文件的記錄			
		}
	}
	
	Index_tmp++;  //跳到下一個目錄編號
	
  }
  NumOfFile = LocalOfMusic;
}

uint32 ReadBlockforCluster(uint32 Sector,uint32 offset)
{
	uint32  tmp;
   	SD_ReadBlock(Sector,Fat_Buffer);
	tmp=Fat_Buffer[offset] |(Fat_Buffer[offset+1]<<8) |((uint32)Fat_Buffer[offset+2]<<16) |((uint32)Fat_Buffer[offset+3]<<24);
	return tmp;
}


uint32 FatNextCluster(uint32 cluster)
{
    uint32 nextCluster=0;
    uint32 fatOffset=0;
    uint32 sector=0;
    uint16 offset=0;
	
	fatOffset = cluster<<2;
	sector = DiskFATInfo.FAT_LBA + (fatOffset>>9);	
	offset = fatOffset % DiskFATInfo.BytesPerSector;
	nextCluster = ReadBlockforCluster(sector,offset);
	if (nextCluster >= (CLUST_EOFS & FAT_MASK))				// 是否文件的結束簇
    {
        nextCluster = CLUST_EOFE;
    }
    return nextCluster;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品视频一区 二区 三区| 99re成人在线| 另类小说一区二区三区| 午夜视频一区二区| 五月天亚洲精品| 秋霞电影网一区二区| 肉肉av福利一精品导航| 免费不卡在线观看| 国产一区二区不卡| www..com久久爱| 欧美在线播放高清精品| 欧美日韩精品一区二区三区| 欧美日韩国产高清一区二区三区| 在线播放91灌醉迷j高跟美女 | 日韩精品福利网| 日本亚洲天堂网| 国产精品一区二区三区网站| 国产99精品在线观看| 色综合亚洲欧洲| 欧美美女激情18p| 久久亚洲精品小早川怜子| 国产欧美精品一区二区三区四区| 国产精品国产三级国产普通话99 | 久久亚洲二区三区| 国产精品狼人久久影院观看方式| 亚洲一区国产视频| 激情综合色综合久久综合| 不卡视频免费播放| 欧美日韩国产高清一区二区三区 | 99久久夜色精品国产网站| 欧美三级三级三级爽爽爽| 久久色在线观看| 亚洲精品久久7777| 国产精品一区二区无线| 欧美午夜电影在线播放| 久久精品亚洲麻豆av一区二区| 久久久亚洲精品一区二区三区| 一区二区在线观看视频| 国产麻豆视频精品| 欧美精品丝袜久久久中文字幕| 欧美国产精品久久| 蜜臀精品一区二区三区在线观看 | 欧美日韩一区二区三区在线| 精品欧美久久久| 国产精品伦理一区二区| 日韩成人伦理电影在线观看| av电影天堂一区二区在线观看| 欧美一区二区美女| 亚洲综合激情小说| 国产成人aaa| 精品区一区二区| 肉肉av福利一精品导航| www.爱久久.com| 久久久国产精华| 久久福利视频一区二区| 欧美日韩国产综合一区二区三区| 中文字幕一区二区三区四区不卡| 国内精品自线一区二区三区视频| 精品视频1区2区| 亚洲欧洲成人精品av97| 国产91在线观看丝袜| xvideos.蜜桃一区二区| 免费观看日韩电影| 欧美日韩免费观看一区二区三区| 中文字幕日韩一区| 99国产精品久久久久| 亚洲国产精品99久久久久久久久 | 精品精品欲导航| 免播放器亚洲一区| 欧美岛国在线观看| 加勒比av一区二区| 久久女同精品一区二区| 久久99精品久久久久婷婷| 欧美成人官网二区| 韩国成人在线视频| 久久婷婷国产综合国色天香| 国产一区 二区| 国产色综合一区| 成人高清伦理免费影院在线观看| 国产日韩一级二级三级| jlzzjlzz欧美大全| 亚洲欧美欧美一区二区三区| 91极品美女在线| 亚洲成人一区在线| 欧美一级在线免费| 国产乱码精品一区二区三区av| 久久久久久久久伊人| 成人网在线播放| 一区二区三区丝袜| 欧美老人xxxx18| 久久精品国产99国产精品| 久久夜色精品国产欧美乱极品| 国产jizzjizz一区二区| 亚洲激情六月丁香| 欧美一区二区视频在线观看| 国产在线一区观看| 亚洲欧美二区三区| 欧美大片在线观看| av在线不卡网| 秋霞影院一区二区| 国产精品短视频| 欧美日韩在线精品一区二区三区激情| 五月天精品一区二区三区| 国产性色一区二区| 欧美自拍丝袜亚洲| 国内精品视频666| 成人欧美一区二区三区1314| 欧美日本不卡视频| 成人视屏免费看| 日韩av高清在线观看| 国产精品美女久久久久久久久久久| 91黄色在线观看| 国模冰冰炮一区二区| 亚洲成人午夜电影| 国产精品久久久久四虎| 欧美刺激脚交jootjob| 91精品国产黑色紧身裤美女| 岛国av在线一区| 午夜婷婷国产麻豆精品| 国产精品卡一卡二卡三| 日韩精品专区在线| 在线观看视频一区二区欧美日韩| 精品一区二区三区日韩| 亚洲国产精品久久人人爱| 国产精品乱码人人做人人爱| 日韩西西人体444www| 欧美性受xxxx| 99re视频这里只有精品| 床上的激情91.| 精品午夜久久福利影院| 午夜天堂影视香蕉久久| 亚洲美女在线国产| 中文字幕日韩精品一区| 国产亚洲制服色| 精品国产a毛片| 欧美丰满高潮xxxx喷水动漫| 欧美性猛交一区二区三区精品| 成人一区二区在线观看| 国产成a人无v码亚洲福利| 精品一区二区久久| 日本女优在线视频一区二区| 性做久久久久久免费观看欧美| 亚洲欧美二区三区| 一区二区三区四区国产精品| 亚洲激情欧美激情| 一区二区三区四区不卡在线 | 制服丝袜中文字幕亚洲| 欧美在线综合视频| 欧美中文字幕一区| 欧美久久久一区| 欧美精品日日鲁夜夜添| 欧美日韩国产精品成人| 91.麻豆视频| 久久婷婷综合激情| 亚洲国产高清在线| 亚洲丝袜精品丝袜在线| 亚洲激情自拍视频| 日日欢夜夜爽一区| 蜜桃av一区二区三区| 精品一区二区三区在线播放| 精品一区二区三区久久| 国产经典欧美精品| 91美女片黄在线观看91美女| 色婷婷狠狠综合| 欧美私模裸体表演在线观看| 欧美一区二区三区在线观看| 欧美电视剧在线观看完整版| 日本一区二区视频在线观看| 国产精品久久久久婷婷二区次| 亚洲尤物视频在线| 精品亚洲国产成人av制服丝袜 | 亚洲影视在线播放| 免费欧美高清视频| 国产成人亚洲综合a∨婷婷| 91在线免费看| 欧美日韩国产另类不卡| 精品欧美一区二区三区精品久久 | 精品一区二区三区免费观看| 福利一区二区在线| 欧美三级电影在线观看| 26uuu国产日韩综合| 亚洲欧美另类久久久精品2019| 天堂在线亚洲视频| 大白屁股一区二区视频| 欧美高清视频在线高清观看mv色露露十八| 日韩女优毛片在线| 亚洲精品网站在线观看| 蜜桃精品视频在线| 99久久99精品久久久久久| 日韩天堂在线观看| 亚洲免费看黄网站| 国产一区二区三区免费观看| 日本黄色一区二区| 国产亚洲精品aa午夜观看| 亚洲chinese男男1069| 国产v综合v亚洲欧| 欧美一区二区精品| 亚洲一区二区视频| 东方欧美亚洲色图在线| 日韩视频免费直播|