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

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

?? fat.c

?? avr+TFT+SD卡實現數碼相框功能
?? C
字號:
//*****************************************************************************
//
// File Name	: 'fat.c'
// Title		: FAT32 File System
// Author		: Andy Zhu - Copyright (C) 2008.7
// Created		: 2008.07.20
// Revised		: 2008.07.20
// Version		: 0.1
// Target MCU	: Atmel AVR mega128
//
//*****************************************************************************
#include <avr/io.h>
#include <util/delay.h>
#include "sd.h"
#include "fat.h"
//-----------------------------------------------------------------------------
/******************************************************************************
* 名    稱: Look_for_DBR(void)
* 功    能: 根據MBR信息得到啟動扇區(DBR)的扇區號
* 參    數: 無
* 返 回 值: 啟動扇區(DBR)的扇區號
* 備    注: 
*******************************************************************************/
unsigned long int Look_for_DBR(void)
{
	unsigned char buffer[512];
	unsigned long int DBR_block = 0;
	SD_ReadSingleBlock(0,buffer);	//read MBR
	if ((buffer[510] == 0x55) && (buffer[511] == 0xAA))	//判斷是否是有效的扇區
	{
		/*********read the offset of DBR sector*********/
		DBR_block = buffer[0x1c9];
		DBR_block <<= 8;
		DBR_block |= buffer[0x1c8];
		DBR_block <<= 8;
		DBR_block |= buffer[0x1c7];
		DBR_block <<= 8;
		DBR_block |= buffer[0x1c6];
	}
	else
	{
		DBR_block = 0;
	}
	return DBR_block;
}
/******************************************************************************
* 名    稱: Get_FAT_BPB_Infor(void)
* 功    能: 讀取啟動扇區上的相關信息
* 參    數: 無
* 返 回 值: 啟動扇區(DBR)的扇區號
* 備    注: 
*******************************************************************************/
void Get_FAT_BPB_Infor(void)
{
	unsigned char buf[512];
	FirstSecNum = Look_for_DBR();		//look for logic block 0
	SD_ReadSingleBlock(FirstSecNum,buf);	//DBR(DOS BOOT RECORD)
	//-----------每扇區字節數,offset 0x0B,一般512字節---
	FAT32_BPB_infor.BPB_BytesPerSec = buf[0x0b+1];
	FAT32_BPB_infor.BPB_BytesPerSec <<= 8;
	FAT32_BPB_infor.BPB_BytesPerSec |= buf[0x0b];
	//-----------每簇扇區數,offset 0x0D--------------------
	FAT32_BPB_infor.BPB_SecPerClus = buf[0x0d];
	//-----------保留扇區數,offset 0x0E----------------
	FAT32_BPB_infor.BPB_ResSec = buf[0x0F];
	FAT32_BPB_infor.BPB_ResSec <<= 8;
	FAT32_BPB_infor.BPB_ResSec |= buf[0x0E];
	//-----------該分區上FAT的副本數,offset 0x10-------------------
	FAT32_BPB_infor.BPB_NumOfFAT = buf[0x10];
	//-----每FAT扇區數(只被FAT32使用)該分區每個FAT所占的扇區數。offset 0x24-----------
	FAT32_BPB_infor.BPB_SecPerFAT = buf[0x24+3];
	FAT32_BPB_infor.BPB_SecPerFAT <<= 8;
	FAT32_BPB_infor.BPB_SecPerFAT |= buf[0x24+2];
	FAT32_BPB_infor.BPB_SecPerFAT <<= 8;
	FAT32_BPB_infor.BPB_SecPerFAT |= buf[0x24+1];
	FAT32_BPB_infor.BPB_SecPerFAT <<= 8;
	FAT32_BPB_infor.BPB_SecPerFAT |= buf[0x24];
}
//----------------------------------------------------------------------------
/*****************************************************************************
* 名    稱: GetFileInfor(unsigned char *DIR_BUF,DIR_SHORT_STR *pDIR)
* 功    能: 得到短文件名的相關信息
* 參    數: unsigned char *DIR_BUF--->指向短文件32個字節信息首地址的指針
			DIR_SHORT_STR *pDIR   --->指向目標短文件信息結構的指針
* 返 回 值: 無
* 備    注: 
*******************************************************************************/
void GetFileInfor(unsigned char *DIR_BUF,DIR_SHORT_STR *pDIR)
{
	unsigned char i;
	/*
	//----------文件名----offset:0x00---------
	for (i=0; i<8; i++)
	{
		pDIR->DIR_Name[i] = *DIR_BUF++;
	}
	//----------擴展名----offset:0x08------
	for (i=0; i<3; i++)
	{
		pDIR->DIR_ExtName[i] = *DIR_BUF++;
	}
	*/
	//-------------文件全名-------------------
	for (i=0; i<11; i++)
	{
		pDIR->DIR_FullName[i] = *DIR_BUF++;
	}
	//----------文件屬性---offset:0x0B-----
	pDIR->DIR_Attr = *DIR_BUF++;
	//----------系統保留----offset:0x0c----
	pDIR->DIR_NTRes = *DIR_BUF++;
	//-----------創建時間的10毫秒位-----offset:0x0d--------
	pDIR->DIR_CrtTimeTenth = *DIR_BUF;
	//-----------文件創建時間-----offset:0x0e--------
	DIR_BUF += 2;
	pDIR->DIR_CrtTime = *DIR_BUF;
	pDIR->DIR_CrtTime <<= 8;
	DIR_BUF--;
	pDIR->DIR_CrtTime |= *DIR_BUF;
	//----------文件創建日期-----offset:0x10--------
	DIR_BUF += 3;
	pDIR->DIR_CrtDate = *DIR_BUF;
	pDIR->DIR_CrtDate <<= 8;
	DIR_BUF--;
	pDIR->DIR_CrtDate |= *DIR_BUF;
	//----------文件最后訪問日期----offset:0x12---------
	DIR_BUF += 3;
	pDIR->DIR_LstAccDate = *DIR_BUF;
	pDIR->DIR_LstAccDate <<= 8;
	DIR_BUF--;
	pDIR->DIR_LstAccDate |= *DIR_BUF;
	//-----------文件的最近修改時間----offset:0x16-------
	DIR_BUF += 5;
	pDIR->DIR_WrtTime = *DIR_BUF;
	pDIR->DIR_WrtTime <<= 8;
	DIR_BUF--;
	pDIR->DIR_WrtTime |= *DIR_BUF;
	//-----------文件的最近修改日期-----offset:0x18------
	DIR_BUF += 3;
	pDIR->DIR_WrtDate = *DIR_BUF;
	pDIR->DIR_WrtDate <<= 8;
	DIR_BUF--;
	pDIR->DIR_WrtDate |= *DIR_BUF;
	//-----------文件的長度-------offset:0x1C----
	DIR_BUF += 7;
	pDIR->DIR_FileSize = *DIR_BUF--;
	pDIR->DIR_FileSize <<= 8;
	pDIR->DIR_FileSize |= *DIR_BUF--;
	pDIR->DIR_FileSize <<= 8;
	pDIR->DIR_FileSize |= *DIR_BUF--;
	pDIR->DIR_FileSize <<= 8;
	pDIR->DIR_FileSize |= *DIR_BUF;
	//-----------文件起始簇號---offset:0x14 & offset:0x1A--------
	DIR_BUF -= 7;
	pDIR->DIR_FstClus = *DIR_BUF--;
	pDIR->DIR_FstClus <<= 8;
	pDIR->DIR_FstClus |= *DIR_BUF;
	pDIR->DIR_FstClus <<= 8;
	DIR_BUF += 7;
	pDIR->DIR_FstClus |= *DIR_BUF--;
	pDIR->DIR_FstClus <<= 8;
	pDIR->DIR_FstClus |= *DIR_BUF;
}
//--------------------------------------------------
/*****************************************************************************
* 名    稱: Calculate_FirstRootDirSecNum
* 功    能: 得到根目錄的扇區號
* 參    數: 
* 返 回 值: 根目錄扇區號
* 備    注: 
*******************************************************************************/
unsigned long int Calculate_FirstRootDirSecNum(void)
{
	unsigned long int temp;
	temp = FirstSecNum + FAT32_BPB_infor.BPB_ResSec + \
	FAT32_BPB_infor.BPB_NumOfFAT*FAT32_BPB_infor.BPB_SecPerFAT;
	return temp;
}
//--------------------------------------------------
/*****************************************************************************
* 名    稱: FAT_Get_File_FirCluNum
* 功    能: 得到指定文件的首簇號
* 參    數: unsigned char *pFileDir--->文件的路徑,例如"\\PICTURE\\PIC1.BIN"
			DIR_SHORT_STR *pDIR   --->指向目標短文件信息結構的指針
* 返 回 值: 目標文件的首簇號
* 備    注: 
*******************************************************************************/
unsigned long int FAT_Get_File_FirCluNum( char *pFileDir)
{
	volatile unsigned char j,k;
	volatile unsigned int s,i;
	volatile char *p = pFileDir;
	volatile unsigned char depth = 0;
	volatile unsigned char Cluster_changed;
	unsigned char BUF[512];
	char Name_buf[11];
	volatile unsigned long int TagFileSec;
	FirstRootDirSecNum = Calculate_FirstRootDirSecNum();	//首先指定到根目錄下
	TagFileSec = FirstRootDirSecNum;
	while (*p)
	{
		if(*p == '\\')
		{
			depth++;
		}
		p++;
	}
	p = pFileDir;	//---"\\PICTURE\\PIC1.BIN"
	for (j=0; j<depth; j++)
	{
		p++;
		for (i=0; i<11; i++)	//---得到整個文件的11字節名稱
		{
			if ((*p == '.')&&(i==8)) 
			{
				p++;
				i--;
				continue;	//去除文件的點號
			}
			if ((*p == '.')&&(i<8))
			{
				Name_buf[i] = 0X20;
			}
			else if (*p == '\\')
				Name_buf[i] = 0X20;
			else if (*p == '\0')
				Name_buf[i] = 0X20;
			else
				Name_buf[i] = *p++;
		}
		Cluster_changed = 0;
		for (k=0; k<FAT32_BPB_infor.BPB_SecPerClus; k++)//在一簇里查找
		{
			SD_ReadSingleBlock(TagFileSec++,BUF);	//讀取一個扇區
			//---讀取一個文件的相關信息------
			for (i=0,s=(i<<5); i<16; i++,s=(i<<5))	//16x32=512
			{
				if (BUF[s] == 0x00)	//文件目錄結束
					return 0;			//沒有找到文件則返回0
				if ((BUF[s] == 0xe5)||(BUF[s] == 0x05))
					continue;	//文件已經被刪除,繼續讀取下一個文件目錄信息
				if ((BUF[s+0x0b] == 0x08)||(BUF[s+0x0b] == 0x0f))
					continue;	//卷名或長文件名
				if ((depth == 1)&&(BUF[s+8] == 0x20))
					continue;	//查找的文件在根目錄下,則為目錄文件(沒有擴展名)的直接放棄
				//else if ((depth > 1)&&(BUF[s+8] != 0x20))
				//	continue;	//查找的文件不在根目錄下,則根目錄下的文件(有擴展名)則放棄
				GetFileInfor(&BUF[s],&FAT32_DIR_infor);	//讀取文件的相關信息
				if (FileNameMatch(Name_buf,(char*)FAT32_DIR_infor.DIR_FullName))	//名字匹配
				{
					if (j == depth-1)	//已經是最后層目錄
						return (FAT32_DIR_infor.DIR_FstClus);
					else
					{
						TagFileSec = (FAT32_DIR_infor.DIR_FstClus - 2)*FAT32_BPB_infor.BPB_SecPerClus+FirstRootDirSecNum;
						Cluster_changed = 1;
						break;
					}
				}
			}
			if (Cluster_changed)
				break;
		}

	}
	//--------------------------------------
	
	return 0;
}
//--------------------------------------------------
unsigned char FileNameMatch(char *TagName,char *FileName)
{
	unsigned char m;
	for (m=0; m<11; m++)
	{
		if (*(TagName+m)!=*(FileName+m))
			return 0;	//名字不匹配,返回0
	}
	return 1;	//名字匹配,返回1
}

