完善这段代码,使它能够实现小车黑线循迹功能#include <reg52.h> sbit IN1=P1^2; //左01前,10后 sbit IN2=P1^3; sbit EN1=P1^4; sbit EN2=P1^5; sbit IN3=P1^6; // 右10前,01后 sbit IN4=P1^7; sbit left_ir=P3^3; sbit right_ir=P3^4; void delay(unsigned int x) // 延时函数 { unsigned int i, j; for (i = x; i > 0; i--) for (j = 110; j > 0; j--); } void car_run(char num) { EN1 = 1; EN2 = 1; switch(num) { case 'f': INl =0;IN2 =1; IN3 =1;IN4 =0; break; case 'b': INl =1;IN2 =0; IN3 =0;IN4 =1; break; case 'l': INl =1;IN2 =0; IN3 =1;IN4 =0; break; case 'r': INl =0;IN2 =1; IN3 =0;IN4 =1; break; case 's': EN1 = 0; EN2 = 0; break; } }
时间: 2023-10-23 12:09:53 浏览: 93
STC89C52RC单片机智能小车黑线循迹实验程序源代码.rar
5星 · 资源好评率100%
#include <reg52.h>
sbit IN1=P1^2; //左01前,10后
sbit IN2=P1^3;
sbit EN1=P1^4;
sbit EN2=P1^5;
sbit IN3=P1^6; // 右10前,01后
sbit IN4=P1^7;
sbit left_ir=P3^3;
sbit right_ir=P3^4;
void delay(unsigned int x) // 延时函数
{
unsigned int i, j;
for (i = x; i > 0; i--)
for (j = 110; j > 0; j--);
}
void car_run(char num) {
EN1 = 1;
EN2 = 1;
switch(num)
{
case 'f':
IN1 = 0; IN2 = 1;
IN3 = 1; IN4 = 0;
break;
case 'b':
IN1 = 1; IN2 = 0;
IN3 = 0; IN4 = 1;
break;
case 'l':
IN1 = 1; IN2 = 0;
IN3 = 1; IN4 = 0;
break;
case 'r':
IN1 = 0; IN2 = 1;
IN3 = 0; IN4 = 1;
break;
case 's':
EN1 = 0;
EN2 = 0;
break;
}
}
void track()
{
while(1) {
if (left_ir == 0 && right_ir == 0) { // 左右均检测到黑线
car_run('f'); // 直行
}
else if (left_ir == 1 && right_ir == 0) { // 右侧检测到黑线
car_run('l'); // 左转
}
else if (left_ir == 0 && right_ir == 1) { // 左侧检测到黑线
car_run('r'); // 右转
}
else if (left_ir == 1 && right_ir == 1) { // 左右均未检测到黑线
car_run('s'); // 停止
}
delay(20); // 稍作延时
}
}
void main() {
track();
}
这段代码实现了小车的黑线循迹功能。首先定义了左右轮子的控制引脚和电机使能引脚,以及左右侧光电传感器的引脚。然后定义了一个延时函数和一个小车运动控制函数。在运动控制函数中,根据传入的参数控制小车的运动方向。最后定义了一个黑线循迹函数,在其中使用循环不停地检测左右侧光电传感器的状态,并根据状态控制小车的运动方向。在循迹函数中加入延时函数,以避免传感器状态变化过快导致小车运动不稳定。在主函数中调用循迹函数即可。
阅读全文