} void kg()
{ un signed char b012=0;
b012 =PORTB; //读B 口
b012 &=0X07; //取低三位
if(PO RTB_PB3==1)
{
sw itch(b012)
{
case 7:spset=spsel[3]; // 正常速度
break;
case 6:
case 5:
case 3:
case 4:
case 2:
case 1:spset=spsel[1]; // 速度低二
break;
case 0:spset=spsel[0]; // 速度低三
break;
}
}
else
{
sw itch(b012)
{
case 7:spset=spsel[3]; // 正常速度
break;
case 6:
case 5:
case 3:spset=spsel[4]; // 速度高一
break;
case 4:
case 2:
case 1:spset=spsel[5]; // 速度高二
break;
case 0:spset=spsel[6]; // 速度高三
break;
}
}
} //*****************求绝对值函数*******************//
char absl(char i)
{
if(i>0) return i;
else
return (-i);
} //*******************延迟函数**********************//
void delay(unsigned long int a)
{
unsigned long int i;
for(i=a;i>0;i--);
}作者: 流水三千 时间: 2010-6-5 22:07
//************路径信息采集及舵机控制函数***********//
void routectr()
{ u nsigned char i,j,pth,middle;
in t lj1;
in t temp1;
un signed int temp2;
//*路径信息采集*//
pt h=PTH;
{
PTM =0x01; //第一组光电管工作
delay(DLT2); //延时
ro ut_o[0] =((pth &0X08)>>3);
ro ut_o[3] =PORTA_PA2;
ro ut_o[6] =((pth &0x04)>>2);
ro ut_o[9] =PORTA_PA3;
PTM =0x02; //第二组光电管工作
delay(DLT2); //延时
ro ut_o[1] =((pth &0X02)>>1);
ro ut_o[4] =PORTA_PA4;
ro ut_o[7] =(pth &0x01);
ro ut_o[10]=PORTA_PA5;
PTM =0x04; //第三组光电管
delay(DLT2); //延时
ro ut_o[2] =PORTA_PA0;
ro ut_o[5] =PORTA_PA6;
ro ut_o[8] =PORTA_PA1;
ro ut_o[11] =PORTA_PA7;
PTM=0x00;
//*路径信息加工处理*//
for(i=N-1;i>0;i--)
data1[i]=data1[i-1]; //平移结构体数组
for(i=0 ,data1[0].sensors=0,middle=0;i<12;i++)//计算sensors 值
{
if(rout_o[ i]==0)
{
da ta1[0].sensors++;
if(i>= 3&&i<=8)
middle++;
}
}
for(i=0;i<5;i++) //计算data2 结构体变量有关值
data2.area[i][0]=0;
da ta2.area[0][1]=0;
for(i=1 ,data2.change=0;i<12;i++)
{
if(rout_o[ i]!=rout_o[i-1])
{
dat a2.area[data2.change][2]=i-1;
data2.change++;
data2.area[data2.change][1]=i;
}
}
da ta2.area[data2.change][2]=11;
data1[0].change=data2.change;
sw itch(data2.change)
{
c ase 0:if(rout_o[0]==0)
{
data2.blarnum=1;
data2.blnum=12;
data2.blmiddle=6;
}
else
{
data2.blarnum=0;
data2.blnum=0;
data2.blarnum=12;
}
break;
c ase 1:data2.blarnum=1;
if(rout_o[0]==0)
{
data2.blnum=data2.area[0][0];
data2.blmiddle=data2.area[0][2]>>1;
}
else
{
data2.blnum=data2.area[1][0];
data2.blmiddle=(data2.area[1][1]+11)>>1;
}
break;
c ase 2:if(rout_o[0]==0)
{
data2.blarnum=2;
if(data2.area[0][0]>data2.area[2][0])
dat a2.blnum=data2.area[0][0];
else
dat a2.blnum=data2.area[2][0];
}
else
{
data2.blarnum=1;
data2.blnum=data2.area[1][0];
}
break;
c ase 3:data2.blarnum=2;
if(rout_o[0]==0)
{
if(data2.area[0][0]>data2.area[2][0])
dat a2.blnum=data2.area[0][0];
else
dat a2.blnum=data2.area[2][0];
}
else
{
if(data2.area[1][0]>data2.area[3][0])
dat a2.blnum=data2.area[1][0];
else
dat a2.blnum=data2.area[3][0];
}
break;
c ase 4:if(rout_o[0]==0)
{
data2.blarnum=3;
if(data2.area[0][0]>data2.area[2][0])
dat a2.blnum=data2.area[0][0];
else
dat a2.blnum=data2.area[2][0];