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

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

?? fat.c

?? STM32_電子相框.rar
?? C
字號:
unsigned long DBR_Sector;//記錄DBR的扇區號
ulong Total_Size;//總容量
ulong FATsectors;//FAT表占用扇區數
ulong FirstDirClust;//根目錄所在簇  
ulong BytesPerSector;//每個扇區的字節數
ulong SectorsPerClust;//每個簇的扇區數
ulong FirstFATSector;//第一個FAT表的扇區號
ulong FirstDirSector;//根目錄的扇區號 
ulong FileFirstCluster;//次態操作文件起始簇號

ulong TargetDirClust;//目標文件夾所在簇
ulong TargetDirSector;//目標文件夾扇區號
uchar success;//搜索成功標志   0 FAIL  1 找到文件   2 找到目錄   


//-------FAT32系統初始化-------------------------------------------
void FAT32_Init()
{
DBR_Sector=0;//記錄DBR的扇區號
Total_Size=0;//總容量
FATsectors=0;//FAT表占用扇區數
FirstDirClust=0;//根目錄所在簇  
BytesPerSector=0;//每個扇區的字節數
SectorsPerClust=0;//每個簇的扇區數
FirstFATSector=0;//第一個FAT表的扇區號
FirstDirSector=0;//根目錄的扇區號 
FileFirstCluster=0;//次態操作文件起始簇號
TargetDirClust=0;//目標文件夾所在簇
TargetDirSector=0;//目標文件夾扇區號
success=0;//文件搜索成功標志   0 FAIL  1 BMP   2BIN  
FAT32_is_MBR();//讀取0扇區,檢測有沒有MBR(主引導記錄)
Search_DBR();  //讀DBR  在DBR中計算出重要參數供后續使用
}

//--------FAT32中讀扇區函數-----------------------------------------
void FAT32_ReadSector(ulong addr,uchar *buf)
{
	SD_read_sector(addr,buf);
}

//-------FAT32中寫扇區函數 ------------------------------------------
void FAT32_WriteSector(ulong addr,uchar *buf)
{
	SD_write_sector(addr,buf);
}

//---------小端模式轉大端 ----------------------------------------------
ulong LE2BE(uchar *dat,uchar len)// 指向字節序列的指針 字節序列中的字節數
{
	ulong temp=0,fact=1;
	uchar i=0;
	for(i=0;i<len;i++)
	{
		temp+=dat[i]*fact;
		fact*=256;
	}
	return temp;
}

//-----------------小寫轉大寫-------------------------------------------
char L2U(char c)
{
	if(c>='a'&&c<='z') return c+'A'-'a';
	else return c;
}

//----------讀取0扇區,檢測有沒有MBR(主引導記錄)-------------------------
//------------檢測到MBR  --------------------------- --------------------
//------------未檢測到MBR   檢測到DBR  修改DBR_Sector --------------
void FAT32_is_MBR()
{
	uchar dat[4],i;
	FAT32_ReadSector(0,FAT32_Buffer);
	if(FAT32_Buffer[0]!=0XEB) 
	{ 
		 if(FAT32_Buffer[446]==0x80) //判斷分區是否有效  這里只支持一個分區
		 {
			 for(i=0;i<4;i++)
		 	 {
			 dat[i]=FAT32_Buffer[454+i];
			 }
			 DBR_Sector=LE2BE(dat,4);
		 }
	}
}
												   
//-----------讀DBR  在DBR中計算出重要參數供后續使用-----------------------------
void Search_DBR() 
{
	uchar dat[4],i,dat1[4]={0xC3,0x03,0x00,0x00};
	ulong RsvdSecCnt;//保留扇區數
	ulong NumFATs;//FAT表數
	FAT32_ReadSector(DBR_Sector,FAT32_Buffer);
	if(FAT32_Buffer[0]==0XEB) 
	{ 		
		for(i=0;i<4;i++)  dat[i]=FAT32_Buffer[32+i];
                          Total_Size=(ulong)(LE2BE(dat,4)/2048);//總容量  M
		for(i=0;i<4;i++)  dat[i]=FAT32_Buffer[36+i];
                          FATsectors=LE2BE(dat,4);//FAT表占用扇區數
		for(i=0;i<4;i++)  dat[i]=FAT32_Buffer[44+i];
                          FirstDirClust=LE2BE(dat,4);//第一個目標所在簇 
		for(i=0;i<2;i++)  dat[i]=FAT32_Buffer[11+i];
                          BytesPerSector=LE2BE(dat,2);//每個扇區的字節數
		                  dat[0]=FAT32_Buffer[13];
                          SectorsPerClust=LE2BE(dat,1);//每個簇的扇區數	
		for(i=0;i<2;i++)  dat[i]=FAT32_Buffer[14+i];
                          RsvdSecCnt=LE2BE(dat,2);//保留扇區數						  					  						   
						  FirstFATSector=DBR_Sector+RsvdSecCnt;//第一個FAT表的扇區號
						  dat[0]=FAT32_Buffer[16];
						  NumFATs=LE2BE(dat,1);//FAT表數
						  FirstDirSector= FirstFATSector+NumFATs*FATsectors;//第一個目錄的扇區號
						  TargetDirClust=FirstDirClust;//目標文件夾所在簇
						  TargetDirSector=FirstDirSector;//目標文件夾扇區號
	}
}

//-----------在指定目錄下(全部搜索)定位目標文件夾--------------------------------------------------------- 
void Search_TargetDir(uchar *Dir_name) 
{ 
	uchar i,Cluster_End=0;//根目錄結束標志
	ulong Sector,temp=TargetDirSector;
	success=0;
	while(Cluster_End!=1)
	{	for(i=0;i<SectorsPerClust;i++)
		{
			Sector=temp+i;
 			FAT32_ReadSector(Sector,FAT32_Buffer);//讀出根目錄扇區
   	  	    Dir_First_Cluster(Dir_name);     //尋找文件夾,定位首簇
			if(success==2) break; 
		}
		if(success==2) break;
		temp=FAT32_GetNextCluster(TargetDirClust);//讀指定目錄的下1簇繼續搜索目錄
		if(temp==0x0fffffff) 
			    Cluster_End=1;//結束標志  
		else
				temp=Cluster_To_Sector(temp);//讀根目錄的下1簇的扇區號 
	}
} 

//-----------讀目標文件夾扇區(全部搜索)搜索目標文件--------------------------------------------------------- 
void Read_Target_Sector(uchar *File_name,uchar *Exten_name) 
{ 
	uchar i,Cluster_End=0;//根目錄結束標志
	ulong Sector,temp=TargetDirSector;
	while(Cluster_End!=1)
	{	for(i=0;i<SectorsPerClust;i++)
		{
			Sector=temp+i;
 			FAT32_ReadSector(Sector,FAT32_Buffer);//讀出目標目錄第一個扇區
   	  	    File_First_Cluster(File_name,Exten_name);     //尋找文件,定位首簇
			if(success==1) break; 
		}
		if(success==1) break;
		temp=FAT32_GetNextCluster(TargetDirClust);//讀目標目錄的下1簇號
		if(temp==0x0fffffff) 
			    Cluster_End=1;//結束標志  
		else
				temp=Cluster_To_Sector(temp);//讀目標目錄的下1簇的扇區號 
	}
} 

//------在指定目錄,讀指定文件類型的文件起始簇號,1扇區16條文件記錄   每條記錄32的字節----------------
void File_First_Cluster(uchar *File_name,uchar *Exten_name)//僅支持8位文件名
{ 
  uchar dat[4];
  uint i;
  uchar j=0;
  for(i=0;i<512;i+=32) 
  {  
	if( 
		FAT32_Buffer[i]   == File_name[0]&& 
		FAT32_Buffer[i+1] == File_name[1]&& 
		FAT32_Buffer[i+2] == File_name[2]&& 
		FAT32_Buffer[i+3] == File_name[3]&& 
		FAT32_Buffer[i+4] == File_name[4]&& 
		FAT32_Buffer[i+5] == File_name[5]&& 
		FAT32_Buffer[i+6] == File_name[6]&& 
		FAT32_Buffer[i+7] == File_name[7]&& 
		FAT32_Buffer[i+8] == Exten_name[0]&& 
		FAT32_Buffer[i+9] == Exten_name[1]&& 
		FAT32_Buffer[i+10]== Exten_name[2]
		)
	{ 
	   dat[j++]=FAT32_Buffer[i+26];
	   dat[j++]=FAT32_Buffer[i+27];
	   dat[j++]=FAT32_Buffer[i+20];
	   dat[j++]=FAT32_Buffer[i+21];
	   FileFirstCluster=LE2BE(dat,4);
	   success=1; //找到目標文件
	   break;
	} 
  } 
}

