红外循迹小车c程序(舵机小车)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<reg52.h>
sbit servo=P2^5;
uint control=12;
uint jishu;
uint pianchu;
sbit zuo11=P3^4; //为0为左边正转
sbit zuo12=P3^5; //为1为左边正转
sbit you21=P3^6; //为1为右边正转
sbit you22=P3^7; //为0为右边正转
uint sp,speed=3;
uint ji=1,guang,bi; //判断循迹寻光变量
uint stop1,stop2,stop3;
void delay(uint a)
{
uint b,c;
for(b=a;b>0;b--)
for(c=115;c>0;c--);
}
void qianjin() //可以当做延时函数来用{
// P3=0x0f;
// delay(speed);
P3=0xf9;
}
void initial_T0()
{
TMOD=0x21;
TH1=0x8c;
TL1=0x8c;
EA=1;
ET1=1;
TR1=1;
}
void xunji()
{
if(P1==0x00)
{
qianjin();
}
// if(P1==0x20)
// {
// //加速
// qianjin();
// speed=2;
// qianjin();
// qianjin();
// }
if(P1==0x10)
{
//左转
qianjin();
control+=1;
qianjin();
while(P1!=0x20)
{
if(P1==0x08)
{
//大角度左转
qianjin();
qianjin();
control+=1;
while(P1!=0x10)
{
// if(P1==0x00) //偏出跑道,小车停止// {
// speed=10000;
// }
pianchu++;
if(pianchu>=20000)
{
break;
}
}
control-=1;
qianjin();
qianjin();
}
pianchu++;
if(pianchu>=20000)
{
break;
}
}
pianchu=0;
control-=1;
qianjin();
qianjin();
}
if(P1==0x40)
{
//右转
qianjin();
control-=1;
qianjin();
while(P1!=0x20)
{
if(P1==0x80)
{
//大角度右转
qianjin();
control-=1;
qianjin();
while(P1!=0x40)
{
// if(P1==0x00) //偏出跑道,小车停止// {
// speed=10000;
// }
pianchu++;
if(pianchu>=20000)
{
break;
}
}
qianjin();
control+=1;
qianjin();
}
pianchu++;
if(pianchu>=20000)
{
break;
}
}
pianchu=0;
qianjin();
control+=1;
qianjin();
}
}
void main()
{
initial_T0();
P1=0xf8;
while(1)
{
stop1=P1;
if(stop1==stop2)
{
stop3++;
}
else
{
stop3=0;
}
xunji();
if(P1==0x80||P1==0x08||stop3>10000)
{
P3=0x00;
while(1);
}
stop2=P1;
}
}
void T0_waytwo() interrupt 3 {
if(jishu<control)
servo=1;
else
servo=0;
jishu++;
jishu=jishu%160;
}。