材料:

(1)51单片机开发板

(2)l298n电机驱动模块1个

(3)四个电机

(4)红外模块1个

一、组装

(1)L298N电机驱动模块与stm32开发板接线如下图:

 

(2)红外接线

VCC接开发板的3.3v~5v,GND接开发板的GND, OUT接单片机p3.1.

 main.c

#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

//电机控制管脚
sbit MOTOA=P1^0;
sbit MOTOB=P1^1; //右侧电机
sbit MOTOC=P1^2;
sbit MOTOD=P1^3; //左侧电机

//红外壁障感应控制管脚
sbit Forward_In=P3^1;	

//ms延时函数ms
void delay_ms(u16 ms)
{
	u16 i,j;
	for(i=ms;i>0;i--)
		for(j=120;j>0;j--);
}

//延时函数10*us(us)
void delay_10us(u16 us)
{
	while(us--);
}

void Car_ForwardRun(void)//前进
{
	MOTOA=1;
	MOTOB=0;
	MOTOC=1;
	MOTOD=0;	
}
void Car_BackwardRun(void)//后退
{
	MOTOA=0;
	MOTOB=1;
	MOTOC=0;
	MOTOD=1;	
}
void Car_LeftRun(void)//左转
{
	MOTOA=1;
	MOTOB=0;
	MOTOC=0;
	MOTOD=1;	
}
void Car_RightRun(void)//右转
{
	MOTOA=0;
	MOTOB=1;
	MOTOC=1;
	MOTOD=0;	
}
void Car_StopRun(void)//停止
{
	MOTOA=0;
	MOTOB=0;
	MOTOC=0;
	MOTOD=0;	
}

//定时器0初始化函数
//定时时间:0.1ms
void Time0_Init(void)
{
	TMOD|=0x01;
	TH0 = 0XFF;
	TL0 = 0X9C;	//定时0.1ms
	TR0 = 1;
	ET0 = 1;
	EA  = 1;
}

//主函数
void main()
{
	Time0_Init();

	while(1)
	{
	
	}	
}
u16 bktime=0;
//定时器0中断函数
void Time0_Isr() interrupt 1
{
	TR0 = 0;	//关闭定时器0
	TH0 = 0XFF;
	TL0 = 0X9C;	//定时0.1ms
	time_cnt++;	
	if(time_cnt>=freq)		
		time_cnt=0;
	else if(time_cnt<=duty_cycle)
	{
		if(Forward_In==1)	//壁障红外传感器未检测到障碍物
		{
			Car_ForwardRun();//前进
			
		}
		else			  //壁障红外传感器检测到障碍物
		{
			bktime=700;
			while(bktime--)
			{
				Car_BackwardRun();//后退
				delay_10us(30);
				Car_StopRun();
				delay_10us(30);	
			}
			bktime=20;
			while(bktime--)
			{
				Car_LeftRun();/右转
				delay_ms(15);
				Car_StopRun();
				delay_ms(15);	
			}	
		}
		
	}		
	else
	{
		Car_StopRun();		
	}
	TR0 = 1;	//开启定时器0		
}

 

【超级会员V1】通过百度网盘分享的文件:实验10:红外壁....zip
链接:https://pan.baidu.com/s/10GR7OHr42HWx3HK-BosdSQ 
提取码:a44K 
复制这段内容打开「百度网盘APP 即可获取」

 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