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

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

?? ch375hft.c

?? CH375這個(gè)經(jīng)典的芯片
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* 2004.06.05
****************************************
**  Copyright  (C)  W.ch  1999-2004   **
**  Web:  http://www.winchiphead.com  **
****************************************
**  USB Host File Interface for CH375 **
**  TC2.0@PC, KC7.0@MCS51             **
****************************************
*/
/* CH375 主機(jī)文件系統(tǒng)接口 */
/* 支持: FAT12/FAT16/FAT32 */

/* MCS-51單片機(jī)C語言的U盤文件讀寫示例程序, 適用于89C52或者更大程序空間的單片機(jī) */
/* 本程序用于演示列出指定目錄下的所有文件,以及用于搜索/枚舉文件名 */
/* CH375的INT#引腳采用查詢方式處理, 數(shù)據(jù)復(fù)制方式為"單DPTR復(fù)制", 所以速度較慢, 適用于所有MCS51單片機(jī)
   本例適用于V3.0及以上版本、或者V2.8及以上版本的CH375子程序庫(kù) */


/* C51   CH375HFT.C */
/* LX51  CH375HFT.OBJ , CH375HF4.LIB    如果將CH375HF4換成CH375HF6就可以支持FAT32 */
/* OHX51 CH375HFT */

#include <reg52.h>
#include <stdio.h>
#include <string.h>

/* 以下定義的詳細(xì)說明請(qǐng)看CH375HF6.H文件 */
#define LIB_CFG_DISK_IO			1		/* 磁盤讀寫的數(shù)據(jù)的復(fù)制方式,1為"單DPTR復(fù)制",2為"雙DPTR復(fù)制",3為"單DPTR和P2+R0復(fù)制" */
#define LIB_CFG_FILE_IO			1		/* 文件讀寫的數(shù)據(jù)的復(fù)制方式,0為"外部子程序",1為"單DPTR復(fù)制",2為"雙DPTR復(fù)制",3為"單DPTR和P2+R0復(fù)制" */
#define LIB_CFG_INT_EN			0		/* CH375的INT#引腳連接方式,0為"查詢方式",1為"中斷方式" */
/*#define LIB_CFG_FILE_IO_DEFAULT	1*/		/* 使用CH375HF6.H提供的默認(rèn)"外部子程序" */
/*#define LIB_CFG_UPD_SIZE		1*/		/* 在添加數(shù)據(jù)后是否自動(dòng)更新文件長(zhǎng)度: 0為"不更新",1為"自動(dòng)更新" */
/* 默認(rèn)情況下,如果扇區(qū)數(shù)/字節(jié)數(shù)不為0那么CH375FileWrite/CH375ByteWrite只負(fù)責(zé)寫入數(shù)據(jù)而不修改文件長(zhǎng)度,
   如果需要每次寫完數(shù)據(jù)后會(huì)自動(dòng)修改/更新文件長(zhǎng)度,那么可以使全局變量CH375LibConfig的位4為1,
   如果長(zhǎng)時(shí)間不寫入數(shù)據(jù)則應(yīng)該更新文件長(zhǎng)度,防止突然斷電后前面寫入的數(shù)據(jù)與文件長(zhǎng)度不相符,
   如果確定不會(huì)突然斷電或者后面很快有數(shù)據(jù)不斷寫入則不必更新文件長(zhǎng)度,可以提高速度并減少U盤損耗(U盤內(nèi)部的內(nèi)存壽命有限,不宜頻繁改寫) */

