void check_stop()//检测终点线,我用十三个对管,八个管停车状态自己分析
{
uchar start_flag;
if((le3&&le4)&&(!le1&&!le6)&&mid&&(ri3&&ri4)&&(!ri1&&!ri6))
start_flag=1;
else if((le2&&le3)&&!le5&&(le6&&mid)&&(ri3&&ri4)&&(ri1&&ri6))
start_flag=1;
else if((le2&&le3)&&le6&&(!le5&&!mid)&&(ri3&&ri4)&&(ri1&&ri6))
start_flag=1;
else if((le2&&le3)&&!le4&&(le5&&le6)&&!mid&&(ri5&&ri4)&&ri1)
start_flag=1;
else if((le2&&le3)&&(!le4&&!le6)&&le5&&!mid&&!ri4&&(ri1&&ri2))
start_flag=1;
else if(le2&&!le3&&(le4&&mid)&&(le5&&le6)&&(ri1&&ri2))
start_flag=1;
else if((le3&&le4)&&le6&&(ri6&&mid)&&(ri2&&ri3)&&!ri5)
start_flag=1;
else if((le5&&le4)&&(!le1&&!mid)&&ri6&&(ri2&&ri3)&&!ri5)
start_flag=1;
else if((le5&&le6)&&(!le1&&!le2)&&ri5&&ri2&&!ri4)
start_flag=1;
else if((le5&&le4)&&(!le1&&!le2)&&(!mid||!ri6)&&ri5&&(ri1&&ri2)&&!ri4)
start_flag=1;
else start_flag=0;
if(start_flag)
{
count++;
delay2(50);
if (count==1)
{P0=0xc0;}
else if(count==2)
{P0=0xf9;}
else if(count==3)
{
count=0;
finish=1;
P0=0xa4;//加led显示只是为了方便调试,两圈之后停车
}
else
finish=0;
}
if(finish)
{
ENA=0;
TR1=0;//关定时器1,驱动电机停转
}
}
void xunji()//循迹函数,读取光电管状态
{
if(!le1&&!le2&&!le3&&!le4&&!le5&&!le6&&mid&&!ri6&&!ri5&&!ri4&&!ri3&&!ri2&&!ri1)
{
dj(109);
hhig(39);
}
else if(le6&&mid&&!ri6&&!ri5&&!ri4&&!ri3&&!ri2&&!ri1)
{
dj(114);
hhig(35);
}
。
。
。//分析八个光电管状态,看你的电路检测到黑线输出1或者是0
else
{
dj(109);//舵机归中
hhig(25);
}
}
void main()
{
init();
while(1)
{
check_stop();
if(bz==0)//检测到障碍,。。。
{
back(18);
}
}
}
void timer0() interrupt 1//产生pwm信号控制舵机,周期20ms
{
TH0=0xb1;
TL0=0xe0;
xunji();
}
void timer1() interrupt 3//产生pwm信号控制驱动电机速度
{
TH1=(65536-100)/256;
TL1=(65536-100)%256;
i++;
if(i<=pro)
{
ENA=1;
}
else
{
ENA=0;
}
if(i==40)
{
ENA=~ENA;
i=0;
}
}
你好!可以实现这样的功能,是有实物还是用仿真做?