51单片机电磁循迹小车代码
时间: 2023-10-08 17:07:58 浏览: 127
以下是一个基于51单片机的电磁循迹小车代码:
```c
#include <reg51.h>
sbit IN1 = P1^0; // IN1控制左边轮子的方向
sbit IN2 = P1^1; // IN2控制左边轮子的方向
sbit IN3 = P1^2; // IN3控制右边轮子的方向
sbit IN4 = P1^3; // IN4控制右边轮子的方向
sbit L1 = P2^4; // 左电磁感应器1
sbit L2 = P2^5; // 左电磁感应器2
sbit L3 = P2^6; // 左电磁感应器3
sbit R1 = P2^1; // 右电磁感应器1
sbit R2 = P2^2; // 右电磁感应器2
sbit R3 = P2^3; // 右电磁感应器3
void delay(int x) // 延时函数
{
int i, j;
for (i = 0; i < x; i++)
for (j = 0; j < 110; j++);
}
void main()
{
IN1 = 0;
IN2 = 0;
IN3 = 0;
IN4 = 0;
while (1)
{
if (L1 == 0 && L2 == 0 && L3 == 0 && R1 == 0 && R2 == 0 && R3 == 0) // 六个电磁感应器都在黑线上
{
IN1 = 1; // 左边轮子正转
IN2 = 0; // 左边轮子反转
IN3 = 1; // 右边轮子正转
IN4 = 0; // 右边轮子反转
delay(10); // 延时
}
else if (L1 == 0 && L2 == 0 && L3 == 0 && R1 == 1 && R2 == 0 && R3 == 0) // 左边轮子到黑线上,右边轮子还没到
{
IN1 = 1; // 左边轮子正转
IN2 = 0; // 左边轮子反转
IN3 = 1; // 右边轮子正转
IN4 = 1; // 右边轮子正转
delay(10); // 延时
}
else if (L1 == 0 && L2 == 0 && L3 == 0 && R1 == 0 && R2 == 1 && R3 == 0) // 右边轮子到黑线上,左边轮子还没到
{
IN1 = 1; // 左边轮子正转
IN2 = 1; // 左边轮子正转
IN3 = 1; // 右边轮子正转
IN4 = 0; // 右边轮子反转
delay(10); // 延时
}
else if (L1 == 1 && L2 == 0 && L3 == 0 && R1 == 0 && R2 == 0 && R3 == 0) // 左边轮子已经走出黑线
{
IN1 = 1; // 左边轮子正转
IN2 = 0; // 左边轮子反转
IN3 = 0; // 右边轮子停止
IN4 = 0; // 右边轮子停止
delay(10); // 延时
}
else if (L1 == 0 && L2 == 0 && L3 == 1 && R1 == 0 && R2 == 0 && R3 == 0) // 右边轮子已经走出黑线
{
IN1 = 0; // 左边轮子停止
IN2 = 0; // 左边轮子停止
IN3 = 1; // 右边轮子正转
IN4 = 0; // 右边轮子反转
delay(10); // 延时
}
else if (L1 == 0 && L2 == 1 && L3 == 0 && R1 == 0 && R2 == 0 && R3 == 0) // 左边轮子偏离黑线
{
IN1 = 1; // 左边轮子正转
IN2 = 0; // 左边轮子反转
IN3 = 1; // 右边轮子正转
IN4 = 0; // 右边轮子反转
delay(10); // 延时
}
else if (L1 == 0 && L2 == 0 && L3 == 0 && R1 == 0 && R2 == 1 && R3 == 0) // 右边轮子偏离黑线
{
IN1 = 1; // 左边轮子正转
IN2 = 0; // 左边轮子反转
IN3 = 1; // 右边轮子正转
IN4 = 0; // 右边轮子反转
delay(10); // 延时
}
}
}
```
注意,以上代码仅供参考,具体实现可能会因为电磁感应器的数量和位置不同而有所不同。
阅读全文