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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fat._c

?? AVR單片機(jī)系統(tǒng)開發(fā)經(jīng)典實(shí)例部分源程序
?? _C
字號(hào):

//---------------------------- 文件系統(tǒng)程序 -----------------------------
//
//文件系統(tǒng):兼容性強(qiáng)FAT32
//代碼作者:林永彬
//時(shí)間:2009.7.8
//
//------------------------------------------------------------------------
#include"fat.h"
#include "Usart.h"
uint32 FAT_MASK;
uint8   Fat_Buffer[512]; 
uint32 NumOfFile;  //文件的數(shù)量


//DISK_FAT_INFO結(jié)構(gòu),用來存儲(chǔ)SD卡的信息
struct DISK_FAT_INFO DiskFATInfo;

//MUSIC_INFO結(jié)構(gòu),用來存儲(chǔ)音樂的信息,MusicInfoList用來存放音樂列表,這里限制100首
struct MUSIC_INFO MusicInfoList[3];

//******************************************************************************
//初始化FAT,將SD卡信息,存到DiskFATInfo結(jié)構(gòu)
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;
}

//****************************************************************************
//文件擴(kuò)展名匹配,匹配成功返回真
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;  //記錄目錄編號(hào),不從0開始,因?yàn)榈?項(xiàng)是系統(tǒng)占用的
  uint32  LocalOfFirstLFN;
  uint32 n;
  uint16  LocalOfMusic=0;  //音樂文件的編號(hào)
  uint8   FileExt[3]; 

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

    //讀取FDT的相應(yīng)扇區(qū)位置的內(nèi)容
    SD_ReadBlock(n,Fat_Buffer);
	
	tem=((Index_tmp)*32)%DiskFATInfo.BytesPerSector;      //獲取相應(yīng)的目錄
		
	if(Fat_Buffer[tem] == 0)              //后面沒有文件了,文件查詢完畢
	{
	    Index_tmp = 0;
		break;
	}
	
	if((Fat_Buffer[tem] != 0xe5) && (Fat_Buffer[tem] != 0x05))			   //文件沒有刪除   
    {
		if(Fat_Buffer[tem+11]!= 0x0F)              //文件不為長(zhǎng)文件名的一部分
		{
		 	for(i=0;i<3;i++)                   //讀取該文件的擴(kuò)展名
			{
			  FileExt[i] = Fat_Buffer[tem+8+i];   
			  
		    }
			    
			if(FileExt_Compare(FileExt,"MP3"))   //如果該文件是MP3
			{
			  for(i=0;;i++)          //將文件名賦值給音樂列表的文件名項(xiàng)
    	 	  {
			     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];
			  }
			  //將文件的起始簇號(hào)賦值給音樂列表的起始簇號(hào)項(xiàng)
			  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++;   //開始下一個(gè)音樂文件的記錄		  
			}
	   	}
		else
		{
    		LocalOfFirstLFN = Index_tmp;
		    while(1)
			{
			   Index_tmp++;
			   n = DiskFATInfo.FDT_LBA+(Index_tmp/(DiskFATInfo.BytesPerSector/32));
               //讀取FDT的相應(yīng)扇區(qū)位置的內(nèi)容
   			   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的相應(yīng)扇區(qū)位置的內(nèi)容
   			      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++;   //開始下一個(gè)音樂文件的記錄			
		}
	}
	
	Index_tmp++;  //跳到下一個(gè)目錄編號(hào)
	
  }
  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))				// 是否文件的結(jié)束簇
    {
        nextCluster = CLUST_EOFE;
    }
    return nextCluster;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本久久电影网| 99国产一区二区三精品乱码| 久久色成人在线| 在线一区二区三区四区五区| 韩国毛片一区二区三区| 亚洲国产综合色| 国产精品每日更新在线播放网址| 欧美精品第1页| 91麻豆国产精品久久| 国产乱人伦精品一区二区在线观看| 亚洲免费在线播放| 久久久午夜电影| 日韩一区二区在线观看视频| 91国产精品成人| eeuss鲁片一区二区三区在线看| 捆绑紧缚一区二区三区视频| 亚洲永久精品大片| 综合电影一区二区三区| 久久久精品黄色| 欧美大片拔萝卜| 69精品人人人人| 在线观看日产精品| 91天堂素人约啪| 成人av免费在线观看| 国产一区二区三区国产| 日日嗨av一区二区三区四区| 亚洲综合男人的天堂| 最新国产の精品合集bt伙计| 国产精品婷婷午夜在线观看| 国产亚洲1区2区3区| 精品av综合导航| 欧美成人a视频| 日韩美女视频在线| 欧美www视频| 精品美女一区二区三区| 欧美成人精品3d动漫h| 精品奇米国产一区二区三区| 日韩午夜三级在线| 精品久久国产老人久久综合| 欧美mv日韩mv| 久久久久国产一区二区三区四区| 精品国产欧美一区二区| xvideos.蜜桃一区二区| 久久精品亚洲一区二区三区浴池 | 欧美激情艳妇裸体舞| 久久亚洲综合av| 久久伊人中文字幕| 欧美极品aⅴ影院| 亚洲欧洲日产国产综合网| 国产精品国产三级国产| 亚洲欧美激情小说另类| 夜夜夜精品看看| 视频一区欧美精品| 韩国三级在线一区| 成人午夜精品在线| 色婷婷综合在线| 欧美三级在线看| 日韩免费福利电影在线观看| 久久先锋影音av| 国产精品成人免费| 亚洲成人动漫在线免费观看| 奇米888四色在线精品| 国产麻豆精品theporn| 不卡的av中国片| 精品视频在线免费观看| 日韩西西人体444www| 亚洲国产成人午夜在线一区| 亚洲三级电影网站| 日本不卡一区二区三区| 国产成人亚洲精品狼色在线| 91免费观看在线| 日韩一区二区视频| 国产精品乱子久久久久| 一区二区三区在线视频观看| 日本欧美一区二区三区乱码| 福利电影一区二区三区| 欧美视频一区二区在线观看| 精品久久久影院| 亚洲欧美电影一区二区| 蜜桃视频一区二区| 99精品国产91久久久久久| 在线91免费看| 国产精品久久久久久久久搜平片| 亚洲精品免费在线观看| 国产一区二区影院| 欧美在线观看视频一区二区 | 裸体一区二区三区| 不卡视频免费播放| 日韩免费一区二区三区在线播放| 国产女人18毛片水真多成人如厕 | 久久电影网电视剧免费观看| 99久久精品免费看国产免费软件| 欧美高清你懂得| 国产精品青草综合久久久久99| 午夜欧美一区二区三区在线播放| 成人亚洲精品久久久久软件| 91精品国产综合久久精品性色| 国产精品国产三级国产有无不卡| 舔着乳尖日韩一区| 91免费观看国产| 久久久久亚洲蜜桃| 日本最新不卡在线| 91浏览器入口在线观看| 国产日韩欧美a| 另类小说图片综合网| 欧美性xxxxx极品少妇| 中文字幕不卡三区| 国产综合久久久久久久久久久久 | 在线精品视频免费播放| 国产精品色婷婷久久58| 韩国v欧美v亚洲v日本v| 欧美日韩国产一区| 一区二区三区免费看视频| 成人免费高清视频在线观看| 日韩三级精品电影久久久| 亚洲gay无套男同| 在线看日韩精品电影| 综合久久久久久久| 成人一区二区在线观看| 国产午夜精品美女毛片视频| 狠狠色丁香婷婷综合久久片| 日韩欧美色综合网站| 天堂精品中文字幕在线| 精品视频1区2区3区| 亚洲一区二区三区四区在线观看 | 亚洲国产精品影院| 日本韩国欧美在线| 亚洲精品videosex极品| 色婷婷综合久久久中文字幕| 中文字幕亚洲区| 不卡视频一二三四| 国产精品第五页| 91日韩精品一区| 亚洲免费观看高清完整版在线观看| 成人动漫av在线| 国产精品久久久久久久久图文区| 成人小视频免费观看| 国产精品美女久久久久av爽李琼| 成人夜色视频网站在线观看| 国产精品久线在线观看| 99久久久精品免费观看国产蜜| 中文字幕欧美一| 一本色道久久综合狠狠躁的推荐| 国产精品福利一区二区| 色婷婷久久久久swag精品| 亚洲自拍偷拍麻豆| 欧美二区在线观看| 久久精品国产澳门| 国产日产精品一区| 91污在线观看| 午夜精品久久久久久久久| 91精品国产高清一区二区三区蜜臀| 日韩国产在线一| 久久欧美一区二区| av在线这里只有精品| 一区二区三区日韩欧美| 欧美三级电影网站| 老司机一区二区| 中文字幕第一页久久| 色噜噜狠狠成人网p站| 午夜成人免费电影| 欧美精品一区视频| 99久久精品国产一区| 亚洲与欧洲av电影| 精品福利av导航| 99re热视频这里只精品| 天堂av在线一区| 久久久久久夜精品精品免费| av亚洲精华国产精华精| 亚洲成av人片一区二区梦乃| 欧美成人官网二区| 99九九99九九九视频精品| 首页亚洲欧美制服丝腿| 国产亚洲视频系列| 日本精品一区二区三区高清 | 成人激情黄色小说| 亚洲成人动漫精品| 国产色爱av资源综合区| 在线日韩av片| 国产精品白丝av| 亚洲综合自拍偷拍| 精品久久久久久久人人人人传媒| 99精品欧美一区| 精品一区二区三区av| 亚洲精品成人精品456| www亚洲一区| 欧美三级视频在线观看| 国产精品亚洲午夜一区二区三区| 伊人一区二区三区| 337p粉嫩大胆色噜噜噜噜亚洲 | 视频一区二区三区中文字幕| 国产日韩影视精品| 欧美高清www午色夜在线视频| 成人开心网精品视频| 美国毛片一区二区| 亚洲精品国产精华液| 久久久不卡网国产精品二区| 欧美日韩mp4| 91久久一区二区| 风间由美一区二区三区在线观看 |