智能小车循迹(舵机版)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 }

相关文档
最新文档