scan.c

来自「实验室连线监控原代码,一台主机采用485总线方式与从机通讯,可以检测学生的连线是」· C语言 代码 · 共 1,336 行 · 第 1/2 页

C
1,336
字号
  unsigned char i,j,k,l,m=0;
  for(j=temp1+1;j<8;j++)
   {
     for(k=0;k<18;k++)
     {
       XBYTE[P8255CW+k]=0x80;
     }
     XBYTE[P8255IC+temp0]=_crol_(0x01,temp1)|_crol_(0x01,j);
     for(k=0;k<18;k++)
     {
       c[k]=XBYTE[P8255IC+k];
     }
     for(k=0;k<18;k++)
      {
        for(l=0;l<8;l++)
         {
           pc[k][l]=_cror_(c[k],l)&0x01;
         }
      }
     if(pc[temp0][temp1]==1)
       {
         for(j=temp1+1;j<8;j++)
          {
            if(pc[temp0][j]==1)
              {
                 *s=8*temp0+j+289;
                  s++;
                  m++;
                  d++;
              }
            else continue;
          }
         for(i=temp0+1;i<18;i++)
          {
            for(j=0;j<8;j++)
             {
               if(pc[i][j]==1)
                 {
                   *s=8*i+j+289;
                    s++;
                    m++;
                    d++;
                 }
               else continue;
             }
          }
            if(m>=2)
              {
                *s=8*temp0+temp1+145;
                 s+=2;
                 d+=2;
              }
            break;
       }
     else continue;
   }
  if(m==0)
    {
  for(i=temp0+1;i<18;i++)
   {
     for(j=0;j<8;j++)
      {
        for(k=0;k<18;k++)
         {
           XBYTE[P8255CW+k]=0x80;
         }
        XBYTE[P8255IC+temp0]=_crol_(0x01,temp1);
        XBYTE[P8255IC+i]=_crol_(0x01,j);
        for(k=0;k<18;k++)
         {
           c[k]=XBYTE[P8255IC+k];
         }
        for(k=0;k<18;k++)
         {
           for(l=0;l<8;l++)
            {
              pc[k][l]=_cror_(c[k],l)&0x01;
            }
         }
        if(pc[temp0][temp1]==1)
          {
            for(i=temp0+1;i<18;i++)
             {
               for(j=0;j<8;j++)
                {
                  if(pc[i][j]==1)
                    {
                      *s=8*i+j+289;
                       s++;
                       m++;
                       d++;
                    }
                  else continue;
                }
             }
               if(m>=2)
                 {
                   *s=8*temp0+temp1+289;
                    s+=2;
                    d+=2;
                 }
               break;
          }
        else continue;
      }
   }
    }
}

