基于51单片机的智能循迹避障小车 C源程序 - 图文

四、软件设计及说明

4.1系统软件流程图

开始 前进 否 否 扫描I/O口,是否检测到黑线 扫描I/O口,是否检测到障碍 是 右/左行进 左/右行进 是 左/右检测到黑线 左/右检测到障碍 2MiJTy0dTT

4.2循迹避障程序 #include

#define uchar unsigned char #define uint unsigned int

9 / 19

unsigned char zkb1=0 ;

//**左边电机的占空比**// unsigned char zkb2=0 ;

//**右边电机的占空比**// unsigned char t=0;

//**定时器中断计数器**// sbit LSEN2=P2^0; sbit LSEN1=P2^1; sbit RSEN1=P2^2; sbit RSEN2=P2^3; //**传感器***/ sbit IN1=P1^0; sbit IN2=P1^1; sbit IN3=P1^2; sbit IN4=P1^3; sbit ENA=P1^4; sbit ENB=P1^5;

//**********初始化定时器中断***********// void init() {

TMOD=0x01;

TH0=(65536-100)/256; TL0=(65536-100)%6; EA=1; ET0=1; TR0=1; }

//***********中断函数+脉宽调制***********// void timer0() interrupt 1 {

if(t

ENA=0; if(t

ENB=0; t++; if(t>=50) {t=0;} }

//******************直行******************// void qianjin()

10 / 19

{

zkb1=50; zkb2=50; }

//***************左转函数1***************// void turn_left1() {

zkb1=0; zkb2=50; }

//***************左转函数2***************// void turn_left2() {

zkb1=0; zkb2=50; }

//***************右转函数1***************// void turn_right1() {

zkb1=50; zkb2=0; }

//***************右转函数2***************// void turn_right2() {

zkb1=50; zkb2=0; }

//***************循迹函数*****************// void xunji() {

uchar flag;

if((RSEN2==1)&&(RSEN1==0)&&(LSEN1==0)&&(LSEN2==1)) { flag=0; }

//*******直行*******//

else if((RSEN2==1)&&(RSEN1==1)&&(LSEN1==0)&&(LSEN2==1))gIiSpiue7A { flag=1;}

//***左偏1,右转***//

else if((RSEN2==1)&&(RSEN1==0)&&(LSEN1==1)&&(LSEN2==1))uEh0U1Yfmh { flag=2; }

//***右偏1,左转***//

else if((RSEN2==0)&&(RSEN1==0)&&(LSEN1==0)&&(LSEN2==1))IAg9qLsgBX { flag=3; }

//***右偏2,左转***//

11 / 19

else if((RSEN2==1)&&(RSEN1==0)&&(LSEN1==0)&&(LSEN2==0))WwghWvVhPE { flag=4;}

//***左偏2,右转***// switch (flag) {

case 0:qianjin(); break;

case 1:turn_right1(); break; case 2:turn_left1(); break; case 3:turn_left2(); break;

case 4:turn_right2(); break; default: break; } }

//****************主程序****************// void main() {

init(); zkb1=50; zkb2=50; while(1) {

//******给电机加电启动******// IN1=1; IN2=0; IN3=1; IN4=0; ENA=1; ENB=1; while(1) {

xunji(); //*********寻迹**********// } } }

五、系统测试过程

本小车能实现循迹避障功能,它能沿着地面上黑色轨迹行驶实现循迹功能,也能检测到跑道两侧的挡板,沿挡板行驶实现避障功能。asfpsfpi4k 寻迹避障小车轨迹图介绍:轨道由循迹部分(黑线)和避障部分(道路两侧加挡板)两部分组成,小车先

12 / 19

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4