📄 kongwen120.c
字号:
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 + -