void main()
{
  unsigned char i,j,k,f,g;
  unsigned char h=0,l=0,m=0,n=0,p=0,q=0;
  unsigned short e,x,y;
  unsigned short xdata *w=0x0580;
  unsigned short xdata *z=0x05c0;
  unsigned short xdata *u=0x0600;
  unsigned short xdata *v=0x0640;
  unsigned short xdata *r=0x0680;
  unsigned short xdata *t=0x0700;
  unsigned char idata fa[10],fb[10],fc[10];
  unsigned char idata ga[10],gb[10],gc[10];
  for(x=0;x<1616;x++)
   {
    XBYTE[0x1b0+x]=0x00;
   }
  for(i=0;i<18;i++)
   {
     for(j=0;j<8;j++)
     {
        initialize8255();
	XBYTE[P8255IA+i]=_crol_(0x01,j);
        for(k=0;k<18;k++)
          {
           a[k]=XBYTE[P8255IA+k];
           b[k]=XBYTE[P8255IB+k];
           c[k]=XBYTE[P8255IC+k];
          }
        mapping();
        switch(pa[i][j])
        {
  	  case 0:
            y=8*i+j+1;
            *t=8*i+j+1;
            t++;
            l++;
            for(k=0;k<d;k++)
              {
                if(y==*s++)
                goto exit1;
              }
 	    temp0=i,temp1=j;
            thr_fou_pnts_conn1();
            exit1: s=0x01b0;
          break;
          case 1:
	    temp0=i,temp1=j;
            two_pnts_conn1();
            s=0x01b0;
	  break;
 	  default:
 	  break;
        }
     }
          a[i]=0x00;
   }
  for(i=0;i<18;i++)
   {
     for(j=0;j<8;j++)
     {
       initialize8255();
       XBYTE[P8255IB+i]=_crol_(0x01,j);
       for(k=0;k<18;k++)
         {
          b[k]=XBYTE[P8255IB+k];
          c[k]=XBYTE[P8255IC+k];
         }
       mapping();
       switch(pb[i][j])
       {
	  case 0:
            y=8*i+j+145;
            *t=8*i+j+145;
            t++;
            l++;
            for(k=0;k<d;k++)
              {
                if(y==*s++)
                goto exit2;
              }
 	    temp0=i,temp1=j;
            thr_fou_pnts_conn2();
            exit2: s=0x01b0;
	  break;
          case 1:
            temp0=i,temp1=j;
            two_pnts_conn2();
            s=0x01b0;
	  break;
 	  default:
 	  break;
       }
     }
          b[i]=0x00;
   }
  for(i=0;i<18;i++)
   {
     for(j=0;j<8;j++)
     {
       initialize8255();
       XBYTE[P8255IC+i]=_crol_(0x01,j);
       for(k=0;k<18;k++)
         {
          c[k]=XBYTE[P8255IC+k];
         }
       mapping();
       switch(pc[i][j])
       {
	  case 0:
            y=8*i+j+289;
            *t=8*i+j+289;
            t++;
            l++;
            for(k=0;k<d;k++)
              {
                if(y==*s++)
                goto exit3;
              }
 	    temp0=i,temp1=j;
            thr_fou_pnts_conn3();
            exit3: s=0x01b0;
	  break;
          case 1:
            temp0=i,temp1=j;
            two_pnts_conn3();
            s=0x01b0;
	  break;
 	  default:
 	  break;
       }
     }
          c[i]=0x00;
   }
  t=0x0700;
  for(i=0;i<l;i++)
   {
     for(j=0;j<d;j++)
     {
       if(*(t+i)==*(s+j))
       goto exit4;
     }
       *r=*(t+i);
       r++;
       m++;
       exit4: ;
   }
   r=0x0680;
   if(m<10)
     {
       s+=d;
       for(i=0;i<m;i++)
        {
          *s++=*r++;
        }
     }
   else if(m>=10)
     {
       for(k=0;k<18;k++)
        {
          XBYTE[P8255CW+k]=0x80;
        }
       for(k=0;k<10;k++)
        {
          fa[k]=0;
          fb[k]=0;
          fc[k]=0;
          ga[k]=0;
          gb[k]=0;
          gc[k]=0;
        }
       for(i=0;i<m/2;i++)
        {
          e=*r++;
          if(e<=144)
            {
              f=(e-1)/8;
              g=(e-1)%8;
              fa[i]=f;
              ga[i]=_crol_(0x01,g);
            }
          else if((e>144)&&(e<=288))
            {
              f=(e-145)/8;
              g=(e-145)%8;
              fb[i]=f;
              gb[i]=_crol_(0x01,g);
            }
          else if(e>288)
            {
              f=(e-289)/8;
              g=(e-289)%8;
              fc[i]=f;
              gc[i]=_crol_(0x01,g);
            }
        }
       for(i=0;i<m/2;i++)
        {
          f=fa[i];
          g=ga[i];
          if(i>=1)
            {
              for(k=0;k<=i-1;k++)
               {
                 if(f==fa[k])
                   {
                     goto exit5;
                   }
               }
            }
          for(j=i+1;j<=m/2;j++)
           {
             if(fa[j]==fa[i])
               {
                 g|=ga[j];
               }
           }
          XBYTE[P8255IA+fa[i]]=g;
          exit5: ;
        }
       for(i=0;i<m/2;i++)
        {
          f=fb[i];
          g=gb[i];
          if(i>=1)
            {
              for(k=0;k<=i-1;k++)
               {
                 if(f==fb[k])
                   {
                     goto exit6;
                   }
               }
            }
          for(j=i+1;j<=m/2;j++)
           {
             if(fb[j]==fb[i])
               {
                 g|=gb[j];
               }
           }
          XBYTE[P8255IB+fb[i]]=g;
          exit6: ;
        }
       for(i=0;i<m/2;i++)
        {
          f=fc[i];
          g=gc[i];
          if(i>=1)
            {
              for(k=0;k<=i-1;k++)
               {
                 if(f==fc[k])
                   {
                     goto exit7;
                   }
               }
            }
          for(j=i+1;j<=m/2;j++)
           {
             if(fc[j]==fc[i])
               {
                 g|=gc[j];
               }
           }
          XBYTE[P8255IC+fc[i]]=g;
          exit7: ;
        }
       for(k=0;k<18;k++)
        {
          a[k]=XBYTE[P8255IA+k];
          b[k]=XBYTE[P8255IB+k];
          c[k]=XBYTE[P8255IC+k];
        }
       for(k=0;k<18;k++)
         {
	   for(l=0;l<8;l++)
             {
	       pa[k][l]=_cror_(a[k],l)&0x01;
               pb[k][l]=_cror_(b[k],l)&0x01;
               pc[k][l]=_cror_(c[k],l)&0x01;
             }
         }
       for(k=0;k<18;k++)
         {
	   for(l=0;l<8;l++)
             {
	       if(pa[k][l]==1)
                 {
                  *u++=8*k+l+1;
                   n++;
                 }
             }
         }
       for(k=0;k<18;k++)
         {
	   for(l=0;l<8;l++)
             {
	       if(pb[k][l]==1)
                 {
                  *u++=8*k+l+145;
                   n++;
                 }
             }
         }
       for(k=0;k<18;k++)
         {
	   for(l=0;l<8;l++)
             {
	       if(pc[k][l]==1)
                 {
                  *u++=8*k+l+289;
                   n++;
                 }
             }
         }
       u=0x0600;
       r=0x0680;
       for(i=0;i<m;i++)
        {
          for(j=0;j<n;j++)
           {
             if(*(r+i)==*(u+j))
             goto exit8;
           }
          *v++=*(r+i);
           q++;
           exit8: ;
        }
       u=0x0600;
       v=0x0640;
       if(n>=q)
         {
           s+=d;
           for(i=0;i<q;i++)
            {
              *s++=*v;
              *v=0;
               v++;
               d++;
            }
           q=0;
         }
       else if(n<=q)
         {
           s+=d;
           for(i=0;i<n;i++)
            {
              *s++=*u;
              *u=0;
               u++;
               d++;
            }
           n=0;
         }
       d++;
     }
   s=0x01b0;
   u=0x0600;
   v=0x0640;
   if((n+q)<10)
     {
       s+=d;
       for(i=0;i<(n+q);i++)
        {
          *s++=(*u++)+(*v++);
        }
     }
   else if((n+q)>=10)
     {
       for(k=0;k<18;k++)
        {
          XBYTE[P8255CW+k]=0x80;
        }
       for(k=0;k<10;k++)
        {
          fa[k]=0;
          fb[k]=0;
          fc[k]=0;
          ga[k]=0;
          gb[k]=0;
          gc[k]=0;
        }
       for(i=0;i<(n+q)/2;i++)
        {
          e=(*u++)+(*v++);
          if(e<=144)
            {
              f=(e-1)/8;
              g=(e-1)%8;
              fa[i]=f;
              ga[i]=_crol_(0x01,g);
            }
          else if((e>144)&&(e<=288))
            {
              f=(e-145)/8;
              g=(e-145)%8;
              fb[i]=f;
              gb[i]=_crol_(0x01,g);
            }
          else if((e>144)&&(e<=288))
            {
              f=(e-289)/8;
              g=(e-289)%8;
              fc[i]=f;
              gc[i]=_crol_(0x01,g);
            }
        }
       for(i=0;i<(n+q)/2;i++)
        {
          f=fa[i];
          g=ga[i];
          if(i>=1)
            {
              for(k=0;k<=i-1;k++)
               {
                 if(f==fa[k])
                   {
                     goto exit9;
                   }
               }
            }
          for(j=i+1;j<=(n+q)/2;j++)
           {
             if(fa[j]==fa[i])
               {
                 g|=ga[j];
               }
           }
          XBYTE[P8255IA+fa[i]]=g;
          exit9: ;
        }
       for(i=0;i<(n+q)/2;i++)
        {
          f=fb[i];
          g=gb[i];
          if(i>=1)
            {
              for(k=0;k<=i-1;k++)
               {
                 if(f==fb[k])
                   {
                     goto exit10;
                   }
               }
            }
          for(j=i+1;j<=(n+q)/2;j++)
           {
             if(fb[j]==fb[i])
               {
                 g|=gb[j];
               }
           }
          XBYTE[P8255IB+fb[i]]=g;
          exit10: ;
        }
       for(i=0;i<(n+q)/2;i++)
        {
          f=fc[i];
          g=gc[i];
          if(i>=1)
            {
              for(k=0;k<=i-1;k++)
               {
                 if(f==fc[k])
                   {
                     goto exit11;
                   }
               }
            }
          for(j=i+1;j<=(n+q)/2;j++)
           {
             if(fc[j]==fc[i])
               {
                 g|=gc[j];
               }
           }
          XBYTE[P8255IC+fc[i]]=g;
          exit11: ;
        }
       for(k=0;k<18;k++)
        {
          a[k]=XBYTE[P8255IA+k];
          b[k]=XBYTE[P8255IB+k];
          c[k]=XBYTE[P8255IC+k];
        }
       for(k=0;k<18;k++)
         {
	   for(l=0;l<8;l++)
             {
	       pa[k][l]=_cror_(a[k],l)&0x01;
               pb[k][l]=_cror_(b[k],l)&0x01;
               pc[k][l]=_cror_(c[k],l)&0x01;
             }
         }
       for(k=0;k<18;k++)
         {
	   for(l=0;l<8;l++)
             {
	       if(pa[k][l]==1)
                 {
                  *w++=8*k+l+1;
                   h++;
                 }
             }
         }
       for(k=0;k<18;k++)
         {
	   for(l=0;l<8;l++)
             {
	       if(pb[k][l]==1)
                 {
                  *w++=8*k+l+145;
                   h++;
                 }
             }
         }
       for(k=0;k<18;k++)
         {
	   for(l=0;l<8;l++)
             {
	       if(pc[k][l]==1)
                 {
                  *w++=8*k+l+289;
                   h++;
                 }
             }
         }
       w=0x0580;
       u=0x0600;
       v=0x0640;
       for(i=0;i<n+q;i++)
        {
          for(j=0;j<h;j++)
           {
             if(*(u+i)+*(v+i)==*(w+j))
             goto exit12;
           }
          *z++=*(u+i)+*(v+i);
           p++;
           exit12: ;
        }
       s=0x01b0;
       w=0x0580;
       z=0x05c0;
       s+=d;
       for(i=0;i<h;i++)
        {
          *s++=*w++;
        }
       s++;
       for(i=0;i<p;i++)
        {
          *s++=*z++;
        }
     }
   while(1);
}

⌨️ 快捷键说明

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