void Dir_First_Cluster(uchar *Dir_name)   //在指定目錄下尋找指定文件夾,定位首簇
{									  //僅支持8位文件名
  uchar dat[4];
  uint i;
  uchar j=0;
  for(i=0;i<512;i+=32) 
  {  
	if( 
		FAT32_Buffer[i]   == Dir_name[0]&& 
		FAT32_Buffer[i+1] == Dir_name[1]&& 
		FAT32_Buffer[i+2] == Dir_name[2]&& 
		FAT32_Buffer[i+3] == Dir_name[3]&& 
		FAT32_Buffer[i+4] == Dir_name[4]&& 
		FAT32_Buffer[i+5] == Dir_name[5]&& 
		FAT32_Buffer[i+6] == Dir_name[6]&& 
		FAT32_Buffer[i+7] == Dir_name[7]&& 
		FAT32_Buffer[i+8] == ' '&&     //無擴展名
		FAT32_Buffer[i+9] == ' '&& 
		FAT32_Buffer[i+10]== ' '&&
		FAT32_Buffer[i+11]== 16        //屬性為目錄
		)
	{ 
	   dat[j++]=FAT32_Buffer[i+26];
	   dat[j++]=FAT32_Buffer[i+27];
	   dat[j++]=FAT32_Buffer[i+20];
	   dat[j++]=FAT32_Buffer[i+21];
	   TargetDirClust=LE2BE(dat,4);//目標文件夾所在簇
	   TargetDirSector=Cluster_To_Sector(TargetDirClust);//目標文件夾扇區號
	   success=2; //找到目標文件夾
		break;
	} 
  } 
}

//-------------尋找后繼簇---------------------------------------------------------------
ulong FAT32_GetNextCluster(ulong LastCluster)//當前簇     返回下一簇的簇號
{
	ulong temp;
	uchar dat[4],i;
	temp=((LastCluster/128)+FirstFATSector);
	FAT32_ReadSector(temp,FAT32_Buffer);
	for(i=0;i<4;i++)  dat[i]=FAT32_Buffer[(LastCluster%128)*4+i];
                      temp=LE2BE(dat,4);//FAT表占用扇區數        
	return temp;
}

//--------------簇號轉為扇區號 第一扇區-------------------------------------------------------
ulong Cluster_To_Sector(ulong Cluster)
{
	ulong temp;
	temp=(Cluster-FirstDirClust)*SectorsPerClust+FirstDirSector;
	return temp;
}

//----路徑處理函數   根據路徑搜索并定位葉子目錄-----------------------------------------------
void PathProcess(uchar *Path)
{
	uchar i=0,j=0,t=0,temp=0,flag=0;
	uchar Dir_name[8];

	TargetDirSector=FirstDirSector;
	for(t=0;t<8;t++)    Dir_name[t]=' ';
	while(Path[temp]!='\0') temp++;
	 
	for(i=0;i<temp;i++)
	{
		 if(flag==1&&Path[i]!='/'&&Path[i]!='\0')
		 		{
				  Dir_name[j++]=Path[i]; 
				 }
		 if(Path[i]=='/')    flag=0;
		 if(flag==0)
		 		{
					for(t=0;t<8;t++)
					{
						if(Dir_name[t]!=' ')  Search_TargetDir(Dir_name);break;
					} 
					for(t=0;t<8;t++)    Dir_name[t]=' ';
					j=0;
				}
		 if(Path[i]=='/'&&Path[i+1]!='\0')	  flag=1;
	 }

}

//-----------讀目標文件夾扇區(全部搜索)搜索指定文件類型的所有文件--------------------------------------------------------- 
void Read_Target_Sector_All_File_Search(uchar *Exten_name) 
{ 
	uchar i,Cluster_End=0;//根目錄結束標志
	ulong Sector,temp=TargetDirSector;
	while(Cluster_End!=1)
	{	for(i=0;i<SectorsPerClust;i++)
		{
			Sector=temp+i;
 			FAT32_ReadSector(Sector,FAT32_Buffer);//讀出目標目錄第一個扇區
   	  	    All_File_Search(Exten_name);     //將指定擴展名的文件名記錄下來  并送顯
		}
		temp=FAT32_GetNextCluster(TargetDirClust);//讀目標目錄的下1簇號
		if(temp==0x0fffffff) 
			    Cluster_End=1;//結束標志  
		else
				temp=Cluster_To_Sector(temp);//讀目標目錄的下1簇的扇區號 
	}
}