//--------------------------------------------------


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美夫妻性生活| 日本不卡免费在线视频| 亚洲一区电影777| 国产精品自产自拍| 欧美乱妇一区二区三区不卡视频| 国产欧美一区二区精品性色 | 91久久精品一区二区三| 精品久久久久久久久久久久久久久 | 国产精品一级黄| 3atv一区二区三区| 亚洲女女做受ⅹxx高潮| 国产**成人网毛片九色 | 欧美午夜电影网| 成人免费在线观看入口| 国产精品一区三区| 精品国产精品网麻豆系列| 亚洲成av人片一区二区梦乃| 91美女福利视频| 亚洲欧洲日韩在线| 99免费精品视频| 欧美激情一区在线观看| 国产一区 二区 三区一级| 日韩丝袜情趣美女图片| 石原莉奈一区二区三区在线观看 | 亚洲电影视频在线| 欧美在线你懂的| 亚洲最新视频在线播放| 色婷婷综合在线| 亚洲一区二区免费视频| 欧美色图天堂网| 五月婷婷另类国产| 日韩精品一区在线观看| 激情欧美日韩一区二区| 精品国偷自产国产一区| 国产一区在线看| 国产精品丝袜一区| 色婷婷av一区二区| 午夜精品久久久| 精品国产伦理网| 国产成人aaa| 亚洲柠檬福利资源导航| 欧美在线观看你懂的| 天堂精品中文字幕在线| 在线成人小视频| 国产一区二区在线电影| 国产欧美日本一区视频| 97精品久久久久中文字幕| 一区二区成人在线| 日韩女优视频免费观看| 成人一区在线观看| 亚洲一区二区三区在线看| 7777精品伊人久久久大香线蕉 | 国产在线视视频有精品| 国产精品美女久久久久久久| 色呦呦国产精品| 美女一区二区视频| 亚洲国产精品99久久久久久久久| eeuss鲁一区二区三区| 亚洲电影一区二区| 久久免费视频色| 91麻豆swag| 美女www一区二区| 国产精品成人免费在线| 欧美精品丝袜久久久中文字幕| 国产精品自拍av| 亚洲午夜久久久久久久久电影网| 精品日韩一区二区| 一本久久综合亚洲鲁鲁五月天| 美日韩一区二区三区| ㊣最新国产の精品bt伙计久久| 欧美少妇一区二区| 成人综合在线观看| 日本不卡一二三| 亚洲乱码精品一二三四区日韩在线| 91精品黄色片免费大全| 波多野洁衣一区| 另类综合日韩欧美亚洲| 亚洲视频精选在线| 久久久久免费观看| 欧美男生操女生| 91亚洲国产成人精品一区二区三| 视频一区二区欧美| 一区二区三区欧美激情| 精品国产人成亚洲区| 精品污污网站免费看| 99久久久免费精品国产一区二区| 久久99国产精品免费网站| 一区二区三区高清不卡| 亚洲国产精品成人久久综合一区 | 欧美三级欧美一级| 99精品黄色片免费大全| 国产精品白丝jk白祙喷水网站 | 日韩亚洲欧美综合| 欧美在线不卡视频| 91麻豆123| 99久久精品国产一区| 国产精品1区2区3区在线观看| 奇米影视一区二区三区| 亚洲精品国产视频| 亚洲三级在线免费观看| 中文在线一区二区| 中文字幕成人网| 国产欧美一区二区精品忘忧草| 91精品国产品国语在线不卡| 精品视频在线看| 欧美日韩性生活| 欧美日韩一区二区三区在线| 91网页版在线| 91国偷自产一区二区三区观看| a4yy欧美一区二区三区| 国产suv一区二区三区88区| 国产成人自拍网| 国产一区二区三区蝌蚪| 国产呦萝稀缺另类资源| 国产一区二区精品久久| 国产精品亚洲成人| 不卡高清视频专区| 91日韩在线专区| 欧美在线免费视屏| 欧美私人免费视频| 欧美精品18+| 日韩美一区二区三区| 欧美精品一区二区三区久久久| 久久久亚洲精华液精华液精华液| 久久久久99精品一区| 中文字幕在线视频一区| 亚洲精品va在线观看| 午夜精品一区在线观看| 裸体一区二区三区| 成人少妇影院yyyy| 色综合色狠狠天天综合色| 欧美日高清视频| 精品国产人成亚洲区| 国产女主播一区| 亚洲愉拍自拍另类高清精品| 午夜精品免费在线| 国产成人免费高清| 日本韩国一区二区| 日韩视频免费观看高清完整版在线观看 | 国产一区二区在线免费观看| 成人性色生活片免费看爆迷你毛片| av资源站一区| 欧美日韩一区二区三区四区五区| 精品久久一二三区| 亚洲精品视频在线观看免费| 天天av天天翘天天综合网| 国产美女一区二区三区| 欧洲国内综合视频| 久久久精品影视| 亚洲va韩国va欧美va精品| 国产精品69毛片高清亚洲| 欧美综合一区二区三区| 久久亚洲一区二区三区四区| 亚洲裸体在线观看| 国产一区二区网址| 欧美日韩亚洲不卡| 成人欧美一区二区三区视频网页| 秋霞国产午夜精品免费视频| 91在线观看美女| 久久综合狠狠综合久久激情| 亚洲一区免费视频| 国产成人av自拍| 日韩欧美卡一卡二| 亚洲主播在线观看| 91尤物视频在线观看| 久久久午夜精品| 久久国产精品第一页| 欧美亚洲国产bt| 日韩理论电影院| 国产黄色精品网站| 欧美一区二区三级| 亚洲国产一区在线观看| 成a人片国产精品| 国产视频一区二区三区在线观看| 日韩1区2区日韩1区2区| 在线精品国精品国产尤物884a| 国产欧美日韩中文久久| 久久国产尿小便嘘嘘尿| 欧美精品日韩精品| 亚洲精品国产无天堂网2021| 成人一区二区三区| 欧美精品一区二区久久久| 日韩精品亚洲一区| 欧美日韩国产欧美日美国产精品| 国产精品美女久久久久久久久| 国产一区二区在线观看视频| 日韩欧美一二区| 蜜臀精品久久久久久蜜臀 | 91官网在线观看| 亚洲欧美自拍偷拍| 大胆欧美人体老妇| 日本一区二区三区久久久久久久久不 | 亚洲欧洲日韩一区二区三区| 国产一区中文字幕| 欧美草草影院在线视频| 美女精品自拍一二三四| 欧美岛国在线观看| 国产真实乱子伦精品视频| 精品久久久久久久久久久久久久久| 日本欧美大码aⅴ在线播放|