51单片机小车循迹左转四次后直行的程序
时间: 2023-12-23 11:05:45 浏览: 93
以下是一个简单的51单片机小车循迹左转四次后直行的程序,供参考:
```c
#include <reg51.h>
#define LeftSensor P1_0 // 左传感器
#define MiddleSensor P1_1 // 中传感器
#define RightSensor P1_2 // 右传感器
#define LeftMotor P2_0 // 左电机
#define RightMotor P2_1 // 右电机
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 120; j++);
}
void main()
{
unsigned char count = 0; // 计数器
while (1)
{
if (MiddleSensor == 0) // 中传感器检测到黑线
{
LeftMotor = 0; // 左电机停转
RightMotor = 0; // 右电机停转
delay(100); // 延时一段时间等待稳定
if (MiddleSensor == 0) // 再次检测中传感器是否检测到黑线
{
count++; // 计数器加1
if (count == 4) // 已经左转四次
{
LeftMotor = 1; // 左电机正转
RightMotor = 1; // 右电机正转
}
else // 还没有左转四次
{
LeftMotor = 1; // 左电机正转
RightMotor = 0; // 右电机停转
delay(500); // 延时一段时间等待左转完成
}
}
}
else if (LeftSensor == 0) // 左传感器检测到黑线
{
LeftMotor = 1; // 左电机正转
RightMotor = 0; // 右电机停转
}
else if (RightSensor == 0) // 右传感器检测到黑线
{
LeftMotor = 0; // 左电机停转
RightMotor = 1; // 右电机正转
}
}
}
```
此程序中,通过三个红外传感器(左传感器、中传感器、右传感器)检测地面上的黑线,根据检测结果控制两个电机(左电机、右电机)的运行状态,实现小车的循迹行驶。当中传感器检测到黑线时,根据计数器的值判断小车是否需要左转,如果需要,则先左转四次再直行,否则只进行左转操作。当左传感器检测到黑线时,小车向左转;当右传感器检测到黑线时,小车向右转。
阅读全文