智能小车循迹(舵机版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#define uchar unsigned char
#define uint unsigned int
void scan();
void init_time0();
void Direction(uchar jd);
void DELAY(uint xms);
void pwm_ENA(uchar k);
sbit l_1=P1^0;
sbit l_2=P1^1;
sbit l_3=P1^2;
sbit cen=P1^3;
sbit r_1=P1^6;
sbit r_2=P1^5;
sbit r_3=P1^4;
sbit duoji=P2^7;
sbit pwm1=P2^0;
sbit pwm2=P2^1;
uchar count,cycle,jd;
uchar flag=0;
void main()
{
DELAY(3000);
P1=0x00;
cycle=0;
count=0;
jd=12;
init_time0();
while(1)
{
scan();
}
}
void scan()
{
if(cen==0) //中
{
flag=0;
}
else if(r_1==0) //右1
{
flag=1;
}
else if(r_2==0) //右2
{
flag=2;
}
else if(r_3==0) //右3 P14
{
flag=3;
}
else if(l_1==0) //左1
{
flag=4;
}
else if(l_2==0) //左2 P11
{
flag=5;
}
else if(l_3==0) //左3 P12
{
flag=6;
}
switch(flag)
{
case 0: {Direction(12);pwm_ENA(5);break;} // P13
case 1: {Direction(15);pwm_ENA(3);break;} // delay(1);;pwm_ENA1(1) P16
case 2: {Direction(14);pwm_ENA(3);break;} //
P15
case 3: {Direction(13);pwm_ENA(4);break;} //run()run() P14
case 4: {Direction(9);pwm_ENA(3);break;} // delay(1) pwm_ENA1(1); P10
case 5: {Direction(10);pwm_ENA(3);break;} //
P11
case 6: {Direction(11);pwm_ENA(4);break;} // run() P12
}
}
void init_time0()
{
TMOD=0x01; //定时器方式1
TH0=(65536-100)/256; //定时0.1ms
TL0=(65536-100)%256;
IE=0x82;
TR0=1;
}
void Dreaction(uchar jd)
{
if(cycle duoji=1; //确定小于,duoji输出高电平 else duoji=0; //大于则输出低电平 } void DELAY(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=125;j>0;j--); } void pwm_ENA(uchar k) { if(count<=k) { pwm1=0; } else if(count>k&&count<13) { pwm1=1; } else if(count==13) count=0; } void Time0_ISP(void) interrupt 1 //定时器中断 { TH0=(65536-100)/256; TL0=(65536-100)%256; count++; cycle+=1; //0.1ms次数加1 cycle=cycle%200; //次数始终保持为200即保持周期为20ms }