📄 usbcontrol.c
字号:
mDelay100mS( );
}
while(CH375DiskStatus==DISK_DISCONNECT)
{
if(i==1)
printf( "Disc out\n" );
mDelay100mS( );
mDelay100mS( );
mDelay100mS( );
i=0;
}
if(CH375DiskStatus != DISK_DISCONNECT)
{
mDelay100mS( ); /* 延时100毫秒 */
printf( "Continuing\n" );
}
strcpy( mCmdParam.Create.mPathName, cp); /* 新文件名,在根目录下 */
i = CH375FileCreate( ); /* 新建文件并打开,如果文件已经存在则先删除后再新建 */
mStopIfError( i );
mCmdParam.Write.mSectorCount =c; /* 写入所有扇区的数据 */
/* current_buffer = & FILE_DATA_BUF[0]; 如果文件读写的数据的复制方式为"外部子程序",那么需要设置存放数据的缓冲区的起始地址 */
i = CH375FileWrite( ); /* 向文件写入数据 */
mStopIfError( i );
mCmdParam.Modify.mFileAttr = 0xff; /* 输入参数: 新的文件属性,为0FFH则不修改 */
mCmdParam.Modify.mFileTime = 0xffff; /* 输入参数: 新的文件时间,为0FFFFH则不修改,使用新建文件产生的默认时间 */
mCmdParam.Modify.mFileDate = MAKE_FILE_DATE( 2006,5, 22); /* 输入参数: 新的文件日期: 2004.05.18 */
mCmdParam.Modify.mFileSize =size; /* 输入参数: 如果原文件较小,那么新的文件长度与原文件一样长,否则被RAM所限,如果文件长度大于64KB,那么NewSize必须为UINT32 */
i = CH375FileModify( ); /* 修改当前文件的信息,修改日期和长度 */
mStopIfError( i );
mCmdParam.Close.mUpdateLen = 0; /* 不要自动计算文件长度,如果自动计算,那么该长度总是512的倍数 */
i = CH375FileClose( );
mStopIfError( i );
printf( "Create a file\n" );
}
}
UINT8 file_amount;//文件数目统计,用于删除,复制后刷新
/////////////////////选择文件进行操作//////////////////////////////////////
//用于通过key_down,key_up增减选择文件,并对选中文件执行file_oper操作。
void sel_file(UINT8 code *dir,bit root_flag)
{
UINT8 i;
UINT8 c=0,file_oper=1;//file_oper:文件操作选择,1为Copy a file,2为Del a file。可扩展功能,
bit cancel,one_in;
one_in=1;//第一次按key_enter标志,防止因未选中文件而按操作键而出错。
while(1)
{
if(key_enter&&one_in)
{key_enter_elim();printf("Not sel a file!\n");}
if(key_enter&&!one_in)
{
key_enter_elim();
printf("Operation:\n");
while(1)
{
if(key_down)
{
key_down_elim();
file_oper++;
if(file_oper==5)
file_oper=1;
if(file_oper==1)
printf("%d Copy a file\n",(unsigned int)file_oper);
if(file_oper==2)
printf("%d Del a file\n",(unsigned int)file_oper);
if(file_oper==3)
printf("%d Open with text\n",(unsigned int)file_oper);
if(file_oper==4)
printf("%d File attribute\n",(unsigned int)file_oper);
}
if(key_up)
{
key_up_elim();
file_oper--;
if(file_oper==0)
file_oper=4;
if(file_oper==1)
printf("%d Copy a file\n",(unsigned int)file_oper);
if(file_oper==2)
printf("%d Del a file\n",(unsigned int)file_oper);
if(file_oper==3)
printf("%d Open with text\n",(unsigned int)file_oper);
if(file_oper==4)
printf("%d File attribute\n",(unsigned int)file_oper);
}
if(key_enter)
{
key_enter_elim();
if(file_oper==2)
{
printf("Sure to del?\n");
while(1)
{
if(key_esc)
{key_esc_elim();printf("Cancel\n");cancel=1;break;};
if(key_enter)
{
key_enter_elim();
cancel=0;
del_file();
file_amount=enumer_file(dir,0);//刷新文件数目。
break;
}
}
if(!cancel)
break;
}
if(file_oper==1)
{
if(root_flag)
{copy_file(mCmdParam.Enumer.mPathName);cy_cancel=0;}//cy_cancel=0;完成取消功能后,进入正常状态,cy_cancel为零。
else
printf("Not the root dir\n");
}
if(file_oper==3)
file_open_show();
if(file_oper==4)
file_attribute();
}
if(key_esc)
{
key_esc_elim();
printf("Return to sel file\n");
break;
}
}
}
if(key_down)
{
key_down_elim();
one_in=0;
c++;
i = mCopyCodeStringToIRAM( mCmdParam.Enumer.mPathName, dir); //搜索文件名,*为通配符,适用于所有文件或者子目录
if(c>file_amount)
c=0;
mCmdParam.Enumer.mPathName[ i ] = c; // 根据字符串长度将结束符替换为搜索的序号,从0到255
i=CH375FileEnumer( ); // 打开文件,如果文件名中含有通配符*,则为搜索文件而不打开
printf( "%d:%s\n", (unsigned int)c, mCmdParam.Enumer.mPathName); // 显示序号和搜索到的匹配文件名或者子目录名
}
if(key_up)
{
key_up_elim();
one_in=0;
c--;
i = mCopyCodeStringToIRAM( mCmdParam.Enumer.mPathName, dir); //搜索文件名,*为通配符,适用于所有文件或者子目录
if(c==255)
c=file_amount;
mCmdParam.Enumer.mPathName[ i ] = c; // 根据字符串长度将结束符替换为搜索的序号,从0到255
i=CH375FileEnumer( ); // 打开文件,如果文件名中含有通配符*,则为搜索文件而不打开
printf( "%d:%s\n", (unsigned int)c,mCmdParam.Enumer.mPathName);// 显示序号和搜索到的匹配文件名或者子目录名
}
if(key_esc)
{
key_esc_elim();
mDelay100mS();mDelay100mS();mDelay100mS();
printf("Back\n");
break;
}
}
}
///////////////////////功能选择////////////////////////////////////////////////////////
UINT8 functionsel(void)
{ //function为主体功能选择,1:选择根目录。2选择AA目录,3:复制根目录全部文件到AA,4 剪切根目录全部文件到AA
//5:删除根目录全部文件 6:删除AA目录全部文件 7:查询磁盘情况--可以增加扩展。
UINT8 function=1; bit cancel;
printf("A Disc Operate\n");
while(1)
{
if(key_esc)
{key_esc_elim();printf("Back\n");return(0);break;}//此时,break;可以省去。
if(key_down)
{
key_down_elim();
function++;
if(function==8)
function=1;
if(function==1)
printf("%d Sel root dir\n",(unsigned int)function);
if(function==2)
printf("%d Sel root AA\n",(unsigned int)function);
if(function==3)
printf("%d Copy all files to AA\n",(unsigned int)function);
if(function==4)
printf("%d Cut all files to AA\n",(unsigned int)function);
if(function==5)
printf("%d Del all files in root dir\n",(unsigned int)function);
if(function==6)
printf("%d Del all files in root AA\n",(unsigned int)function);
if(function==7)
printf("%d Inquire disc state\n",(unsigned int)function);
}
if(key_up)
{
key_up_elim();
function--;
if(function==0)
function=7;
if(function==1)
printf("%d Sel root dir\n",(unsigned int)function);
if(function==2)
printf("%d Sel root AA\n",(unsigned int)function);
if(function==3)
printf("%d Copy all files to AA\n",(unsigned int)function);
if(function==4)
printf("%d Cut all files to AA\n",(unsigned int)function);
if(function==5)
printf("%d Del all files in root dir\n",(unsigned int)function);
if(function==6)
printf("%d Del all files in root AA\n",(unsigned int)function);
if(function==7)
printf("%d Inquire disc state\n",(unsigned int)function);
}
if(key_enter)
{
key_enter_elim();
if(function==4||function==5||function==6)
{
printf("Sure to execute?\n");
while(1)
{
if(key_esc)
{key_esc_elim();printf("Cancel\n");cancel=1;break;};
if(key_enter)
{key_enter_elim();cancel=0;break;};
}
if(!cancel)
{return(function);break;}
}
else
{
return(function);break;
}
}
}
}
//////////////////主函数/////////////////////////////////////////////////////
void USBCont(void)
{
UINT8 i,count=0;
UINT8 c=0,fun_flag;
LCD_init();
LCD_clr();
mInitSTDIO( ); // 为了让计算机通过串口监控演示过程
printf( "Start\n" );
CH375_INT_FLAG = 0; // 清中断标志
i = CH375LibInit( ); // 初始化CH375程序库和CH375芯片,操作成功返回0
mStopIfError( i );
CH375_INT_EN = 1; //允许CH375中断
EA = 1; // 初始化完成,开中断
printf("Wait Udisk\n");
while ( CH375DiskStatus != DISK_CONNECT ); // 等待U盘插入,单片机可以做其它事情
mDelay100mS( ); // 延时,可选操作,有的USB存储器需要几十毫秒的延时
mDelay100mS( );
for ( i = 0; i < 5; i ++ ) // 检查U盘是否准备好,有些U盘不需要这一步
{
mDelay100mS( );
printf( "Ready ?\n" );
if ( CH375DiskReady( ) == ERR_SUCCESS ) break; // 查询磁盘是否准备好
}
printf("Please sel_fun\n");
while(1)
{
if(key_enter)
{
key_enter_elim();
fun_flag=functionsel();
switch(fun_flag)
{
case 1:
{
file_amount=enumer_file("\\*",1);
if(file_amount==0)
printf("NO operable file\n");
else
sel_file("\\*",1);
break;
}
case 2:
{
file_amount=enumer_file("\\AA\\*",1);
if(file_amount==1)
printf("NO operable file\n");
else
sel_file("\\AA\\*",0);
break;
}
case 3:
{
file_amount=enumer_file("\\*",0);
if(file_amount==0)
printf("NO operable file\n");
else
{
copy_del_cut_enumer("\\*",1);
if(!cy_cancel)
printf("ALL have copyed\n");
cy_cancel=0;//回到正常状态。
}
break;
}
case 4:
{
file_amount=enumer_file("\\*",0);
if(file_amount==0)
printf("NO operable file\n");
else
{
copy_del_cut_enumer("\\*",3);
if(!cy_cancel)
printf("ALL have cutted\n");
cy_cancel=0;//回到正常状态。
}
break;
}
case 5:
{
file_amount=enumer_file("\\*",0);
if(file_amount==0)
printf("NO operable file\n");
else
{copy_del_cut_enumer("\\*",2);printf("ALL have det\n");}
break;
}
case 6:
{
file_amount=enumer_file("\\AA\\*",0);
if(file_amount==1)
printf("NO operable file\n");
else
{copy_del_cut_enumer("\\AA\\*",2);printf("ALL have det\n");}
break;
}
case 7:
{
query_disk();break;
}
default:
break;
}
}
if(key_up)//演示两U盘数据传送
{
key_up_elim();
printf("Disc Exchange\n");
i= CH375FileOpen( );
if ( i!=ERR_SUCCESS )
printf("Not sel file\n");
else
i = CH375FileClose();
while(1)
{
if(key_enter)
{key_enter_elim();file_charge();break;}
if(key_esc)
{key_esc_elim()printf("Back\n");break;}
}
}
if(key_down)//演示数据采集
{
key_down_elim();
printf("Sample Data\n");
onetime=0;
ES=1;
while(1)
{
if(key_enter)
{key_enter_elim();printf("Data Sampling...\n");i=56;}
if(key_esc)
{
key_esc_elim();
ES=0;
if(i==56)
{
printf("Save data\n");
save_data();
}
printf("Back\n");
break;
}
}
}
if(key_esc)
{
key_esc_elim();
printf( "Please take out\n" );
while ( CH375DiskStatus != DISK_DISCONNECT ) i=55;// 等待U盘拔出,单片机可以做其它事情*/
while(CH375DiskStatus==DISK_DISCONNECT)
{
if(i==55)
printf( "Disc out\nWait Udisk\n" );//这个循环里面只显示一次。
mDelay100mS( );
mDelay100mS( );
i=0;
}
if(CH375DiskStatus != DISK_DISCONNECT)
{
mDelay100mS( ); /* 延时100毫秒 */
mDelay100mS( );
printf("Please sel_fun\n");
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -