智能小车仿真程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#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() { EA=1; 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 } if(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); } if(A==0&&D==1&&bz1==1) { IN1=0,IN2=1,IN3=0,IN4=1; PWM1=1; PWM2=0; 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; for(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&&RP R4==0)))// 未检测到黑线,小车继续前进 { IN1=0,IN2=1,IN3=0,IN4=1; PWM1=1; PWM2=1; timer(100); PWM1=0; PWM2=0; timer(400); }