#define CH375_CMD_PORT_ADDR		0xBDF1	/* CH375命令端口的I/O地址 */
#define CH375_DAT_PORT_ADDR		0xBCF0	/* CH375數(shù)據(jù)端口的I/O地址 */
/* 62256提供的32KB的RAM分為兩部分: 0000H-01FFH為磁盤讀寫緩沖區(qū), 0200H-7FFFH為文件數(shù)據(jù)緩沖區(qū) */
#define	DISK_BASE_BUF_ADDR		0x0000	/* 外部RAM的磁盤數(shù)據(jù)緩沖區(qū)的起始地址,從該單元開始的緩沖區(qū)長(zhǎng)度為SECTOR_SIZE */
#define DISK_BASE_BUF_LEN		4096	/* 默認(rèn)的磁盤數(shù)據(jù)緩沖區(qū)大小為512字節(jié),建議選擇為2048甚至4096以支持某些大扇區(qū)的U盤,為0則禁止在.H文件中定義緩沖區(qū)并由應(yīng)用程序在pDISK_BASE_BUF中指定 */
/* 如果需要復(fù)用磁盤數(shù)據(jù)緩沖區(qū)以節(jié)約RAM,那么可將DISK_BASE_BUF_LEN定義為0以禁止在.H文件中定義緩沖區(qū),而由應(yīng)用程序在調(diào)用CH375Init之前將與其它程序合用的緩沖區(qū)起始地址置入pDISK_BASE_BUF變量 */
#define FILE_DATA_BUF_ADDR		0x1000	/* 外部RAM的文件數(shù)據(jù)緩沖區(qū)的起始地址,緩沖區(qū)長(zhǎng)度不小于一次讀寫的數(shù)據(jù)長(zhǎng)度,字節(jié)模式不用該緩沖區(qū) */
#define FILE_DATA_BUF_LEN		4096

#define CH375_INT_WIRE			INT0	/* P3.2, INT0, CH375的中斷線INT#引腳,連接CH375的INT#引腳,用于查詢中斷狀態(tài) */

#define NO_DEFAULT_CH375_F_ENUM		1		/* 未調(diào)用CH375FileEnumer程序故禁止以節(jié)約代碼 */
#define NO_DEFAULT_CH375_F_QUERY	1		/* 未調(diào)用CH375FileQuery程序故禁止以節(jié)約代碼 */

#define NO_DEFAULT_FILE_ENUMER		1		/* 禁止默認(rèn)的文件名枚舉回調(diào)程序,下面用自行編寫的程序代替它 */

#include "..\CH375HF6.H"				/* 如果不需要支持FAT32,那么請(qǐng)選用CH375HF4.H */

/* 在P1.4連接一個(gè)LED用于監(jiān)控演示程序的進(jìn)度,低電平LED亮,當(dāng)U盤插入后亮 */
sbit P1_4  = P1^4;
#define LED_OUT_INIT( )		{ P1_4 = 1; }	/* P1.4 高電平 */
#define LED_OUT_ACT( )		{ P1_4 = 0; }	/* P1.4 低電平驅(qū)動(dòng)LED顯示 */
#define LED_OUT_INACT( )	{ P1_4 = 1; }	/* P1.4 低電平驅(qū)動(dòng)LED顯示 */
sbit P1_5  = P1^5;
/* 在P1.5連接一個(gè)LED用于監(jiān)控演示程序的進(jìn)度,低電平LED亮,當(dāng)對(duì)U盤操作時(shí)亮 */
#define LED_RUN_ACT( )		{ P1_5 = 0; }	/* P1.5 低電平驅(qū)動(dòng)LED顯示 */
#define LED_RUN_INACT( )	{ P1_5 = 1; }	/* P1.5 低電平驅(qū)動(dòng)LED顯示 */
sbit P1_6  = P1^6;
/* 在P1.6連接一個(gè)LED用于監(jiān)控演示程序的進(jìn)度,低電平LED亮,當(dāng)對(duì)U盤寫操作時(shí)亮 */
#define LED_WR_ACT( )		{ P1_6 = 0; }	/* P1.6 低電平驅(qū)動(dòng)LED顯示 */
#define LED_WR_INACT( )		{ P1_6 = 1; }	/* P1.6 低電平驅(qū)動(dòng)LED顯示 */

/* 以毫秒為單位延時(shí),不精確,適用于24MHz時(shí)鐘 */
void	mDelaymS( unsigned char delay )
{
	unsigned char	i, j, c;
	for ( i = delay; i != 0; i -- ) {
		for ( j = 200; j != 0; j -- ) c += 3;  /* 在24MHz時(shí)鐘下延時(shí)500uS */
		for ( j = 200; j != 0; j -- ) c += 3;  /* 在24MHz時(shí)鐘下延時(shí)500uS */
	}
}

