51单片机四个传感器循迹代码
时间: 2023-11-09 18:06:59 浏览: 32
以下是一个基于51单片机的四个传感器循迹代码,可以参考一下:
```c
#include <reg51.h> //头文件
#define uchar unsigned char
#define uint unsigned int
sbit IN1 = P2^0; //定义IN1-IN4为控制引脚
sbit IN2 = P2^1;
sbit IN3 = P2^2;
sbit IN4 = P2^3;
sbit L1 = P1^0; //定义L1-L4为传感器引脚
sbit L2 = P1^1;
sbit L3 = P1^2;
sbit L4 = P1^3;
void Delay10us(uint c) //延时函数
{
uchar a;
while(c--)
{
for(a=0;a<12;a++);
}
}
uchar Left_Sensor() //左传感器测量函数
{
uchar i = 0;
L1 = 1; //将L1引脚置高
Delay10us(2); //延时2us
if(L4) i |= 0x01; //如果L4引脚为高,则将i的第0位置高
if(L3) i |= 0x02; //如果L3引脚为高,则将i的第1位置高
if(L2) i |= 0x04; //如果L2引脚为高,则将i的第2位置高
L1 = 0; //将L1引脚置低
return i; //返回i的值
}
uchar Right_Sensor() //右传感器测量函数
{
uchar i = 0;
L4 = 1; //将L4引脚置高
Delay10us(2); //延时2us
if(L1) i |= 0x01; //如果L1引脚为高,则将i的第0位置高
if(L2) i |= 0x02; //如果L2引脚为高,则将i的第1位置高
if(L3) i |= 0x04; //如果L3引脚为高,则将i的第2位置高
L4 = 0; //将L4引脚置低
return i; //返回i的值
}
void Run() //小车前进函数
{
IN1 = 1; //将IN1引脚置高
IN2 = 0; //将IN2引脚置低
IN3 = 1; //将IN3引脚置高
IN4 = 0; //将IN4引脚置低
}
void Back() //小车后退函数
{
IN1 = 0; //将IN1引脚置低
IN2 = 1; //将IN2引脚置高
IN3 = 0; //将IN3引脚置低
IN4 = 1; //将IN4引脚置高
}
void Left() //小车左转函数
{
IN1 = 0; //将IN1引脚置低
IN2 = 1; //将IN2引脚置高
IN3 = 1; //将IN3引脚置高
IN4 = 0; //将IN4引脚置低
}
void Right() //小车右转函数
{
IN1 = 1; //将IN1引脚置高
IN2 = 0; //将IN2引脚置低
IN3 = 0; //将IN3引脚置低
IN4 = 1; //将IN4引脚置高
}
void Stop() //小车停止函数
{
IN1 = 0; //将IN1-IN4引脚置低
IN2 = 0;
IN3 = 0;
IN4 = 0;
}
void main()
{
uchar left, right;
while(1)
{
left = Left_Sensor(); //测量左传感器的值
right = Right_Sensor(); //测量右传感器的值
if(left == 0x01) //如果左传感器只检测到最左边的黑线
{
Left(); //小车左转
}
else if(left == 0x03) //如果左传感器检测到左边的两条黑线
{
Left(); //小车左转
}
else if(right == 0x04) //如果右传感器只检测到最右边的黑线
{
Right(); //小车右转
}
else if(right == 0x06) //如果右传感器检测到右边的两条黑线
{
Right(); //小车右转
}
else if(left == 0x02 && right == 0x02) //如果左右传感器都检测到中间的黑线
{
Run(); //小车前进
}
else if(left == 0x00 && right == 0x00) //如果左右传感器都没有检测到黑线
{
Stop(); //小车停止
}
else if(left == 0x04 && right == 0x01) //如果左传感器检测到右边的黑线,右传感器检测到左边的黑线
{
Back(); //小车后退
}
else if(left == 0x01 && right == 0x04) //如果左传感器检测到左边的黑线,右传感器检测到右边的黑线
{
Back(); //小车后退
}
}
}
```
需要注意的是,以上代码仅供参考,具体实现还需要根据自己的需求进行修改和完善。