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

📄 kongwen120.c

📁 对8051cf020的温度控制和液晶显示急串口上传的代码
💻 C
📖 第 1 页 / 共 5 页
字号:
     return array;     
}
//去除字符串两边的空格
char * trim(char * str)
{
     unsigned char commandlen;
     unsigned char i=1;     
     commandlen=strlen1(str);
     for(i=0;(*(str+i)==32)&&(i<commandlen);i++);
     return (str+i);
}
//相当于c语言中的atoi函数
char atoii(char chr)
{
      switch (chr)
      {
       case 48:
        return 0;   
       case 49:
        return 1;
       case 50:
        return 2;
       case 51:
        return 3;
       case 52:
        return 4;
       case 53:
        return 5;
       case 54:
        return 6;
       case 55:
        return 7;
       case 56:
        return 8;
       case 57:
        return 9;
       default:
        return 10;
     }      
}
//相当于c语言中的atof函数
float atoff(char * c)
{  
   char i=0,j=0,dot=0;
   char flag=0; float xdata t3;    
   unsigned char flag1=0;
   t3=0;
   if(strlen1(c)==0)  return (atoffERROR);  //*******含有非法字符**************
   if(c[0]==45) flag=1; 
   for(i=(flag>0)?1:0;;i++)
   {
        if(c[i]==0||c[i]==0x20||c[i]==0xd||c[i]==44) break;
        if((c[i]>='0')&&(c[i]<='9')||(c[i]=='.'))
        {
             if(flag1) flag1++;
             if(c[i]=='.') flag1++;
             else 
             {
                 t3*=10.0;
                 t3+=(float)(c[i]-0x30);
             }
         }   
         else {return (atoffERROR);}  //*******含有非法字符**************
    }       
    for(i=1;i<flag1;i++) t3/=10;
    if(flag) t3=0-t3;
    return t3;
}
//判断串口接受字符是否为预定义命令
char selfun()
{   
       char bbb=0;   
       clr_datarx();
       return bbb;
}
//字符串查找命令//相当于c语言中的strstr函数
char * strstr1(char *s1,char *s2)
{
    unsigned char i=0,j=1,flag=1;   
    while (*(s1+i)!=0)
    {          
          if(*(s1+i)==*s2)
          { 
              j=1;
              flag=1;
              while ((*(s2+j)!=0)&&(*(s1+i+j)!=0)&&flag)
              {
                  if(*(s1+i+j)!=*(s2+j))
                  {
                     flag=0;
                  }
                  j++;  
              }
              if((flag==1)&&(*(s2+j)==0)) return (s1+i);            
          }
          i++;
    }
    return 0;
}
//字符串长度命令//相当于c语言中的strlen函数
char strlen1(char * s1)
{
     unsigned char i=0;
     while (*(s1+i)!=0)
     {
         i++;
     }
     return i;
}
//字符串合并命令//相当于c语言中的strcat函数
char * strcat1(char *s1,char *s2)
{
     unsigned char i=0,j=0,k;
     i=strlen1(s1);
     for(j=0;j<i;j++) array[j]=s1[j];
     k=strlen1(s2)+i;
     for(j=i;j<k;j++) array[j]=s2[j-i];
     return s1;
}
//清除串口接收数组
void clr_datarx()
{
       unsigned char jj;
       for(jj=0;jj<130;jj++) data_rx[jj]=0;
}
//系统内部自检
char hwtanalyze(void)    //系统内部自检
{
   return 1; //测量温度
}


//接收中断
void UART0_ISR (void) interrupt 4 using 3
{
   unsigned char the_char;
   if (RI0 == 1)
   {                            // handle receive function
      RI0 = 0;                  // clear RX complete indicator   ||(the_char==13))
      the_char=SBUF0;
	  if((uartcount==0)&&((the_char==' ')||(the_char==10)))
        {      
	//	    T4CON |= 0x04;                // 启动定时器4          
            return;
         }
      if(the_char==8)//*******退格
        {
           if(uartcount>0) 	data_rx[(--uartcount)]=0;
	//	   T4CON |= 0x04;                // 启动定时器4
           return;
        }
      else
        {
           data_rx[uartcount]=the_char;   //数据接收,存至Data数组中
		   
           if(data_rx[uartcount++]==13)  //回车符13   ZN122
            {
			  T4CON = 0;                //定时器4停止计数
              uartcount=0;
              uartflag=1;      
            }          
        }
   } 
}
//浮点数到ascii的转换
char *mysprint(float discode,unsigned char a1)
 {
   unsigned int num=13;
   char ret[15];
   long temp; long div=1;
   unsigned char kk,ii;
   unsigned char flag=0;
   for(ii=0;ii<a1;ii++)
   discode*=10;
   temp=discode;
   ret[14]=0;
   if(temp<0)  {flag=1;temp=0-temp;}
   for(ii=0;ii<a1;ii++)
   div*=10;
   for(ii=0;ii<a1;ii++)
    {
      kk=(temp%10);
      temp/=10;
      ret[num--]='0'+kk;
    }
  if(a1)  ret[num--]='.' ;
  kk=(temp%10);
  temp/=10;
  ret[num--]='0'+kk;
  while(1)
    {
       if(temp==0) break;
       kk=(temp%10);
       temp/=10;
       ret[num--]='0'+kk;
    }
  if(flag)  ret[num--]='-';
  return  ret+num+1;
 }


