📄 main.c
字号:
/*说明;P1.0 P1.1 P1.2 P1.3为L293电机控制端口
P1.1 P1.3为红外避障检测端口(低电平有效)
P3.4 P3.5 P3.6 P3.7为寻线检测端口(低电平有效,黑线低电平)
P1.4 P1.5 风扇控制口
*/
//p1.0 1.1控制右电机 01正转 P1.2 1.3控制左边电机 01正转
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar k;
uchar a,biaozhi,zhuangtai;
sbit out1 = P1^0 ; //控制左电机
sbit out2 = P1^1 ;
sbit out3 = P1^2 ; //控制右电机
sbit out4 = P1^3 ;
sbit IN1 = P2^0 ;
sbit IN2 = P2^1 ;
sbit IN3 = P2^2 ;
sbit IN4 =P2^3;
void delay1(uchar t) //延时程序1
{
uchar j;
while(t--)
{for(j=5;j>0;j--);}
}
void delay2(uint t) //延时程序2
{
uchar j;
while(t--)
{for(j=100;j>0;j--);}
}
void stop()//电机停止
{
out1=0;
out2=0;
out3=0;
out4=0;
delay1(10);
}
void comeleft()//左转,右路电机正传,左路电机反转 P1=0X06; //小车左转
{
out1=0;
out2=1;
out3=1;
out4=0;
delay2(200);
}
//右转,左路电机正传,右路电机反转P1=0X09; //小车右转
void comeright ()
{
out1=1;
out2=0;
out3=0;
out4=1;
delay2(200);
}
void smleft()//左微转,左路、右路电机皆正传,只是左路插入一定时间的停机状态,造成左边速度慢,形成左微转 0101
{
out1=1;
out2=0;
out3=1;
out4=0;
delay1(1);
out3=0;
delay1(5);
out3=1;
}
void smright ()//右微转,
{
out1=1;
out2=0;
out3=1;
out4=0;
delay1(1);
out1=0;
delay1(5);
out1=1;
}
void comeon()//前进加速;防止瞬间上电,加速度的造成小车重心不稳 造成抖动的现象。0101
{
uchar i;
out2=0;out4=0;
//out3=1; out1=1;
for(i=0;i<=8;i++)//即在运行时加入少量的停机时间。
{
out1=0;
out3=0;
delay2(1);
out1=1;
out3=1;
delay2(5);
}
}
void comeback()//后退,同理于前进加速 1001
{
uchar i;
out2=0;out3=0;
for(i=0;i<=8;i++)
{
out1=1;
out4=0;
delay2(60);
out2=0;
out3=1;
delay2(2);
}
}
//循迹
void scanline()
{
P2=P2|0XF0; delay1(1);
if(IN1==0){smleft();}//寻线模块右路检测到黑线 则右微转,记录状态0
else if(IN2==0){ smright() ;}//寻线模块左路检测到黑线 则左微转,记录状态1
else if(IN1==1&IN2==1) comeon();
}
void main(void)
{
while(1)
{
scanline();
//smright ();
// smleft();
}
//comeback();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -