C51单片机的智能循迹越障小车代码
时间: 2023-11-13 13:02:27 浏览: 124
循迹越障小车代码如下,仅供参考:
```c
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit ena=P1^2;
sbit enb=P1^3;
sbit in1=P1^4;
sbit in2=P1^5;
sbit in3=P1^6;
sbit in4=P1^7;
sbit ir1=P3^0;
sbit ir2=P3^1;
sbit ir3=P3^2;
sbit ir4=P3^3;
sbit ir5=P3^4;
sbit ir6=P3^5;
sbit ir7=P3^6;
sbit ir8=P3^7;
uchar ir_value=0;//用于存储红外值
uchar left_speed=0,right_speed=0;//左右电机速度
//延时函数
void Delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
//电机控制函数
void MotorControl(uchar left_speed,uchar right_speed)
{
ena=1;
enb=1;
in1=1;
in2=0;
in3=1;
in4=0;
P0=left_speed;//控制左电机速度
P2=right_speed;//控制右电机速度
}
//红外传感器读取函数
void ReadIrValue()
{
ir_value=0;
if(ir1==0) ir_value|=0x01;
if(ir2==0) ir_value|=0x02;
if(ir3==0) ir_value|=0x04;
if(ir4==0) ir_value|=0x08;
if(ir5==0) ir_value|=0x10;
if(ir6==0) ir_value|=0x20;
if(ir7==0) ir_value|=0x40;
if(ir8==0) ir_value|=0x80;
}
//循迹函数
void RunOnTrack()
{
ReadIrValue();//读取红外值
switch(ir_value)
{
case 0x01: left_speed=80,right_speed=120;break;//左偏,右转
case 0x02: left_speed=100,right_speed=120;break;
case 0x04: left_speed=120,right_speed=120;break;
case 0x08: left_speed=120,right_speed=100;break;
case 0x10: left_speed=120,right_speed=80;break;//右偏,左转
default: left_speed=120,right_speed=120;break;//直行
}
MotorControl(left_speed,right_speed);//控制电机
}
//越障函数
void RunOverObstacle()
{
if(ir_value==0x04)//前方有障碍物
{
left_speed=60,right_speed=60;//减速
MotorControl(left_speed,right_speed);//控制电机
Delayms(1000);//等待1秒
left_speed=120,right_speed=120;//恢复速度
MotorControl(left_speed,right_speed);//控制电机
}
}
//主函数
void main()
{
while(1)
{
RunOnTrack();//循迹
RunOverObstacle();//越障
Delayms(50);//延时50ms
}
}
```
这段代码实现了循迹越障小车的基本功能,包括红外传感器读取、循迹控制、越障控制等。在实际的应用中,可以根据具体需求进行调整和优化。
阅读全文