//-----------在指定目錄下搜索指定類型的文件--------------------------------------------------------------
void All_File_Search(uchar *Exten_name)	
{
  uchar File_Name[11];//文件名
  uchar dat[4];
  uint i;
  uchar j=0,k=0;

  File_Name[8]=0x0d;	//加入回車 方便換行
  File_Name[9]=0x0a;
  File_Name[10]='\0';

  for(i=0;i<512;i+=32) 
  {  
	if( 
		FAT32_Buffer[i+8] == Exten_name[0]&& 
		FAT32_Buffer[i+9] == Exten_name[1]&& 
		FAT32_Buffer[i+10]== Exten_name[2]
		)
	{ 
	for(k=0;k<8;k++)
		{
			File_Name[k]=FAT32_Buffer[i+k];	//將指定擴展名的文件名記錄下來  并送顯
		}
    /*	File_Name[0]=FAT32_Buffer[0];
		File_Name[1]=FAT32_Buffer[1];
		File_Name[2]=FAT32_Buffer[2];
		File_Name[3]=FAT32_Buffer[3];
		File_Name[4]=FAT32_Buffer[4];
		File_Name[5]=FAT32_Buffer[5];
		File_Name[6]=FAT32_Buffer[6];
		File_Name[7]=FAT32_Buffer[7];  */
		P0=0;
	   dat[j++]=FAT32_Buffer[i+26];
	   dat[j++]=FAT32_Buffer[i+27];
	   dat[j++]=FAT32_Buffer[i+20];
	   dat[j++]=FAT32_Buffer[i+21];
	   //FileFirstCluster=LE2BE(dat,4);
//	   SHOW_HZ_Asc_xy(500,500,File_Name); //指定位子顯示漢字或ASCLL
	} 
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产乱码久久蜜臀| 精品国产在天天线2019| 国模冰冰炮一区二区| 日韩久久一区二区| 久久免费的精品国产v∧| 欧美视频日韩视频在线观看| 成人性生交大片免费看视频在线| 免费看精品久久片| 亚洲一区欧美一区| 国产精品福利一区二区三区| xnxx国产精品| 欧美一激情一区二区三区| 色中色一区二区| 国产黄色91视频| 久久精品国产秦先生| 亚洲福利电影网| 亚洲欧美日韩在线播放| 日本一区二区三区电影| 日韩免费福利电影在线观看| 欧美群妇大交群的观看方式| 欧洲精品一区二区三区在线观看| 不卡一区中文字幕| 顶级嫩模精品视频在线看| 久国产精品韩国三级视频| 首页综合国产亚洲丝袜| 亚洲国产精品精华液网站| 亚洲欧美另类久久久精品| 国产日韩高清在线| 久久理论电影网| 亚洲精品一区二区三区香蕉| 日韩一区二区不卡| 4438x亚洲最大成人网| 欧美日韩在线电影| 欧美午夜电影一区| 欧美男生操女生| 制服丝袜av成人在线看| 3751色影院一区二区三区| 9191成人精品久久| 日韩欧美一级在线播放| 日韩一区二区三区在线视频| 日韩午夜电影av| 欧美一区二区三区不卡| 91精品国产全国免费观看| 欧美一区二区人人喊爽| 日韩精品一区二区三区四区视频 | 三级不卡在线观看| 首页亚洲欧美制服丝腿| 美腿丝袜亚洲一区| 久久国产精品72免费观看| 国产乱人伦精品一区二区在线观看 | 日本欧美一区二区| 日本不卡的三区四区五区| 美女国产一区二区| 国产成人免费视频精品含羞草妖精| 国产高清不卡一区| 成人av资源站| 在线观看视频一区二区| 日韩三级在线观看| 国产亚洲综合av| 亚洲欧美日韩国产综合在线| 亚洲综合激情网| 日韩电影在线免费观看| 精品一区二区免费| av电影天堂一区二区在线| 欧美三级在线看| 日韩美女主播在线视频一区二区三区| 精品国产伦一区二区三区观看体验| 国产欧美久久久精品影院| 亚洲精品国产成人久久av盗摄| 亚洲成av人影院| 国产精品原创巨作av| 91网站最新地址| 欧美一区二区三区在线视频| 国产嫩草影院久久久久| 亚洲成年人影院| 国产精品一区三区| 欧美系列一区二区| 久久久久国产精品厨房| 一区二区三区四区亚洲| 国模大尺度一区二区三区| 日本精品一级二级| 欧美精品一区二区三区很污很色的 | 另类成人小视频在线| 成人看片黄a免费看在线| 久久久精品日韩欧美| 亚洲婷婷综合色高清在线| 日本在线观看不卡视频| 99re热视频这里只精品| 日韩欧美一二三四区| 亚洲色图另类专区| 久久精品国产亚洲一区二区三区| av亚洲精华国产精华精华| 欧美一区二区三级| 亚洲精品免费在线观看| 国产成人免费9x9x人网站视频| 欧美天堂一区二区三区| 国产精品系列在线| 久久www免费人成看片高清| 色狠狠色狠狠综合| 国产香蕉久久精品综合网| 视频一区免费在线观看| 不卡的电影网站| 久久久久久99精品| 免费亚洲电影在线| 欧美日韩国产不卡| 一区二区三区欧美视频| av亚洲产国偷v产偷v自拍| 2023国产精品自拍| 日韩高清一区在线| 日本福利一区二区| 国产精品不卡在线| 高清国产一区二区| 久久久影院官网| 美日韩一级片在线观看| 在线播放一区二区三区| 一区二区三区四区蜜桃| 99久久精品国产观看| 中文av一区二区| 国产丶欧美丶日本不卡视频| 欧美va亚洲va| 蜜芽一区二区三区| 91精品免费在线观看| 午夜不卡在线视频| 在线播放/欧美激情| 午夜成人在线视频| 欧美电影一区二区三区| 午夜久久久影院| 在线不卡中文字幕| 日本aⅴ亚洲精品中文乱码| 欧美日韩欧美一区二区| 亚洲一区自拍偷拍| 欧洲在线/亚洲| 亚洲电影第三页| 欧美一级在线视频| 免费美女久久99| 2020国产精品自拍| 国产精品99久久久久久久女警| 亚洲精品在线观看网站| 国产精品一二三四区| 欧美国产精品久久| 91小宝寻花一区二区三区| 亚洲欧洲精品一区二区三区| 91网站最新网址| 亚洲国产一区二区三区| 欧美日韩国产精品自在自线| 日韩高清在线一区| 久久综合视频网| 成人午夜短视频| 亚洲欧洲日本在线| 在线观看91视频| 免费视频最近日韩| 久久精品一二三| 91香蕉视频mp4| 天天综合色天天| 精品国产乱码久久久久久1区2区 | 日本成人在线一区| 精品国产伦一区二区三区观看方式| 国产精品12区| 亚洲黄色av一区| 欧美精品欧美精品系列| 国产一区免费电影| 亚洲欧美视频在线观看视频| 欧美精品欧美精品系列| 国产精品一区三区| 亚洲一区av在线| 精品奇米国产一区二区三区| 99在线热播精品免费| 五月天亚洲精品| 国产欧美一区二区精品忘忧草| 一本色道久久综合亚洲aⅴ蜜桃| 日韩av午夜在线观看| 国产精品天干天干在观线| 欧美日本视频在线| 国产不卡视频一区二区三区| 亚洲一区中文在线| 久久精品视频免费| 欧美日韩成人一区| 成人性生交大合| 蜜桃av一区二区| 一区二区三区在线观看动漫| 精品美女被调教视频大全网站| 99精品视频在线免费观看| 久久激情五月婷婷| 亚洲狼人国产精品| 久久综合九色综合久久久精品综合| 972aa.com艺术欧美| 伦理电影国产精品| 一区二区日韩av| 国产欧美视频在线观看| 91精品国产丝袜白色高跟鞋| 91麻豆精品秘密| 国产乱码精品一区二区三区av| 亚洲成人免费观看| 中文字幕在线免费不卡| 欧美大片在线观看一区二区| 色八戒一区二区三区| 国产一区二区三区在线看麻豆| 亚洲a一区二区| 亚洲精品欧美激情| 国产精品入口麻豆九色|