⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text1.c

📁 使用51单片机作为控制器
💻 C
📖 第 1 页 / 共 3 页
字号:
						if(key_esc)
							{	
								key_esc_elim();
								break;
							}
							
					}
					break;
				case 5:           //粘贴
					if(CanPast)
					{   LCD_clr();
						File_CopyPath(TempBuf,FilePathBuf); //得到新文件路径
						File_Copy(strcat(TempBuf,File_NameInPath(FilePastBuf)),FilePastBuf);
                        if(CanPast==2&&!cy_cancel)
							File_Del(FilePastBuf);
						CanPast=0;
					}
	                FileMaxNum=File_Enumer(FilePathBuf,0);
					break;
				 case 6:
				 	LCD_clr();
	 				USB_Attribute();
				    while(1)
				    {
						if(key_esc)
							{key_esc_elim();break;}
				    }
				 	break;
				 case 7:
				 	File_CopyPath(FileNameBuf,FilePathBuf); //得到新文件路径,文件名称为时间
                    strcat(FileNameBuf,"NEW");
                    mCopyCodeStringToIRAM( mCmdParam.Create.mPathName,FileNameBuf);
					i = CreateDirectory( );  /* 新建或者打开目录 */
 				    while(i==ERR_FOUND_NAME)//一直创建,直到文件名不重复为止
					{	
						NameCnt++;
					    sprintf(TempBuf,"NEW%d",(UINT16)NameCnt);
                        File_CopyPath(mCmdParam.Create.mPathName,FilePathBuf);
                        strcat(mCmdParam.Create.mPathName,TempBuf);
						i = CreateDirectory( );  /* 新建或者打开目录 */
					}
                    FileMaxNum=File_Enumer(FilePathBuf,0);//刷新文件数目
				 	break;
			}
			break;
		}
		
	}
//完成后恢复环境--------
	LCD_clr();
	LCD_set_XY(0,5);
	printf("Open");
	LCD_set_XY(60,5);
	printf("Back");
	LCD_set_XY(0,0);
	printf("%s",FilePathBuf);
	FileRedisp(FileWhere,FileSel);
}
//---------------菜单处理函数----------------------------------------------------
#define DispMax 3
void Key_UpOper(void)
{   UINT8 FileSelBackup;
    UINT8 i,Menu_j;
    FileSelBackup=FileSel;
	if(FileSel==0)
		FileSel=FileMaxNum;
    else
		FileSel--;
	if(FileWhere==0)//如果现在是在顶项处
	{   
		if(DispMax>=FileMaxNum)//如果可以显示所有项。则由顶项跳到底项。
		{	
			FileWhere=FileMaxNum;
			LCD_write_english_bar(File_SelName(FilePathBuf,FileSelBackup),5,1,78,0,0);
			LCD_write_english_bar(File_SelName(FilePathBuf,FileSel),5,FileWhere+1,78,0,1);
		}
		else//否则所有项下移一行。
		{
			LCD_write_english_bar(File_SelName(FilePathBuf,FileSel),5,1,78,0,1);//显示当前项目
	        Menu_j=FileSel;
			for(i=2;i<5;i++)//显示其它项
	        {	Menu_j++;
				if(Menu_j>FileMaxNum)
					Menu_j=0;
				LCD_write_english_bar(File_SelName(FilePathBuf,Menu_j),5,i,78,0,0);
			}
		}
	}
	else
	{
		FileWhere--;
		LCD_write_english_bar(File_SelName(FilePathBuf,FileSel),5,FileWhere+1,78,0,1);
        LCD_write_english_bar(File_SelName(FilePathBuf,FileSelBackup),5,FileWhere+2,78,0,0);
	}
}
void Key_DownOper(void)
{   UINT8 FileSelBackup;
    UINT8 i,Menu_j;
    FileSelBackup=FileSel;
	if(FileSel==FileMaxNum)
		FileSel=0;
    else
		FileSel++;
	if(FileWhere==DispMax||FileWhere==FileMaxNum)//如果位于显示末项
	{	
		if(DispMax>=FileMaxNum)//如果可以显示所有项。则由底项跳到顶项。
		{	
			FileWhere=0;
			LCD_write_english_bar(File_SelName(FilePathBuf,FileSel),5,FileWhere+1,78,0,1);
			LCD_write_english_bar(File_SelName(FilePathBuf,FileSelBackup),5,FileMaxNum+1,78,0,0);
		}
		else
		{
			LCD_write_english_bar(File_SelName(FilePathBuf,FileSel),5,4,78,0,1);
	        Menu_j=FileSel;
			for(i=DispMax;i>0;i--)
	        {	Menu_j--;
				if(Menu_j==255)
					Menu_j=FileMaxNum;
				LCD_write_english_bar(File_SelName(FilePathBuf,Menu_j),5,i,78,0,0);
			}
		}
	}
	else
	{
		FileWhere++;
		LCD_write_english_bar(File_SelName(FilePathBuf,FileSel),5,FileWhere+1,78,0,1);
        LCD_write_english_bar(File_SelName(FilePathBuf,FileSelBackup),5,FileWhere,78,0,0);
	}
}
//---------------------根据文件选择号和所在位置刷新屏幕显示文件项的内容---------------------------------
void FileRedisp(UINT8 FileWhereI,UINT8 FileSelJ)
{		
	UINT8 i;
	UINT8 Menu_j;
	LCD_set_XY(0,1);
	for(i=0;i<56;i++)//清除Please wait~。
		LCD_write_char(' ',0);
	LCD_write_english_bar(File_SelName(FilePathBuf,FileSelJ),5,FileWhereI+1,78,0,1);//显示当前选项
//显示其它选项。
    Menu_j=FileSelJ;
	for(i=FileWhereI;i>0;i--)//显示当前项上面部分。
	{
		if(Menu_j==0)
			Menu_j=FileMaxNum;
		else 
			Menu_j--;
		LCD_write_english_bar(File_SelName(FilePathBuf,Menu_j),5,i,78,0,0);
	}
    Menu_j=FileSelJ;
	for(i=FileWhereI+1;i<=DispMax;i++)//显示当前项下面部分。
	{	
		if(i>FileMaxNum)//如果所要显示项目小于最大显示数,则只显示到FileMaxNum。
			break;
		if(Menu_j==FileMaxNum)
			Menu_j=0;
		else 
			Menu_j++;
		LCD_write_english_bar(File_SelName(FilePathBuf,Menu_j),5,i+1,78,0,0);
	}
}