char robot_an()
{
   lookresult=strstr1(data_rx,"m");  //开始查找manner参数,
      if(lookresult==0)              //如果没有则采用上一次设定结果
        {
           robot1.manner=robot2.manner;
        }
      else                          
        {         
           lookresult1=strstr1(lookresult,",");            //有则寻找m后边的","
           if (lookresult1==0)
             {
                clr_datarx();                              //如果没有“,”,则返回,数组清零
                return 0;   //error
             }        
            lookresult=lookresult+1;
            lookresult=trim(lookresult);
            strmid(lookresult,0,lookresult1-lookresult);    
            robot1.manner=atoff(array);                   //计算manner参数   
			if((robot1.manner<=0)|(robot1.manner>30))     //判别参数是否异常
			  {
			     clr_datarx();
			     return 0;                                //异常直接返回
			  }
            else                                          //不异常,备份数据
			  {
			    robot2.manner=robot1.manner;
			  }
         }       
     lookresult=strstr1(data_rx,"sl");  //开始查找sl参数,
         if(lookresult==0)
         {
             robot1.speed_left=robot2.speed_left;            //如果没有则采用上一次设定结果
         }
         else
         {
             lookresult1=strstr1(lookresult,",");
             if (lookresult1==0)
             {
                clr_datarx();
                return 0;   //error                           //如果没有“,”,则返回,数组清零
             }
             lookresult=lookresult+2;
             lookresult=trim(lookresult);
             strmid(lookresult,0,lookresult1-lookresult);
             robot1.speed_left=atoff(array);   
			 if((robot1.speed_left<=0)|(robot1.speed_left>950))    //判别参数是否异常
			  {
			     clr_datarx();
			     return 0;
			  }
             else
			   {
                  robot2.speed_left=robot1.speed_left;
			   }
         }
     lookresult=strstr1(data_rx,"sr");  //开始查找sr___right参数,
         if(lookresult==0)
         {
             robot1.speed_right=robot2.speed_right;            //如果没有则采用上一次设定结果
         }
         else
         {
             lookresult1=strstr1(lookresult,",");
             if (lookresult1==0)
             {
                clr_datarx();
                return 0;   //error                           //如果没有“,”,则返回,数组清零
             }
             lookresult=lookresult+2;
             lookresult=trim(lookresult);
             strmid(lookresult,0,lookresult1-lookresult);
             robot1.speed_right=atoff(array); 
			 if((robot1.speed_right<=0)|(robot1.speed_right>950))    //判别参数是否异常
			  {
			     clr_datarx();
			     return 0;
			  }
			 else
			   {
			      robot2.speed_right=robot1.speed_right;
			   } 
          }
     lookresult=strstr1(data_rx,"so");  //开始查找so____rotate参数,
         if(lookresult==0)
         {
             robot1.speed_rotate=robot2.speed_rotate;            //如果没有则采用上一次设定结果
         }
         else
         {
             lookresult1=strstr1(lookresult,",");
             if (lookresult1==0)
             {
                clr_datarx();
                return 0;   //error                           //如果没有“,”,则返回,数组清零
             }
             lookresult=lookresult+2;
             lookresult=trim(lookresult);
             strmid(lookresult,0,lookresult1-lookresult);
             robot1.speed_rotate=atoff(array); 
			 if((robot1.speed_rotate<=0)|(robot1.speed_rotate>950))    //判别参数是否异常
			  {
			     clr_datarx();
			     return 0;
			  } 
             else
			   {
			      robot2.speed_rotate=robot1.speed_rotate;
			   }
          }
     lookresult=strstr1(data_rx,"sp");  //开始查找sp____position参数,
         if(lookresult==0)
         {
             robot1.robot_position=robot2.robot_position;            //如果没有则采用上一次设定结果
         }
         else
         {
             lookresult1=strstr1(lookresult,",");
             if (lookresult1==0)
             {
                clr_datarx();
                return 0;   //error                           //如果没有“,”,则返回,数组清零
             }
             lookresult=lookresult+2;
             lookresult=trim(lookresult);
             strmid(lookresult,0,lookresult1-lookresult);
             robot1.robot_position=atoff(array);  
			 robot2.robot_position=robot1.robot_position;
          }
     lookresult=strstr1(data_rx,"bv");  //开始查找base_value参数,
         if(lookresult==0)
         {
             robot1.base_value=robot2.base_value;            //如果没有则采用上一次设定结果
         }
         else
         {
             lookresult1=strstr1(lookresult,",");
             if (lookresult1==0)
             {
                clr_datarx();
                return 0;   //error                           //如果没有“,”,则返回,数组清零
             }
             lookresult=lookresult+2;
             lookresult=trim(lookresult);
             strmid(lookresult,0,lookresult1-lookresult);
             robot1.base_value=atoff(array);  
			 robot2.base_value=robot1.base_value;
          }

      lookresult=strstr1(data_rx,"dt");  //开始查找delay_value参数,
         if(lookresult==0)
         {
             robot1.delay_value=robot2.delay_value;            //如果没有则采用上一次设定结果
         }
         else
         {
             lookresult1=strstr1(lookresult,",");
             if (lookresult1==0)
             {
                clr_datarx();
                return 0;   //error                           //如果没有“,”,则返回,数组清零
             }
             lookresult=lookresult+2;
             lookresult=trim(lookresult);
             strmid(lookresult,0,lookresult1-lookresult);
             robot1.delay_value=atoff(array);  
			 robot2.delay_value=robot1.delay_value;
          }
      
	  lookresult=strstr1(data_rx,"vo");  //开始查找v_out参数,
         if(lookresult==0)
         {
             robot1.v_out=robot2.v_out;            //如果没有则采用上一次设定结果
         }
         else
         {
             lookresult1=strstr1(lookresult,",");
             if (lookresult1==0)
             {
                clr_datarx();
                return 0;   //error                           //如果没有“,”,则返回,数组清零
             }
             lookresult=lookresult+2;
             lookresult=trim(lookresult);
             strmid(lookresult,0,lookresult1-lookresult);
             robot1.v_out=atoff(array);  
			 robot2.v_out=robot1.v_out;
          }
      
	   lookresult=strstr1(data_rx,"k0");  //开始查找k0参数,
         if(lookresult==0)
         {
             robot1.res0k=robot2.res0k;            //如果没有则采用上一次设定结果
         }
         else
         {
             lookresult1=strstr1(lookresult,",");
             if (lookresult1==0)
             {
                clr_datarx();
                return 0;   //error                           //如果没有“,”,则返回,数组清零
             }
             lookresult=lookresult+2;
             lookresult=trim(lookresult);
             strmid(lookresult,0,lookresult1-lookresult);
             robot1.res0k=atoff(array);  
			 robot2.res0k=robot1.res0k;
          }
        
		lookresult=strstr1(data_rx,"b0");  //开始查找b0参数,
         if(lookresult==0)
         {
             robot1.res0b=robot2.res0b;            //如果没有则采用上一次设定结果
         }
         else
         {
             lookresult1=strstr1(lookresult,",");
             if (lookresult1==0)
             {
                clr_datarx();
                return 0;   //error                           //如果没有“,”,则返回,数组清零
             }
             lookresult=lookresult+2;
             lookresult=trim(lookresult);
             strmid(lookresult,0,lookresult1-lookresult);
             robot1.res0b=atoff(array);  
			 robot2.res0b=robot1.res0b;
          }

      lookresult=strstr1(data_rx,"k1");  //开始查找k1参数,
         if(lookresult==0)
         {
             robot1.res1k=robot2.res1k;            //如果没有则采用上一次设定结果
         }
         else
         {
             lookresult1=strstr1(lookresult,",");
             if (lookresult1==0)
             {
                clr_datarx();
                return 0;   //error                           //如果没有“,”,则返回,数组清零
             }
             lookresult=lookresult+2;
             lookresult=trim(lookresult);
             strmid(lookresult,0,lookresult1-lookresult);
             robot1.res1k=atoff(array);  
			 robot2.res1k=robot1.res1k;
          }

      lookresult=strstr1(data_rx,"b1");  //开始查找b1参数,
         if(lookresult==0)
         {
             robot1.res1b=robot2.res1b;            //如果没有则采用上一次设定结果
         }
         else
         {
             lookresult1=strstr1(lookresult,",");
             if (lookresult1==0)

⌨️ 快捷键说明

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