51循迹小车做起来很简单 。
首先最小系统是要有的;
其次电机工作需要的电流不是IO口可以工作的,所以需要驱动一般使用L298N;
循迹一般是黑线使用ST188.
如果没有电路基础建议使用模块。焊接过程不复杂但是对于新手还是用难度的。
环环相扣保证每个模块都能稳定工作。
贴下参考代码我使用定时器输出PWM波
#include <reg52.h>
#define unint unsigned int
#define unchar unsigned char
extern void display(int x);
/*
* 要改的地方
*/
sbit ENA = P2^0;
sbit ENB = P2^1;
sbit IN1 = P2^2;
sbit IN2 = P2^3;
sbit IN3 = P2^4;
sbit IN4 = P2^5;
sbit jiance1 = P1^0; //循迹模块
sbit jiance2 = P1^1; //循迹模块
int time1 = 0,shu = 0;
void zhengzhuan();
void youzhuan();
void zuozhuan();
void xunji();
void Time0Config();
void main()
{
Time0Config();
P0=0xff;
while(1)
{
xunji(); //循迹程序
display(shu); //显示程序
}
}
void Time0Config()
{
TMOD = 0x01; //定时器0工作方式1
TH0 = 0x3C;
TL0 = 0xB0; //装入定时器初值定时50ms
ET0 = 1; //定时器0中断允许
TR0 = 1;
EA = 1; //总中断允许
}
void zhengzhuan()
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
void zuozhuan()
{
IN1=1;
IN2=0;
IN3=0;
IN4=0;
}
void youzhuan()
{
IN1=0;
IN2=0;
IN3=1;
IN4=0;
}
void stop()
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
void xunji()
{
zhengzhuan();
while(jiance1==1&&jiance2==1)
{
stop();
// break;
}
//当一边检测到黑线,进入循环
while(jiance1==0&&jiance2==1)
{
zuozhuan();
// break;
}
while(jiance1==1&&jiance2==0)
{
youzhuan();
// break;
}
}
void time0(void) interrupt 1 //定时器0中断服务函数
{
TH0 = 0x3C;
TL0 = 0xB0;
time1++;
if(!(time1 - 20))
{ time1 = 0;
shu++;
}
}