材料:
(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 即可获取」