void Menu_Init(void)
{	
	LCD_clr();
	LCD_set_XY(6,2);
	printf("Please wait~");
	LCD_set_XY(0,5);
	printf("Open");
	LCD_set_XY(60,5);
	printf("Back");
    FileWhere=0;
    FileSel=0;
	FileLay=0;
    strcpy(FilePathBuf,"\\*");
    LCD_set_XY(0,0);
    printf("%s",FilePathBuf);
	FileMaxNum=File_Enumer(FilePathBuf,0);
	FileRedisp(FileWhere,FileSel);
}
void Meun_InOper(void)
{	
	UINT8 i;
    LCD_clr();
	LCD_set_XY(6,2);
	printf("Please wait~");
	File_SelName(FilePathBuf,FileSel);
	i = CH375FileOpen( );
	if(i ==ERR_SUCCESS)
	{	
		if(strcmp(File_NameType(FileNameBuf),"LCD"))
			File_TextDisp();
		else
			File_PicDisp();
//当文件打开操作完成后恢复环境--------
		LCD_clr();
	    LCD_set_XY(0,5);
		printf("Open");
		LCD_set_XY(60,5);
		printf("Back");
		LCD_set_XY(0,0);
	    printf("%s",FilePathBuf);
	    FileRedisp(FileWhere,FileSel);
	}
	else
	{	
		LCD_set_XY(0,5);
		printf("Open");
	    LCD_set_XY(60,5);
	    printf("Back");	
		strcpy(FilePathBuf,FileNameBuf);
        strcat(FilePathBuf,"\\*");
        LCD_set_XY(0,0);
        printf("%s",FilePathBuf);
		FileMaxNum=File_Enumer(FilePathBuf,0);			
		FilePlace[FileLay]=FileWhere;//进入下一个目录前,先保存这一目录的有关情况。(文件选择号。位置)
		FileSaveSel[FileLay]=FileSel;
		FileLay++;
    	FileSel=0;
        FileWhere=0;
		FileRedisp(FileWhere,FileSel);
	}
}
void Meun_OutOper(void)
{	
	LCD_clr();
	LCD_set_XY(6,2);
	printf("Please wait~");
    LCD_set_XY(0,5);
	printf("Open");
	LCD_set_XY(60,5);
	printf("Back");
	FileLay--;
	File_UpPath();//退回上一目录
	LCD_set_XY(0,0);
    printf("%s",FilePathBuf);
    FileMaxNum=File_Enumer(FilePathBuf,0);//重新计算文件数目
    FileSel=FileSaveSel[FileLay];    //恢复目录所在环境
	FileWhere=FilePlace[FileLay];
    FileRedisp(FileWhere,FileSel);
}
//------------------------------------------------------------------------------
void USBcontrol(void)
{   uchar i;
    LCD_clr();
	while (!USB_Connet)  // 等待U盘插入,单片机可以做其它事情 
	{   LCD_set_RC(1,0);
        LCD_puts(USBTab[2],0);//优盘未插入
        LCD_set_RC(3,5);
	    LCD_putc(45,0);LCD_putc(46,0);//显示 -返回
        if(key_esc)
		{	key_esc_elim();
			return;
		}
	}
	for ( i = 0; i < 5; i ++ ) 	// 检查U盘是否准备好,有些U盘不需要这一步
	{  
		mDelay100mS( );
		if ( CH375DiskReady( ) == ERR_SUCCESS ) break;  // 查询磁盘是否准备好 
	}
 //   LCD_set_RC(1,0);
  //  LCD_puts(USBTab[1],0);//检测到U盘。
	Menu_Init();
    while(1)
	{   
        if(key_left)
		{	
			key_left_elim();
			File_DealWith();
		}
        if(key_right)
		{	
			key_right_elim();
		}
        if(key_up)
		{	
			key_up_elim();
			Key_UpOper();
		}
        if(key_down)
		{	key_down_elim();
			Key_DownOper();
		}
        if(key_esc)
		{	key_esc_elim();
            if(FileLay)
				Meun_OutOper();
			else
			{
				flash=1;
            	reflash=1;
				return;
			}
		}
        if(key_enter)
		{	key_enter_elim();
			Meun_InOper();
		}
	}
}

