⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 基于51单片机的循迹小车C语言程序
💻 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 + -