C51单片机小车循迹的代码,小车老是执行不了左右转的程序不管把它放在直走函数void Moto_Ctr(void) 里面还是单独放在主函数里面都没用,有时候是靠直走函数里面的修正条件来拐弯的,if条件语句我觉得已经把它们区分开了但是显然没有求专家指点有没有更好的解决方案,就是拐90度角的,本人第一次用单片做开发的,还有我是用的keil5软件开发的来比赛的。给出相应解决方案
时间: 2024-02-26 10:57:24 浏览: 17
针对你的问题,建议你检查以下几个方面:
1. 红外线传感器的灵敏度是否合适,如果灵敏度过低,可能会造成传感器检测不到地面上的黑线,从而导致小车无法正常转弯。
2. 检查电机驱动电路是否正确,特别是使用的电机驱动芯片是否正常工作,以及是否正确接线,可以使用万用表进行检测。
3. 检查程序是否存在逻辑错误,特别是在判断小车需要转弯的条件语句中是否存在错误,可以在程序中加入调试语句,输出一些中间结果,方便调试。
下面是一个较为完整的C51单片机小车循迹代码,可以参考一下:
```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit Lmotor1 = P2^2;
sbit Lmotor2 = P2^3;
sbit Rmotor1 = P2^4;
sbit Rmotor2 = P2^5;
sbit left = P3^0;
sbit mid = P3^1;
sbit right = P3^2;
void delay(uint i)
{
while(i--);
}
void Moto_Ctr(void)
{
if(left == 0 && mid == 1 && right == 0) // 左偏
{
Lmotor1 = 0;
Lmotor2 = 1;
Rmotor1 = 1;
Rmotor2 = 0;
delay(10000);
}
else if(left == 1 && mid == 1 && right == 0) // 直行
{
Lmotor1 = 1;
Lmotor2 = 0;
Rmotor1 = 1;
Rmotor2 = 0;
delay(10000);
}
else if(left == 0 && mid == 1 && right == 1) // 右偏
{
Lmotor1 = 1;
Lmotor2 = 0;
Rmotor1 = 0;
Rmotor2 = 1;
delay(10000);
}
else if(left == 0 && mid == 0 && right == 1) // 右偏
{
Lmotor1 = 1;
Lmotor2 = 0;
Rmotor1 = 0;
Rmotor2 = 1;
delay(10000);
}
else if(left == 1 && mid == 0 && right == 0) // 左偏
{
Lmotor1 = 0;
Lmotor2 = 1;
Rmotor1 = 1;
Rmotor2 = 0;
delay(10000);
}
else // 停止
{
Lmotor1 = 0;
Lmotor2 = 0;
Rmotor1 = 0;
Rmotor2 = 0;
delay(10000);
}
}
void main()
{
while(1)
{
Moto_Ctr();
}
}
```
这个程序相对完整,可以实现小车循迹。如果还是无法实现小车正常转弯,可以继续检查以上提到的几个方面。