/* 將程序空間的字符串復(fù)制到內(nèi)部RAM中,返回字符串長(zhǎng)度 */
UINT8	mCopyCodeStringToIRAM( UINT8 idata *iDestination, UINT8 code *iSource )
{
	UINT8	i = 0;
	while ( *iDestination = *iSource ) {
		iDestination ++;
		iSource ++;
		i ++;
	}
	return( i );
}

/* 檢查操作狀態(tài),如果錯(cuò)誤則顯示錯(cuò)誤代碼并停機(jī),應(yīng)該替換為實(shí)際的處理措施 */
void	mStopIfError( UINT8 iError )
{
	if ( iError == ERR_SUCCESS ) return;  /* 操作成功 */
	printf( "Error: %02X\n", (UINT16)iError );  /* 顯示錯(cuò)誤 */
	while ( 1 ) {
		LED_OUT_ACT( );  /* LED閃爍 */
		mDelaymS( 200 );
		LED_OUT_INACT( );
		mDelaymS( 200 );
	}
}

/* 為printf和getkey輸入輸出初始化串口 */
void	mInitSTDIO( )
{
	SCON = 0x50;
	PCON = 0x80;
	TMOD = 0x21;
	TH1 = 0xf3;  /* 24MHz晶振, 9600bps */
	TR1 = 1;
	TI = 1;
}

#if CH375_LIB_VER	>= 0x30
/* V3.0及以上版本的子程序庫(kù),只有V3.0及以上版本的子程序庫(kù)才能支持xFileNameEnumer回調(diào)程序 */

typedef struct _FILE_NAME {
	UINT32	DirStartClust;				/* 文件所在目錄的起始簇號(hào) */
//	UINT32	Size;						/* 文件長(zhǎng)度 */
	UINT8	Name[8+3+1+1];				/* 文件名,共8+3字節(jié),分隔符,結(jié)束符,因?yàn)槲窗夸浢允窍鄬?duì)路徑 */
	UINT8	Attr;						/* 文件屬性 */
} FILE_NAME;
#define		MAX_FILE_COUNT		200
FILE_NAME	xdata	FileNameBuffer[ MAX_FILE_COUNT ];	/* 文件名結(jié)構(gòu) */
UINT16	FileCount;
UINT32	CurrentDirStartClust;			/* 保存當(dāng)前目錄的起始簇號(hào),用于加快文件枚舉和打開速度 */

/* 例子:列舉指定目錄下的所有文件 */
UINT8	ListFile( void )
// 輸入?yún)?shù)mCmdParam.Open.mPathName[]為目錄名字符串,形式與文件名相同,單個(gè)斜線則代表根目錄
{
	UINT8	i;
	printf( "List Directory: %s\n", mCmdParam.Open.mPathName );  /* 顯示目錄名 */
//	for ( i = 0; i < MAX_PATH_LEN; i ++ ) {  /* 找目錄名的結(jié)束符 */
//		if ( mCmdParam.Open.mPathName[i] == 0 ) break;
//	}
	i = strlen( mCmdParam.Open.mPathName );  /* 計(jì)算路徑的長(zhǎng)度,找目錄名的結(jié)束符 */
	if ( i && mCmdParam.Open.mPathName[i-1] == '/' ) { }  /* 是根目錄,或者是已經(jīng)有路徑分隔符 */
	else mCmdParam.Open.mPathName[i++] = '/';  /* 在當(dāng)前目錄下進(jìn)行枚舉,除根目錄外都是相對(duì)路徑,不是根目錄則加路徑分隔符 */
	mCmdParam.Open.mPathName[i++] = '*';  /* 枚舉通配符,完整的路徑例如"\*"或者"\C51\*"或者"\C51\CH375*"等 */
	mCmdParam.Open.mPathName[i] = 0xFF;  /* 0xFF指定枚舉序號(hào)在CH375vFileSize中 */
	CH375vFileSize = 0xFFFFFFFF;  /* 快速連續(xù)枚舉,每找到一個(gè)文件調(diào)用一次xFileNameEnumer回調(diào)子程序,如果值小于0x80000000則每次只枚舉一個(gè)文件太慢 */
	i = CH375FileOpen( );  /* 枚舉,由回調(diào)程序xFileNameEnumer產(chǎn)生記錄保存到結(jié)構(gòu)中 */
	if ( i == ERR_SUCCESS || i == ERR_FOUND_NAME || i == ERR_MISS_FILE ) {  /* 操作成功,通常不會(huì)返回ERR_SUCCESS,僅在xFileNameEnumer提前退出時(shí)才會(huì)返回ERR_FOUND_NAME */
		printf( "Success, new FileCount = %d\n", FileCount );
		return( ERR_SUCCESS );
	}
	else {
		printf( "Failed, new FileCount = %d\n", FileCount );
		return( i );
	}
}

