📄 kongwen.c
字号:
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;
}
go_stop=2; //判断是否有go,stop参数,没有这两个函数中的一个则go_stop=2
lookresult=strstr1(data_rx,"go"); //开始查找go参数,
if(lookresult!=0)
{
go_stop=1; //如果有go,则标志为1,运行
}
lookresult=strstr1(data_rx,"stop"); //开始查找go参数,
if(lookresult!=0)
{
go_stop=0; //如果存在,则标志为0,停止
}
if(go_stop==1) //如果go_stop=1,执行命令,
{
switch(robot1.manner)//运行方式,=1,宏动前进;=2,宏动后退;=3,顺时针旋转;=4,逆时针旋转;=5,微动X轴;
{
T4CON = 0; //定时器4停止计数
case 1: //宏动前进
{
set_v_out(robot1.v_out);
}
break;
case 2:
{
solid=0;
}
break;
case 3:
{
frequency1=robot1.speed_left;
phase_add1 = frequency1 * PHASE_PRECISION / SAMPLE_RATE_DAC;
output_waveform = res; //
clr_datarx();
T4CON |= 0x04; // 启动定时器4
}
break;
case 4:
{
frequency1=robot1.speed_left;
phase_add1 = frequency1 * PHASE_PRECISION / SAMPLE_RATE_DAC;
output_waveform = vol; //
clr_datarx();
T4CON |= 0x04; // 启动定时器4
}
break;
case 5: //=5,
{
frequency1=robot1.speed_left;
phase_add1 = frequency1 * PHASE_PRECISION / SAMPLE_RATE_DAC;
output_waveform = tem; //
clr_datarx();
T4CON |= 0x04; // 启动定时器4
}
break;
case 6: //=6,微动X轴反向;
{
frequency1=robot1.speed_left;
phase_add1 = frequency1 * PHASE_PRECISION / SAMPLE_RATE_DAC;
output_waveform = adjust; // 选择 尺蠖蠕动方式X轴负向
clr_datarx();
T4CON |= 0x04; // 启动定时器4
}
break;
case 7: //=7,微动Y轴正向;
{
frequency1=robot1.speed_right;
micro_init_dac1();
phase_add1 = frequency1 * PHASE_PRECISION / SAMPLE_RATE_DAC;
clr_datarx();
T4CON |= 0x04; // 启动定时器4
}
break;
case 8: //=8,
{
char i=0;
unsigned char qw_h=0;
for(i=2;i<9;i++)
{
FLASH_PageErase(i,1);
}
FLASH_ByteWrite(2,(unsigned char)robot2.manner,1);
FLASH_ByteWrite(3,(unsigned char)robot2.speed_left,1);
FLASH_ByteWrite(4,(unsigned char)robot2.speed_right,1);
FLASH_ByteWrite(5,(unsigned char)robot2.speed_rotate,1);
FLASH_ByteWrite(6,(unsigned char)robot2.robot_position,1);
FLASH_ByteWrite(7,(unsigned char)robot2.base_value,1);
FLASH_ByteWrite(8,(unsigned char)robot2.delay_value,1);
data_tx="已经存储,请看是否正确";
Tdata(data_tx);
Tdatar(13);
Tdatar(10);
for(i=2;i<9;i++)
{
qw_h=FLASH_ByteRead(i,1);
Tdata(mysprint(qw_h,0));
data_tx=",";
Tdata(data_tx);
}
Tdatar(13);
Tdatar(10);
clr_datarx();
}
break;
case 9: //
{
char i=0;
unsigned char qw_h=0;
data_tx="参数列表";
Tdata(data_tx);
Tdatar(13);
Tdatar(10);
data_tx="m ";
Tdata(data_tx);
data_tx="sl ";
Tdata(data_tx);
data_tx="sr ";
Tdata(data_tx);
data_tx="so ";
Tdata(data_tx);
data_tx="sp ";
Tdata(data_tx);
data_tx="bv ";
Tdata(data_tx);
data_tx="dt ";
Tdata(data_tx);
Tdatar(13);
Tdatar(10);
for(i=2;i<9;i++)
{
qw_h=FLASH_ByteRead(i,1);
Tdata(mysprint(qw_h,0));
data_tx=" ";
Tdata(data_tx);
}
Tdatar(13);
Tdatar(10);
clr_datarx();
}
break;
case 10: //
{
test_value_set=(unsigned long)robot1.speed_rotate*robot1.robot_position;
}
break;
case 11: //=11,球下俯;
{
clr_datarx();
return 0;
}
break;
case 12: //=12,球上仰
{
clr_datarx();
return 0;
}
break;
case 13: //=13,二极管亮;
{
data_tx="ledon";
Tdata(data_tx);
Tdatar(13);
Tdatar(10);
Tdata(mysprint(robot1.manner,0));
Tdatar(13);
Tdatar(10);
Tdata(mysprint(robot1.speed_left,0));
Tdatar(13);
Tdatar(10);
Tdata(mysprint(robot1.speed_right,0));
Tdatar(13);
Tdatar(10);
Tdata(mysprint(robot1.speed_rotate,0));
Tdatar(13);
Tdatar(10);
Tdata(mysprint(robot1.robot_position,0));
Tdatar(13);
Tdatar(10);
Tdata(mysprint(robot1.base_value,0));
Tdatar(13);
Tdatar(10);
Tdata(mysprint(robot1.delay_value,0));
Tdatar(13);
Tdatar(10);
clr_datarx();
}
break;
default:
{
clr_datarx();
return 0; //如果manner参数不是预先定义字符,直接返回
}
}
}
else //如果go_stop=0或者2,不执行命令,直接返回
{
T4CON = 0; //定时器4停止计数
repeat_value=0;
clr_datarx();
return 0;
}
}
//采集电压
float get_voltage(void)
{
long temperature=0;
float qq_aaa=0.0,bbb=0,ccc=0;
unsigned int i=0,j=0,k=0,m=0;
for(i=0;i<501;i++)
{
AD0INT = 0; // clear conversion complete indicator
AD0BUSY = 1; // initiate conversion
while (AD0INT == 0); // wait for conversion complete
temperature = ADC0>>4; // read ADC0 data
result1[i]=(float)temperature/4096*2.451;
}
for(i=1;i<501;i++)
{
qq_aaa=qq_aaa+result1[i];
}
qq_aaa=qq_aaa/500;
for(i=1;i<501;i++)
{
bbb=result1[i]-qq_aaa;
bbb=fabs(bbb);
if(bbb<0.15)
{
ccc=ccc+result1[i];
j++;
}
}
qq_aaa=ccc/j;
return qq_aaa*1000*robot1.base_value/100;
}
void delay_us_time(unsigned int time_value)
{
int hi,hj;
for (hi=0; hi<time_value; hi++)
{
for (hj=0; hj < 10; hj++) ;
}
}
//测量铂电阻
float get_bo_res(void)
{
long res_temp=0;
float qq_aaa=0.0,bbb=0,ccc=0,res_u2=0.0,res_u1=0.0;
unsigned int i=0,j=0,k=0,m=0,h=0;
adc0_single_init(5);
for(i=0;i<501;i++)
{
AD0INT = 0; // clear conversion complete indicator
AD0BUSY = 1; // initiate conversion
while (AD0INT == 0); // wait for conversion complete
res_temp = ADC0>>4; // read ADC0 data ???????long
res_u1=(float)res_temp/4096*2.451;
result1[i]=499.55*(res_u1-0.5)/0.5;
/* if(res_u1<=1.30)
{
result1[i]=499.55*(res_u1-0.5)/0.5;
}
else
{
adc0_single_init(4);
AD0INT = 0; // clear conversion complete indicator
AD0BUSY = 1; // initiate conversion
while (AD0INT == 0); // wait for conversion complete
res_temp = ADC0>>4; // read ADC0 data ???????long
res_u2=(float)res_temp/4096*2.451;
result1[i]=499.55*(res_u1-res_u2)/res_u2;
adc0_single_init(5);
}*/
}
for(i=1;i<501;i++)
{
qq_aaa=qq_aaa+result1[i];
}
qq_aaa=qq_aaa/500; //average value
return qq_aaa*robot1.base_value/100;
}
//判断物品
unsigned char get_id(void)
{
return 1;
}
unsigned int get_init_voltage(void)
{
unsigned char w=0;
int temp_voltage=0;
for(w=0;w<9;w++)
{
result[w]=(int)get_voltage();
temp_voltage=temp_voltage+result[w];
}
temp_voltage=temp_voltage/9;
return temp_voltage;
}
void lcd_clear(void) //清除显示屏幕,把DDRAM位址计数器调整为"00H"
{
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
P7=0x01;
delay_time(10);
lcd_en1_lach=0;
}
void lcd_bit_add_reset(void) //把DDRAM位址计数器调整为"00H",游标回原点,该功能不影响显示DDRAM
{
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
P7=0x02;
delay_time(10);
lcd_en1_lach=0;
}
void lcd_add_reset(void) //把DDRAM位址计数器调整为"00H",游标回原点,该功能不影响显示DDRAM功能:
{ //执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由Z地址计数器控制的,
//该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。
//Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。
//指定在资料的读取与写入时,设定游标移动方向及指定显示的移位
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -