智能小车仿真程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1

#include

#define uchar unsigned char

#define uint unsigned int

// * * * * * * * * * * * * * * * * * * * * * 第一部分 S t a r t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

sbit IN1=P1^0; // 以下是电机驱动芯片 L 2 9 8 管脚位声明sbit PWM1=P1^1;

sbit IN2=P1^2;

sbit IN3=P1^3;

sbit PWM2=P1^4;

sbit IN4=P1^5;

sbit RPR3=P1^6; // 此处是传感器 R P R 2 2 0 管脚位声明

sbit RPR4=P1^7;

sbit RPR1=P2^0;

sbit RPR2=P2^1;

sbit bz1=P0^0;//避障1

sbit bz2=P0^1; //避障2

sbit A=P3^2; //默认为遥控避障工作模式,按下A键后小车变换为循迹避障模式sbit B=P0^3;// 按下B键不放,小车前进

sbit C=P0^4;// 按下C键不放,小车左转弯

sbit D=P0^5;// 按下D键不放,小车右转弯

sbit led=P0^7;

int n=1;

// * * * * * * * * * * * * * * * * * * * * * 第一部分 E n d * * * * * * * * * * * * * * * * * * * * * * * * * *

// * * * * * * * * * * * * * * * * * * * * * 第二部分子函数定义 S t a r t * * * * * * * * * * * * /******************************** *延时函数************************************* **/

void timer(unsigned int t) //中断计时

{

unsigned int i;

for(i=0;i

{

TMOD=0X10;

TH0=0x3C;

TL0=0xB0;

TR1=1;

while(!TF1);

TR1=0;

}

}

int0()interrupt 0

{

n=n+1; //默认遥控功能

if(n%2==0)

{

led=0;

}

else led=1;

EA=1;

EX0=1;

IT0=1;

}

main()

{

EX0=1;

IT0=1;

while(1)

{

while(n%2==1)

{

if(A==1) break;

if(A==0&&B==1&&bz1==1) {

IN1=0,IN2=1,IN3=0,IN4=1; PWM1=1;

PWM2=1;

timer(100); //5S

PWM1=0;

PWM2=0;

timer(100); //5S

}

i f(A==0&&C==1&&bz1==1)

{

IN1=0,IN2=1,IN3=0,IN4=1; PWM1=0;

PWM2=1;

timer(50);

PWM1=0;

PWM2=1;

timer(50);

PWM1=0;

PWM2=0;

timer(10);

}

i f(A==0&&D==1&&bz1==1)

{

IN1=0,IN2=1,IN3=0,IN4=1; PWM1=1;

timer(50);

PWM1=1;

PWM2=0;

timer(50);

PWM1=0;

PWM2=0;

timer(10);

}

if(A==0&&bz1==0)

{

unsigned int k=0;

IN1=0,IN2=1,IN3=1,IN4=0;

f or(k=0;k<=30;k++)

{

PWM1=1;

PWM2=1;

timer(25);

PWM1=0;

PWM2=0;

timer(25);

}

}

}

while(n%2==0)

{

if(A==1) break;

if(A==0&&bz1==1&&((RPR4==0&&RPR3==0&& RPR1==0&&RPR2==0)

|(RPR1==0&&RPR2==1&&RPR3==1&&RPR4==0) ))// 未检测到黑线,小车继续前进

{

IN1=0,IN2=1,IN3=0,IN4=1;

PWM1=1;

timer(100);

PWM1=0;

PWM2=0;

timer(400);

}

if(A==0&&bz1==1&&RPR1==0&&RPR2==1&&RP R3==0&&RPR4==0) // 仅左轮检测到黑线,小车向左转弯

{

IN1=0,IN2=1,IN3=0,IN4=1;

PWM1=1;

PWM2=1;

timer(50);

PWM1=0;

PWM2=1;

timer(50);

PWM1=0;

PWM2=0;

timer(400);

}

if(A==0&&bz1==1&&RPR1==0&&RPR2==0&&RP R3==1&&RPR4==0) // 仅右轮检测到黑线,小车向右转弯未检测到障碍物

{ IN1=0,IN2=1,IN3=0,IN4=1;

PWM1=1;

PWM2=1;

timer(50);

PWM1=1;

PWM2=0;

timer(50);

PWM1=0;

timer(400);

}

if(A==0&&bz1==1&&RPR4==1&&RPR3==0&&RP R1==0&&RPR2==0) // 右轮最外围检测到黑线向右大转弯未检测到障碍物

{

IN1=0,IN2=1,IN3=0,IN4=1;

PWM1=1;

PWM2=1;

timer(50);

PWM1=1;

PWM2=0;

timer(100);

PWM1=0;

PWM2=0;

timer(50);

}

if(A==0&&bz1==1&&RPR4==0&&RPR3==0&&RP R1==1&&RPR2==0) //左轮最外围检测到黑线左轮大转弯未检测到障碍物

{

IN1=0,IN2=1,IN3=0,IN4=1;

PWM1=1;

PWM2=1;

timer(50);

PWM1=0;

PWM2=1;

timer(100);

PWM1=0;

PWM2=0;

timer(400);

}

相关文档
最新文档