📄 text1.c
字号:
////////////////////加入按键中断////////////
i=(UINT8)((UINT32)n*100/SecCount);
if(i>100)
i=100;
LCD_set_XY(0,1);
printf("%3d%% complete",(UINT16)i);
if(key_esc)
{ key_esc_elim();
i = CH375FileErase();
cy_cancel=1;
return;
}
cy_cancel=0;
////////////////////////////////////////////
i = CH375FileClose( );
mStopIfError( i );
//printf("total sec:%d\n",n);
strcpy(mCmdParam.Open.mPathName,sou); /* 文件名,该文件在C51子目录下 */
i = CH375FileOpen( );
mStopIfError( i );
}
i = CH375FileClose();
mStopIfError( i );
strcpy( mCmdParam.Create.mPathName, des );
i = CH375FileOpen();
mCmdParam.Modify.mFileAttr = 0xff; /* 输入参数: 新的文件属性,为0FFH则不修改 */
ReadTime();
mCmdParam.Modify.mFileTime = MAKE_FILE_TIME( TimeBuf[2],TimeBuf[1], TimeBuf[0] ); /* 输入参数: 新的文件时间,为0FFFFH则不修改,使用新建文件产生的默认时间 */
mCmdParam.Modify.mFileDate = MAKE_FILE_DATE( 2000+TimeBuf[6],TimeBuf[4],TimeBuf[3] ); /* 输入参数: 新的文件日期: 2004.05.18 */
mCmdParam.Modify.mFileSize =NewSize; /* 输入参数: 如果原文件较小,那么新的文件长度与原文件一样长,否则被RAM所限,如果文件长度大于64KB,那么NewSize必须为UINT32 */
i = CH375FileModify( ); /* 修改当前文件的信息,修改日期和长度 */
mStopIfError( i );
mCmdParam.Close.mUpdateLen =0;
i = CH375FileClose( );
mStopIfError( i );
LCD_set_XY(0,2);
printf("To %s",des);
}
}
/////////////////////////打开文件并显示部分///////////////////////////////
//------------------由开始位置显示文本内容,返回显示后的剩余位置 -------------
UINT32 LCD_TextDisp(UINT32 FileStart)
{
UINT8 Disp_j=0; //Disp_i为显示指针位置,范围为0-83。因为屏幕可以显示84个英文字符。
UINT8 i ; //i为已经显示的字符数。i<=Disp_i。
bit flag; //回车是否在行末标志。
LCD_clr(); //清屏
LCD_set_XY(0,0);
for(i=0;;i++) //显示每一个屏幕所能显示的内容
{
if(FILE_DATA_BUF[FileStart+i]==13)//如果有回车符。则要换行。
{
if(Disp_j%14)
{
if(FILE_DATA_BUF[FileStart+i+2]==13)
flag=1;
else
flag=0;
if(Disp_j/14==5) //如果显示屏幕最后一行有回车。则显示满。退出
break;
else
{ LCD_set_XY(0,Disp_j/14+1);
Disp_j=(Disp_j/14)*14+14;
}
}
else
//如果回车在一行最末尾,则跳过。回车为2字节由ASCII为(13,10)组成,保留10显示。
{ flag=1;
continue;
}
}
else
{ if(!flag&&FILE_DATA_BUF[FileStart+i]==10)
//如果回车不在一行最末尾,则跳过10的显示。回车为2字节由ASCII为(13,10)组成,回车在行末才保留10显示。(为显示效果而设)
continue;
if(FILE_DATA_BUF[FileStart+i]=='\0')
return FileStart+i;
LCD_write_char(FILE_DATA_BUF[FileStart+i],0);
Disp_j++; //除了回车符号,其它符号都在屏幕上显示。因而指针要加1
if(Disp_j==84)
break; //显示指针以满。退出
}
}
return FileStart+i+1; //返回完成位置数+1,加一以便下次从新位置开始。
}
extern void FileRedisp(UINT8 FileWhereI,UINT8 FileSelJ);
#define PAGEMAX 500
void File_TextDisp(void)
{ UINT8 i;
UINT16 SecCount;
UINT32 NewSize;
UINT32 Place=0; //显示页数位置记录
UINT32 PlaceBackup=0; //显示页数位置记录
UINT16 Page=0; //显示的页数记录;
UINT8 PageBuf[PAGEMAX]; //记录500页码显示内容数。
i = CH375FileOpen( );
if ( CH375vFileSize > FILE_DATA_BUF_LEN )
{ /* 由于演示板用的62256只有32K字节,其中CH375子程序用512字节,所以只读取不超过63个扇区,也就是不超过32256字节 */
SecCount = FILE_DATA_BUF_LEN / 512; /* 由于演示板用的62256只有32K字节,其中CH375子程序用512字节,所以只读取不超过63个扇区,也就是不超过32256字节 */
NewSize = FILE_DATA_BUF_LEN; /* 由于RAM有限所以限制长度 */
}
else
{ /* 如果原文件较小,那么使用原长度 */
SecCount = ( CH375vFileSize + 511 ) >> 9; /* (CH375vFileSize+511)/512, 计算文件的扇区数,因为读写是以扇区为单位的,先加511是为了读出文件尾部不足1个扇区的部分 */
NewSize = (UINT16)CH375vFileSize; /* 原文件的长度 */
}
mCmdParam.Read.mSectorCount = SecCount; /* 读取全部数据,如果超过60个扇区则只读取60个扇区 */
/* current_buffer = & FILE_DATA_BUF[0]; 如果文件读写的数据的复制方式为"外部子程序",那么需要设置存放数据的缓冲区的起始地址 */
CH375vFileSize += 511; /* 默认情况下,以扇区方式读取数据时,无法读出文件尾部不足1个扇区的部分,所以必须临时加大文件长度以读取尾部零头 */
i = CH375FileRead( ); /* 从文件读取数据 */
CH375vFileSize -= 511; /* 恢复原文件长度 */
mStopIfError( i );
if (CH375vFileSize < FILE_DATA_BUF_LEN )
FILE_DATA_BUF[CH375vFileSize]='\0';
Place=LCD_TextDisp(Place);
PageBuf[Page]=(UINT8)(Place);
while(1)
{
if(key_up)
{
key_up_elim();
if(Page)
{
Place=PlaceBackup-PageBuf[Page-1];//上一次结束位置为PlaceBack;今次结束位置为Place,
//当上翻时候应从上一次结束位置算出上一次开始位置。
PlaceBackup=Place;
Page--;
Place=LCD_TextDisp(Place);
}
}
if(key_down)
{
key_down_elim();
if(Place<NewSize)
{
PlaceBackup=Place;
Place=LCD_TextDisp(Place);
if(Page<PAGEMAX-1)
Page++; //最大保存PAGEMAX页数,以便倒退显示,PAGEMAX-1为从零开始
PageBuf[Page]=(UINT8)(Place-PlaceBackup);
}
}
if(key_esc)
{
key_esc_elim();
break;
}
}
}
///////////////////////////////打开并显示图片文件////////////////////////////////////
extern UINT8 BCDConvert(UINT8);
UINT8 File_PicConv(UINT8 temp)
{
if(temp>='a'&&temp<='f')//字符转换为对应16进制
temp=temp-87;
else if(temp>='A'&&temp<='F')//字符转换为对应16进制
temp=temp-55;
else if(temp>='0'&&temp<='9')//字符转换为对应16进制
temp=temp-48;
else
temp=0;
return temp;
}
/*将文件缓冲区分成2部分,图片原始数据放到第一部分,另一部分放处理后数据,原始数据以'X'开头标志有效*/
void File_PicDisp(void)
{
UINT8 x=0,y=0,i,PicX,PicY,Temp;//PicX,PicY分别为图片象素的长和宽
UINT16 SecCount,Cnt,j;
LCD_clr();
i = CH375FileOpen( );/* 打开文件 */
if (CH375vFileSize > FILE_DATA_BUF_LEN/2-513)//文件太大
return;
SecCount=(CH375vFileSize+511)/512; /* 默认情况下,以扇区方式读取数据时,无法读出文件尾部不足1个扇区的部分,所以必须临时加大文件长度以读取尾部零头 */
mCmdParam.Read.mSectorCount =SecCount;
i = CH375FileRead(); /* 从文件读取数据 */
for(i=0;FILE_DATA_BUF[i]=='/'||i==250;i++);
Temp=FILE_DATA_BUF[i]-48;
Temp=Temp<<4;
PicX=FILE_DATA_BUF[i+1]-48;
PicX=BCDConvert(Temp|PicX);
Temp=FILE_DATA_BUF[i+3]-48;
Temp=Temp<<4;
PicY=FILE_DATA_BUF[i+4]-48;
PicY=BCDConvert(Temp|PicY);
SecCount=(UINT16)PicY*(UINT16)PicX/8;//借用SecCount变量,避免增加新变量
for(j=0,Cnt=0;Cnt<SecCount;j++)
{
if(FILE_DATA_BUF[j]=='X'||FILE_DATA_BUF[j]=='x')
{
i=File_PicConv(FILE_DATA_BUF[j+1]);
Temp=File_PicConv(FILE_DATA_BUF[j+2]);
Temp=0x0f&Temp;
i=i<<4;
(FILE_DATA_BUF+0x3c00)[Cnt]=Temp|i;
j=j+2;
Cnt++;
}
}
LCD_DrawPic(x,y,FILE_DATA_BUF+0x3c00,PicX,PicY);
//LCD_DrawPic(0,0,bitmap1,PicX,PicY);
while(1)
{
if(key_right)
{
key_right_elim();
Temp=84-PicX;
if(x<Temp)
{x+=4;LCD_clr();}
LCD_DrawPic(x,y,FILE_DATA_BUF+0x3c00,PicX,PicY);
}
if(key_left)
{
key_left_elim();
if(x>3)
{x-=4;LCD_clr();}
LCD_DrawPic(x,y,FILE_DATA_BUF+0x3c00,PicX,PicY);
}
if(key_up)
{
key_up_elim();
if(y>0)
{y--;LCD_clr();}
LCD_DrawPic(x,y,FILE_DATA_BUF+0x3c00,PicX,PicY);
}
if(key_down)
{
key_down_elim();
Temp=48-PicY;
if(y*8<Temp)
{y++;LCD_clr();}
LCD_DrawPic(x,y,FILE_DATA_BUF+0x3c00,PicX,PicY);
}
if(key_esc)
{key_esc_elim();break;}
}
}
////////////////////////////////查看文件属性/////////////////////////////////////////
void File_Attribute(void)
{//前提:已经选择文件名
UINT32 size;
UINT16 i;
LCD_set_XY(60,5);
printf("Exit");
i = CH375FileOpen();
if(i==ERR_SUCCESS)
{
// mCmdParam.Modify.mFileSize中是文件的长度,以字节为单位,长度可以是0
//mCmdParam.Modify.mFileDate 中是文件修改时间,格式参考CH375HF?.H 中的说明
//mCmdParam.Modify.mFileTime 中是文件修改时间,格式参考CH375HF?.H 中的说明
//mCmdParam.Modify.mFileAttr 中是文件属性,例如数值01H 说明该文件是只读文件
//printf("Modify time:%ld\n",(UINT16)mCmdParam.Modify.mFileAttr);
//printf("Modify data:%ld\n",(UINT16)mCmdParam.Modify.mFileDate);
//printf("Attribute:%02X",(UINT16)mCmdParam.Modify.mFileAttr);
LCD_set_XY(0,0);
printf("-%s-",File_SelName(FilePathBuf,FileSel));
LCD_set_XY(0,3);
printf("Path:%s",FileNameBuf);
LCD_set_XY(0,2);
printf("Attr:");
i=CH375FileQuery( ); /* 查询当前文件的信息 */
if(mCmdParam.Modify.mFileAttr==0X20)
printf("Archive");
if(mCmdParam.Modify.mFileAttr==0X01)
printf("Read only");
if(mCmdParam.Modify.mFileAttr==0X02)
printf("Hidden");
if(mCmdParam.Modify.mFileAttr==0x10)
printf("Subdir");
if(mCmdParam.Modify.mFileAttr==0x04)
printf("System file");
if(mCmdParam.Modify.mFileAttr==0x08)
printf("VOLUME_ID");
size=(UINT32)CH375vFileSize;
LCD_set_XY(0,1);
if(i=size>>20)
{ i=size*10>>20;
printf("Size:%d.%dMB\n",i/10,i%10);}
else if(i=size>>10)
printf("Size:%dKB\n",i);
else
printf("Size:%dByte\n",(UINT16)size);
i = CH375FileClose(); /* 关闭文件 */
mStopIfError( i );
}
else
{
printf("%s",File_SelName(FilePathBuf,FileSel));
LCD_set_RC(1,0);
LCD_putc(87,0);LCD_putc(88,0);LCD_putc(89,0);LCD_putc(90,0);//显示 -为文件夹
LCD_set_XY(0,3);
printf("Path:%s",FileNameBuf);
}
}
//------------------------------------------------------------------------------------
extern void Meun_InOper(void);
extern uchar Item;
void File_DealWith(void)
{ UINT8 i,NameCnt=1;
UINT8 TempBuf[MAX_PATH_LEN];
FileOperInit();
while(1)
{
if(key_up)
{
key_up_elim();
Menu_Up();
}
if(key_down)
{ key_down_elim();
Menu_Down();
}
if(key_esc)
{ key_esc_elim();
break;
}
if(key_enter)
{ key_enter_elim();
switch(Item)
{
case 0: //打开
Meun_InOper();
break;
case 1: //属性
LCD_clr();
File_SelName(FilePathBuf,FileSel);
File_Attribute();
while(1)
{
if(key_esc)
{key_esc_elim();break;}
}
break;
case 2: //复制
File_SelName(FilePathBuf,FileSel);
i = CH375FileOpen();
if(i ==ERR_SUCCESS)
{
CanPast=1;
strcpy(FilePastBuf,FileNameBuf);
}
break;
case 3: //剪切
File_SelName(FilePathBuf,FileSel);
i = CH375FileOpen();
if(i ==ERR_SUCCESS)
{
CanPast=2;
strcpy(FilePastBuf,FileNameBuf);
}
break;
case 4: //删除
LCD_clr();
LCD_set_RC(3,0);
LCD_putc(84,0);LCD_putc(85,0);//显示 -确认
LCD_set_RC(3,5);
LCD_putc(82,0);LCD_putc(83,0);//显示 -取消
LCD_set_RC(0,0);
LCD_putc(74,0);LCD_putc(75,0);LCD_putc(86,0);//显示 -删除?
LCD_set_XY(0,2);
printf("%s",File_SelName(FilePathBuf,FileSel));
while(1)
{
if(key_enter)
{ key_enter_elim();
//File_SelName(FilePathBuf,FileSel);//
File_Del(FileNameBuf);
FileMaxNum=File_Enumer(FilePathBuf,0);
if(FileWhere)
FileWhere--;
if(FileSel)
FileSel--;
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -