AT89C52小车避障代码
时间: 2023-09-30 08:09:05 浏览: 35
以下是AT89C52小车避障的代码,仅供参考:
```
#include <reg52.h> //头文件
#define uchar unsigned char //定义uchar型
#define uint unsigned int //定义uint型
sbit IN1=P1^0; //定义IN1连接端口P1.0
sbit IN2=P1^1; //定义IN2连接端口P1.1
sbit IN3=P1^2; //定义IN3连接端口P1.2
sbit IN4=P1^3; //定义IN4连接端口P1.3
sbit LSA=P2^2; //定义LSA连接端口P2.2
sbit LSB=P2^3; //定义LSB连接端口P2.3
sbit LSC=P2^4; //定义LSC连接端口P2.4
sbit ENA=P1^4; //定义ENA连接端口P1.4
sbit ENB=P1^5; //定义ENB连接端口P1.5
uchar flag,Left,Right;
void delay(uint x) //延时函数
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void motorStop() //电机停止函数
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
void L298N(uchar Left,uchar Right) //电机控制函数
{
if(Left == 1) //左电机正转
{
IN1=1;
IN2=0;
}
else if(Left == 2) //左电机反转
{
IN1=0;
IN2=1;
}
else //左电机停止
{
IN1=0;
IN2=0;
}
if(Right == 1) //右电机正转
{
IN3=1;
IN4=0;
}
else if(Right == 2) //右电机反转
{
IN3=0;
IN4=1;
}
else //右电机停止
{
IN3=0;
IN4=0;
}
}
void Display(uchar num) //数码管显示函数
{
switch(num)
{
case 0:LSA=0;LSB=0;LSC=0;break;
case 1:LSA=1;LSB=0;LSC=0;break;
case 2:LSA=0;LSB=1;LSC=0;break;
case 3:LSA=1;LSB=1;LSC=0;break;
case 4:LSA=0;LSB=0;LSC=1;break;
case 5:LSA=1;LSB=0;LSC=1;break;
case 6:LSA=0;LSB=1;LSC=1;break;
case 7:LSA=1;LSB=1;LSC=1;break;
}
}
void main()
{
motorStop();
while(1)
{
if(P3 == 0xFE) //左侧有障碍
{
flag=1;
Left=2; //左电机反转
Right=1; //右电机正转
L298N(Left,Right); //电机控制
Display(0); //数码管显示0
}
else if(P3 == 0xFD) //右侧有障碍
{
flag=1;
Left=1; //左电机正转
Right=2; //右电机反转
L298N(Left,Right); //电机控制
Display(0); //数码管显示0
}
else if(P3 == 0xFC) //左右侧都有障碍
{
flag=1;
Left=2; //左电机反转
Right=2; //右电机反转
L298N(Left,Right); //电机控制
Display(0); //数码管显示0
}
else if(flag == 1) //前方无障碍
{
flag=0;
Left=1; //左电机正转
Right=1; //右电机正转
L298N(Left,Right); //电机控制
Display(8); //数码管显示8
}
else //一开始时,也是前方无障碍
{
Left=1; //左电机正转
Right=1; //右电机正转
L298N(Left,Right); //电机控制
Display(8); //数码管显示8
}
delay(10); //延时10ms
}
}
```