L298N的ENA和ENB 要连下面两个脚,上面两个脚是5V.
用51最小系统板就可以了,最好用万用板引出VCC和GND两个排针,不然线会很乱。
电压最好用电压档测一下,别把板子烧了,51单片机是5V供电。
//主函数
#include <AT89X52.H>
#include <intrins.h>
#include "xunji.h"
#include "motor.h"
#define uint unsigned int //重定义无符号整数类型
#define uchar unsigned char //重定义无符号字符类型
//避障引脚定义
sbit Left_bizhang_led=P0^2; //左避障传感器
sbit Right_bizhang_led=P0^3; //右避障传感器
sbit ENz=P1^5;
sbit ENy=P1^6;
extern unsigned char push_val_left1;
extern unsigned char push_val_right1;
extern unsigned char i ;
extern unsigned char j ;
//T0计时器初始化
void T0_Init()
{
TMOD|=0X01; //定时器0为方式1
TH0= 0XFF; //1ms定时
TL0= 0XA4;
TR0= 1; //开启定时器0
ET0= 1; //开启定时器0中断
EA=1; //开总中断
}
//主函数
void main()
{
T0_Init();
while(1)
{
Car_Traction ();
//Car_Avoidance();
}
}
//定时器0中断服务函数
void timer0()interrupt 1 //using 0
{
TH0=0XFF;
TL0=0XA4;
i++;
j++;
if(i<=push_val_left1)
ENz=1;
else
ENz=0;
if(j<=push_val_right1)
ENy=1;
else
ENy=0;
if(i==20)
i=0;
if(j==20)
j=0;
}
//循迹部分
#include "xunji.h"
#include "motor.h"
//延时函数1
void delay_nus(unsigned int t)
{
t=t/10;
while(--t);
}
//延时函数2
void delay_nms(unsigned int s)
{
s=s+1;
while(--s)
delay_nus(900);
}
void Car_Traction()
{
if(right1==0&&right2==0&&left1==0&&left2==0) //左右两边均没有识别到黑线
{
run();
delay_nms(10);
}
else if(left1==0&&left2==0&&right2==1) //右2遇黑线
{
rightrun2();
while(1)
{
if(right1==0&&right2==0&&left1==0&&left2==0)
break;
}
}
else if(left1==0&&left2==0&&right1==1) //右1遇黑线
{
rightrun1();
while(1)
{
if(right1==0&&right2==1&&left1==0&&left2==0)
break;
}
}
else if(left2==1&&right1==0&&right2==0) //左2遇黑线
{
leftrun2();
while(1)
{
if(right1==0&&right2==0&&left1==0&&left2==0)
break;
}
}
else if(left1==1&&right1==0&&right2==0) //左1遇黑线
{
leftrun1();
while(1)
{
if(right1==0&&right2==0&&left1==0&&left2==1)
break;
}
}
else if(left1==1&&left2==1&&right1==1&&right2==1) //左右都遇到黑线
{
// a=0;
// a++;
// if(a<=6)
// {
// run();
// delay_nms (10);
// }
// else if(a>6)
// {
stop();
delay_nms(10);
}
}
//电机pwm部分
```c
#include "motor.h"
unsigned char push_val_left1;
unsigned char push_val_right1;
unsigned char i ;
unsigned char j ;
//前进
void run(void)
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
push_val_left1=12;
push_val_right1=12;
}
//后退
void backrun(void)
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
push_val_left1=12;
push_val_right1=12;
}
//左大转
void leftrun1(void)
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
push_val_left1=12;
push_val_right1=12;
}
//左小转
void leftrun2(void)
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
push_val_left1=8;
push_val_right1=8;
}
//右大转
void rightrun1(void)
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
push_val_left1=12;
push_val_right1=12;
}
//右小转
void rightrun2(void)
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
push_val_left1=8;
push_val_right1=8;
}
//小车停车函数
void stop(void)
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
motor头文件
#ifndef __MOTOR_H
#define __MOTOR_H
#include <AT89X52.H>
//左轮
sbit IN1=P1^3;
sbit IN2=P1^4;
//右轮
sbit IN3=P1^1;
sbit IN4=P1^2;
void run(void);
void backrun(void);
void leftrun1(void);
void leftrun2(void);
void rightrun1(void);
void rightrun2(void);
void stop(void);
#endif
循迹头文件
#ifndef __XUNJI_H
#define __XUNJI_H
#include <AT89X52.H>
sbit right1=P2^7;
sbit right2=P0^7;
sbit left1=P0^4;
sbit left2=P0^6;
void Car_Traction() ;
void delay_nus(unsigned int t);
void delay_nms(unsigned int s);
#endif