UINT8	ListAll( void )  /* 以廣度優(yōu)先的算法枚舉整個(gè)U盤中的所有文件及目錄 */
{
	UINT8	i;
	UINT16	OldFileCount;
	OldFileCount = FileCount = 0;  /* 清文件結(jié)構(gòu)計(jì)數(shù) */
	FileNameBuffer[ 0 ].Name[0] = '/';  /* 根目錄,是完整路徑名,除根目錄是絕對(duì)路徑之外都是相對(duì)路徑 */
	FileNameBuffer[ 0 ].Name[1] = 0;
	FileNameBuffer[ 0 ].DirStartClust = 0;  /* 根目錄的這個(gè)參數(shù)無意義 */
	FileNameBuffer[ 0 ].Attr = ATTR_DIRECTORY;  /* 根目錄也是目錄,作為第一個(gè)記錄保存 */

	for ( FileCount = 1; OldFileCount < FileCount; OldFileCount ++ ) {  /* 尚有新枚舉到的文件名結(jié)構(gòu)未進(jìn)行分析 */
		if ( FileNameBuffer[ OldFileCount ].Attr & ATTR_DIRECTORY ) {  /* 是目錄則繼續(xù)進(jìn)行深度搜索 */
			strcpy( mCmdParam.Open.mPathName, FileNameBuffer[ OldFileCount ].Name );  /* 目錄名,除根目錄外都是相對(duì)路徑 */
			CH375vStartCluster = FileNameBuffer[ OldFileCount ].DirStartClust;  /* 當(dāng)前目錄的上級(jí)目錄的起始簇號(hào),便于用相對(duì)路徑打開,比完整路徑名速度快 */
			i = CH375FileOpen( );  /* 打開目錄,僅為了獲取目錄的起始簇號(hào)以提高速度 */
			if ( i == ERR_SUCCESS ) return( ERR_MISS_DIR );  /* 應(yīng)該是打開了目錄,但是返回結(jié)果是打開了文件 */
			if ( i != ERR_OPEN_DIR ) return( i );
			if ( OldFileCount ) CurrentDirStartClust = CH375vStartCluster;  /* 不是根目錄,獲取目錄的起始簇號(hào) */
			else {  /* 是根目錄,獲取根目錄的起始簇號(hào) */
				if ( CH375vDiskFat == DISK_FAT32 ) CurrentDirStartClust = CH375vDiskRoot;  /* FAT32根目錄 */
				else CurrentDirStartClust = 0;  /* FAT12/FAT16根目錄 */
			}
			CH375FileClose( );  /* 對(duì)于根目錄一定要關(guān)閉 */

//			strcpy( mCmdParam.Open.mPathName, FileNameBuffer[ OldFileCount ].Name );  /* 目錄名,由于mPathName未被修改所以無需再?gòu)?fù)制 */
			CH375vStartCluster = FileNameBuffer[ OldFileCount ].DirStartClust;  /* 當(dāng)前目錄的上級(jí)目錄的起始簇號(hào),便于用相對(duì)路徑打開,比完整路徑名速度快 */
			i = ListFile( );  /* 枚舉目錄,由回調(diào)程序xFileNameEnumer產(chǎn)生記錄保存到結(jié)構(gòu)中 */
			if ( i != ERR_SUCCESS ) return( i );
		}
	}

// U盤中的文件及目錄全部枚舉完畢,下面開始根據(jù)結(jié)構(gòu)記錄依次打開文件 */
	printf( "Total file&dir = %d, Open every file:\n", FileCount );
	for ( OldFileCount = 0; OldFileCount < FileCount; OldFileCount ++ ) {
		if ( ( FileNameBuffer[ OldFileCount ].Attr & ATTR_DIRECTORY ) == 0 ) {  /* 是文件則打開,目錄則跳過 */
			printf( "Open file: %s\n", FileNameBuffer[ OldFileCount ].Name );
			strcpy( mCmdParam.Open.mPathName, FileNameBuffer[ OldFileCount ].Name );  /* 相對(duì)路徑 */
			CH375vStartCluster = FileNameBuffer[ OldFileCount ].DirStartClust;  /* 當(dāng)前文件的上級(jí)目錄的起始簇號(hào),便于用相對(duì)路徑打開,比完整路徑名速度快 */
			i = CH375FileOpen( );  /* 打開文件 */
			if ( i == ERR_SUCCESS ) {  /* 成功打開了文件 */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产午夜亚洲精品理论片色戒| 精品国产99国产精品| 日韩福利视频导航| 亚洲第一成年网| 强制捆绑调教一区二区| 亚洲色图视频网| 亚洲精品高清在线| 亚洲一区在线视频| 亚洲欧洲99久久| 国产一区二区三区| 丁香桃色午夜亚洲一区二区三区| 国产乱人伦偷精品视频不卡| 成人免费毛片a| 欧洲另类一二三四区| 色综合久久88色综合天天6| 欧美一区二区三区系列电影| 337p日本欧洲亚洲大胆色噜噜| 精品国产乱码久久久久久闺蜜| 国产亚洲欧美色| 一区二区在线观看视频| 亚洲一区二区av电影| 男人的天堂久久精品| 国产成人亚洲综合色影视| 9人人澡人人爽人人精品| 欧美无砖专区一中文字| 91精品国产一区二区三区蜜臀 | 国产欧美日韩激情| 一区二区三区四区视频精品免费| 亚洲一区自拍偷拍| 国产一区视频导航| 色综合久久88色综合天天6 | 国产精品欧美综合在线| 亚洲国产精品一区二区www在线| 久久99精品一区二区三区三区| 99视频精品全部免费在线| 欧美视频中文字幕| 337p粉嫩大胆色噜噜噜噜亚洲 | 国产成人在线看| 久久精品99国产国产精| 色综合天天综合网天天看片| 精品国产乱码久久久久久浪潮| 一区二区三区91| 懂色一区二区三区免费观看| 欧美午夜精品久久久久久超碰 | 日韩和的一区二区| 成人av网站在线| 国产欧美一区二区三区在线老狼| 国产精品自在欧美一区| 在线免费观看日本欧美| 国产精品成人午夜| 不卡一区二区三区四区| 日韩理论片在线| 国产日产欧产精品推荐色| 欧美激情综合五月色丁香小说| 日韩高清在线电影| 欧美性极品少妇| 亚洲欧洲中文日韩久久av乱码| 国产精品小仙女| 欧美成人精品福利| 麻豆久久一区二区| 日韩一区二区三区在线视频| 亚洲成av人片一区二区三区| 色婷婷精品久久二区二区蜜臂av| 国产精品美女久久久久aⅴ| 极品少妇一区二区| 精品日韩在线观看| 久久se精品一区二区| 日韩欧美一区二区久久婷婷| 日韩 欧美一区二区三区| 欧美日本一区二区在线观看| 亚洲综合成人在线视频| 日本乱人伦aⅴ精品| 亚洲欧美日韩国产手机在线| 91色视频在线| 亚洲另类在线视频| 日本高清成人免费播放| 一区二区在线观看免费视频播放| 在线中文字幕一区二区| 夜夜嗨av一区二区三区中文字幕| 一本色道a无线码一区v| 亚洲黄色录像片| 欧美午夜精品久久久久久孕妇 | 白白色亚洲国产精品| 欧美激情一区二区| 成人伦理片在线| ...av二区三区久久精品| 91麻豆精品秘密| 一区二区三区在线观看网站| 在线免费观看成人短视频| 亚洲一区二区三区精品在线| 欧美日韩在线三级| 日本亚洲天堂网| 精品伦理精品一区| 成人免费毛片片v| 亚洲九九爱视频| 欧美人动与zoxxxx乱| 免费高清在线视频一区·| 国产一区二区91| 亚洲成人在线观看视频| 亚洲一区二区三区精品在线| 免费一级片91| 亚洲成人在线免费| 亚洲一区欧美一区| 樱花草国产18久久久久| 国产欧美综合色| 中文字幕免费不卡在线| 日韩精品在线看片z| 欧美高清性hdvideosex| 一本久久综合亚洲鲁鲁五月天| 不卡区在线中文字幕| 国产精品成人免费 | 久久综合久久综合亚洲| 国产成人亚洲精品青草天美| 中文字幕一区二区5566日韩| 欧美日韩一级视频| 极品少妇一区二区| 亚洲欧美成aⅴ人在线观看 | 精一区二区三区| 最新国产精品久久精品| 欧美日韩成人一区| 国产suv精品一区二区883| 亚洲最大成人综合| 久久久一区二区| 色国产精品一区在线观看| 精品亚洲porn| 亚洲在线一区二区三区| 亚洲精品在线电影| 在线看国产一区二区| 国产在线一区二区| 亚洲一区视频在线| 国产丝袜欧美中文另类| 欧美三级视频在线播放| 国产呦萝稀缺另类资源| 亚洲自拍偷拍九九九| 国产日韩精品视频一区| 欧美老女人第四色| 不卡一卡二卡三乱码免费网站| 日一区二区三区| 国产精品国产三级国产aⅴ原创 | 蜜臀av一区二区| 亚洲欧美日韩人成在线播放| 精品久久久久av影院 | 日韩电影在线看| 亚洲日本青草视频在线怡红院| 日韩欧美一级二级三级| 欧美性极品少妇| 夫妻av一区二区| 美女诱惑一区二区| 亚洲国产精品久久人人爱蜜臀| 欧美极品美女视频| 日韩欧美不卡在线观看视频| 在线观看av一区| av中文字幕一区| 亚洲综合无码一区二区| 不卡一区中文字幕| 久久精品视频免费| 欧美视频在线不卡| 国产精品久久久久久久久果冻传媒 | 亚洲自拍另类综合| 国产美女娇喘av呻吟久久| 欧美日韩国产综合视频在线观看| 亚洲欧洲另类国产综合| 国产精品888| 国产精品久久久久久妇女6080| 日韩精品资源二区在线| 欧美巨大另类极品videosbest| 色视频成人在线观看免| gogogo免费视频观看亚洲一| 国产一区二区三区四| 卡一卡二国产精品 | 白白色亚洲国产精品| 国产精品一区二区久激情瑜伽| 久久精品噜噜噜成人av农村| 午夜精品123| 五月天视频一区| 亚欧色一区w666天堂| 亚洲综合成人在线| 一区二区三国产精华液| 亚洲色图在线视频| 亚洲欧美综合色| 中文字幕色av一区二区三区| 欧美国产日本视频| 中文字幕欧美区| 国产午夜精品一区二区三区嫩草| 精品国产乱码久久久久久闺蜜| 欧美mv日韩mv| 久久久久久久久久久久久夜| 久久久久久久一区| 国产喂奶挤奶一区二区三区| 国产亚洲污的网站| 久久精品人人做人人爽97| 国产婷婷色一区二区三区四区| 国产欧美日韩综合| 综合激情网...| 亚洲激情一二三区| 午夜激情综合网| 美女久久久精品| 国产在线视频精品一区| 国产成人免费视频网站| av电影一区二区|