void main(void)
{	UINT8 i;
    LCD_init(); 
	LCD_clr();//清屏
    InitTimer0();
    CH375_INT_FLAG = 0;  // 清中断标志 
	i = CH375LibInit( );  // 初始化CH375程序库和CH375芯片,操作成功返回0 
	mStopIfError( i );
	CH375_INT_EN = 1;  //允许CH375中断
	EA = 1;  // 初始化完成,开中断
	while(1)
	{
		if(key_up)
		{    key_up_elim();
		     KeyFuncIndex=KeyTab[KeyFuncIndex].KeyUpState;
			 if(where>0)
			 	where--;
			 flash=1;
		}
		if(key_down)
		{    key_down_elim();
		     KeyFuncIndex=KeyTab[KeyFuncIndex].KeyDnState;
			 if(where<2)
			 	where++;
			 flash=1;
		}
		if(key_left)
		{    key_left_elim();
		     KeyFuncIndex=KeyTab[KeyFuncIndex].KeyLState;
			 flash=1;
			 reflash=1;
		     LevelCnt=0;
		}
		if(key_right)
		{    key_right_elim(); 
		     KeyFuncIndex=KeyTab[KeyFuncIndex].KeyRState;
		     flash=1;
			 reflash=1;
             LevelCnt=0;
		}
		if(key_enter)
		{    key_enter_elim();
			 MenuIn();
			 flash=1;
		}
		if(key_esc)
		{    key_esc_elim();
			 MenuOut();
			 flash=1; 
		}
        if(reflash)
		{
			reflash=0;
            LCD_clr();
			KeyIndicate(KeyFuncIndex);//按键提示词语操作。
		}
		if(flash)
		{
			 flash=0;
			 KeyFuncPtr=KeyTab[KeyFuncIndex].CurrentOperate;
		 	(*KeyFuncPtr)();//执行当前按键的操作
		}
		if(KeyFuncIndex==0)
			TR0=1;
		else
			TR0=0;

	}

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -