企业网站托管价格,怎么做交易网站,公众号开发商城前景如何,python做网站有优势多年前一个项目主要做一台机器#xff0c;读取文件数据并解释执行#xff0c;吸合电磁阀或点亮相应的LED#xff0c;提示工人操作
文件格式
A
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8
9 9 9
10 10 10
11 11 …多年前一个项目主要做一台机器读取文件数据并解释执行吸合电磁阀或点亮相应的LED提示工人操作
文件格式
A
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8
9 9 9
10 10 10
11 11 11
12 12 12
13 13 13
14 14 14
15 15 15
16 16 16
17 17 17
18 18 18
19 19 19
20 20 20
23 23 23
63 23 23
62 22 22
60 20 20
58 18 18
57 17 17
56 16 16
55 15 15
54 14 14
53 13 13
52 12 12
51 11 11
50 10 10
49 9 9
47 7 7
第一列表示按键序号第二列表示LED序号第三列表示电磁阀序号 读取第一行点亮相应的LED吸合电磁等待相应的按键按下接着执行第二行以此类推
解释字符串并转换成相应的工序数据
#include file.h
#include znFAT.h
#include io.h
#include LCD1602.h#include string.h
#include stdlib.hstruct FileInfo FileInfo; //文件信息结构体实体FILE_T File;
STRING_T String;void FileInit( void )
{memset(File,0,sizeof(FILE_T));File.Name[0] \\;
}u8 ValidChar( u8 chr )
{if( (chr0chr9) || (chrAchrE)|| chrX || chr || chr,|| chr0x09 || chr0x0a || chr0x0d )return 1;elsereturn 0;
}//获取文件中各个工人的起始结束地址
void InitFileInfo( void )
{UINT8 step0,wks0;UINT16 i0; memset( File.ReadPtr,0,MAX_WORKERS );memset( File.End,0,MAX_WORKERS );while( iFile.Len ){switch( step ){case 0:switch( File.Buf[i] ){case A:WorkerFlow.Flow[A].Beep 0;while( File.Buf[i]!\n ){if( File.Buf[i]X )WorkerFlow.Flow[A].Beep X;i;}File.ReadPtr[A] i1;step 1;wks;break;case B:WorkerFlow.Flow[B].Beep 0;while( File.Buf[i]!\n ){if( File.Buf[i]X )WorkerFlow.Flow[B].Beep X;i;}File.ReadPtr[B] i1;step 2;wks;break;case C:WorkerFlow.Flow[C].Beep 0;while( File.Buf[i]!\n ){if( File.Buf[i]X )WorkerFlow.Flow[C].Beep X;i;}File.ReadPtr[C] i1;step 3;wks;break;case D:WorkerFlow.Flow[D].Beep 0;while( File.Buf[i]!\n ){if( File.Buf[i]X )WorkerFlow.Flow[D].Beep X;i;}File.ReadPtr[D] i1;step 4;wks;break;case E:WorkerFlow.Flow[E].Beep 0;while( File.Buf[i]!\n ){if( File.Buf[i]X )WorkerFlow.Flow[E].Beep X;i;}File.ReadPtr[E] i1;step 5;wks;break;default:break;}break;case 1:if( File.Buf[i]B ){File.End[A] i-1;i--;step 0;}else if( iFile.Len-1 )File.End[A] i1;else if( !ValidChar(File.Buf[i]) )File.End[A] i-1;break;case 2:if( File.Buf[i]C ){File.End[B] i-1;i--;step 0;}else if( iFile.Len-1 )File.End[B] i1;else if( !ValidChar(File.Buf[i]) )File.End[B] i-1;break;case 3:if( File.Buf[i]D ){File.End[C] i-1;i--;step 0;}else if( iFile.Len-1 )File.End[C] i1;else if( !ValidChar(File.Buf[i]) )File.End[C] i-1;break;case 4:if( File.Buf[i]E ){File.End[D] i-1;i--;step 0;}else if( iFile.Len-1 )File.End[D] i1;else if( !ValidChar(File.Buf[i]) )File.End[D] i-1;break;case 5:if( iFile.Len-1 )File.End[E] i1;else if( !ValidChar(File.Buf[i]) )File.End[E] i-1;break;default:break;}i;}//保存工人人数WorkerFlow.Workers wks;
}INT32 ReadLine( UINT8 worker )
{UINT16 size;UINT8 *src,*dst;src File.Buf[File.ReadPtr[worker]];dst String.Buf[0];if( NULLdst )return -1;if( NULLsrc || \0*src )return -1;if( File.ReadPtr[worker]File.End[worker] )return -1; size STRING_SIZE;String.Len 0;while( *src!\n size--0 File.ReadPtr[worker]File.Len ){*dst *src;File.ReadPtr[worker];String.Len;}*dst *src;File.ReadPtr[worker];String.Len;return 0;
} UINT8 ReadFile( INT8 *filepath )
{ if( !znFAT_Open_File(FileInfo,filepath,0,1) ) //FileInfo是文件信息结构体用来记录打开的文件的重要参数信息{File.LenznFAT_ReadData(FileInfo,0,FILE_SIZE,File.Buf); //读取打开的当前文件0表示从0位置开始读45表示读取45个字节file_buf是数据缓冲区znFAT_Close_File(FileInfo); //关闭文件if( FILE_SIZE File.Len )return 2;InitFileInfo();return 0;}return 1;
}void DecodeString( UINT8 Worker )
{UINT16 i,k,seg,word;BOOL segFlag,wordFlag;char str[5];//填充其它字符为空格for( k0; kString.Len; k ){if( String.Buf[k]0String.Buf[k]9 || String.Buf[k], || (String.Buf[k]A String.Buf[k]E) || String.Buf[k]X ){continue;}String.Buf[k] ;}i 0;seg word 0;segFlagwordFlag0;memset( WorkerFlow.Flow[Worker].Sign, 0, 3*MAX_ITEMS );for( k0; kString.Len; k ){if( String.Buf[k]0String.Buf[k]9){str[i] String.Buf[k];segFlag 1;wordFlag 1;}//else if(String.Buf[k]A String.Buf[k]E )//{ //}if( (String.Buf[k] ||String.Buf[k],) wordFlag ){wordFlag 0;str[i]\n;if( segMAX_SEGS wordMAX_ITEMS )WorkerFlow.Flow[Worker].Sign[seg][word] (UINT8)atoi(str);if( wordMAX_ITEMS-1 )word ;i 0;}if( String.Buf[k] segFlag ){segFlag 0;seg ;word 0;}}
}
/*
BOOL SearchIndex( u8 *str,u8 *filename )
{u16 i,j,k;if( FAT32_Open_File(FileInfo,index.txt,0) ){File.LenFAT32_Read_File(FileInfo,0,FILE_SIZE,File.Buf);FAT32_File_Close(FileInfo);while( iFile.Len ){if( strncmp((char*)str,(char*)File.Buf[i],10)0 ){while( (File.Buf[i]!) (iFile.Len) );j i;while( (File.Buf[i]!0x0d) (iFile.Len) );k i-j;strncpy((char*)filename,(char*)File.Buf[i],k);return 0;}while( (File.Buf[i] ! 0x0a) (iFile.Len) );}}return 1;
}*/
看回去10多年前的程序很稚嫩还不会用太多的字符操作函数直接字节比较周期长不止还容易出错调试困难后面学习不断累积新技术解决旧的问题开发也是更加的轻而易举。 for( k0; kString.Len; k ){if( String.Buf[k]0String.Buf[k]9){str[i] String.Buf[k];segFlag 1;wordFlag 1;}//else if(String.Buf[k]A String.Buf[k]E )//{ //}if( (String.Buf[k] ||String.Buf[k],) wordFlag ){wordFlag 0;str[i]\n;if( segMAX_SEGS wordMAX_ITEMS )WorkerFlow.Flow[Worker].Sign[seg][word] (UINT8)atoi(str);if( wordMAX_ITEMS-1 )word ;i 0;}if( String.Buf[k] segFlag ){segFlag 0;seg ;word 0;}}
}