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

📄 新建 文本文档 (2).txt

📁 单片机控制自动寻路车,设计思路以及算法,l298n 123做为电机驱动芯片!
💻 TXT
字号:
#include"AT89x52.h"
#include"intrins.h"
#include"math.h"
void init_zz();
void trun_left();
void trun_right();
void delay();
void cheshu();


#define uchar unsigned char
#define uint unsigned int

sbit hw0=P1^0;	  //-----定-----
sbit hw1=P1^1;	   
sbit hw2=P1^2;	  
sbit hw3=P1^3;	   
sbit hw4=P1^4;	   
sbit hw5=P1^5;	  //-----义-----
sbit hw6=P1^6;
sbit hw7=P1^7;
sbit d20=P2^0;	    
sbit d21=P2^1;	   
sbit d22=P2^2;	  //-----端-----
sbit d23=P2^3;
sbit d24=P2^4;
sbit d25=P2^5;
sbit d26=P2^6;
sbit d27=P2^7;	  //-----口-----
uchar Temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};	 //----------共阴段显示-----------------------------
uchar c,count,speed;                                                 //------------全局变量-----------------------------
uchar percent,light,times;                                           //---percent,times:占空比控制;light:控制渐亮渐灭---
uint i;
uchar time1;
uchar period[]={10,10,10,10};					   //舵机偏转对应占空比设置
uchar high[]={2,2,2,2};
char xulie,xulie_1,xulie_2,xulie_3,xulie_4,xulie_5,xulie_6,xulie_7,xulie_8;

 
void pulse1()  interrupt 3 using 2			//----中断服务程序1	,用作舵机偏转,通过改变通电时间,从而改变相应的角度----
{
    TH1=(65536-10000)/256;
	TL1=(65536-10000)%256;	
	count++;

	 if(hw0==0)
	   {
	   	xulie=1;
		xulie_1=xulie;
	   }

	    if(hw1==0)
	   {
	   	xulie=2;
		xulie_2=xulie;
	   }

	    if(hw2==0)
	   {
	   	xulie=3;
		xulie_3=xulie;
	   }

	    if(hw3==0)
	   {
	   	xulie=4;
		xulie_4=xulie;
	   }

	    if(hw4==0)
	   {
	   	xulie=5;
		xulie_5=xulie;
	   }

	    if(hw5==0)
	   {
	   	xulie=6;
		xulie_6=xulie;
	   }
  
		 if(hw6==0)
	   {
	   	xulie=7;
		xulie_7=xulie;
	   }
	   
	    if(hw7==0)
	   {
	   	xulie=8;
		xulie_8=xulie;
	   }

   if(xulie-xulie_1==1)
	 {
	 trun_right();
	if(++time1==high[0])
	  d25=0;
	else if(time1==period[0])
	{
	  time1=0;
	  d25=1;
	}
	xulie_1=0;
	xulie_3=0;
	xulie_4=0;
	xulie_5=0;
	xulie_6=0;
	xulie_7=0;
	xulie_8=0;
   }

  if(xulie-xulie_2==-1)
	 {
	 trun_left();
	if(++time1==high[0])
	  d25=0;
	else if(time1==period[0])
	{
	  time1=0;
	  d25=1;
	}
	xulie_2=0;
	xulie_3=0;
	xulie_4=0;
	xulie_5=0;
	xulie_6=0;
	xulie_7=0;
	xulie_8=0;
	}

	if(xulie-xulie_3==-1)
	 {
	 trun_left();
	if(++time1==high[0])
	  d25=0;
	else if(time1==period[0])
	{
	  time1=0;
	  d25=1;
	}
	xulie_3=0;
	xulie_1=0;
	xulie_4=0;
	xulie_5=0;
	xulie_6=0;
	xulie_7=0;
	xulie_8=0;

	}

	if(xulie-xulie_2==1)
	 {
	 trun_right();
	if(++time1==high[0])
	  d25=0;
	else if(time1==period[0])
	{
	  time1=0;
	  d25=1;
	}
	xulie_1=0;
	xulie_2=0;
	xulie_4=0;
	xulie_5=0;
	xulie_6=0;
	xulie_7=0;
	xulie_8=0;
	}

	if(xulie-xulie_4==-1)
	 {
	 trun_left();
	if(++time1==high[0])
	  d25=0;
	else if(time1==period[0])
	{
	  time1=0;
	  d25=1;
	}
	xulie_1=0;
	xulie_2=0;
	xulie_4=0;
	xulie_5=0;
	xulie_6=0;
	xulie_7=0;
	xulie_8=0;
	}

	if(xulie-xulie_3==1)
	 {
	trun_right();
	if(++time1==high[0])
	  d25=0;
	else if(time1==period[0])
	{
	  time1=0;
	  d25=1;
	}
	xulie_1=0;
	xulie_2=0;
	xulie_3=0;
	xulie_5=0;
	xulie_6=0;
	xulie_7=0;
	xulie_8=0;
	}

	if(xulie-xulie_5==-1)
	 {
	 trun_left();
	if(++time1==high[0])
	  d25=0;
	else if(time1==period[0])
	{
	  time1=0;
	  d25=1;
	}
	xulie_1=0;
	xulie_2=0;
	xulie_3=0;
	xulie_5=0;
	xulie_6=0;
	xulie_7=0;
	xulie_8=0;
	}

	if(xulie-xulie_4==1)
	 {
	trun_right();
	if(++time1==high[0])
	  d25=0;
	else if(time1==period[0])
	{
	  time1=0;
	  d25=1;
	}
	 xulie_1=0;
	xulie_2=0;
	xulie_3=0;
	xulie_4=0;
	xulie_6=0;
	xulie_7=0;
	xulie_8=0;
	}

	if(xulie-xulie_6==-1)
	 {
	trun_left();
	if(++time1==high[0])
	  d25=0;
	else if(time1==period[0])
	{
	  time1=0;
	  d25=1;
	}
	xulie_1=0;
	xulie_2=0;
	xulie_3=0;
	xulie_4=0;
	xulie_6=0;
	xulie_7=0;
	xulie_8=0;
	}

	if(xulie-xulie_5==1)
	 {
    trun_right();
	if(++time1==high[0])
	  d25=0;
	else if(time1==period[0])
	{
	  time1=0;
	  d25=1;
	}
	xulie_1=0;
	xulie_2=0;
	xulie_3=0;
	xulie_4=0;
	xulie_5=0;
	xulie_7=0;
	xulie_8=0;
	}

	if(xulie-xulie_7==-1)
	 {
	 trun_left();
	if(++time1==high[0])
	  d25=0;
	else if(time1==period[0])
	{
	  time1=0;
	  d25=1;
	}
	xulie_1=0;
	xulie_2=0;
	xulie_3=0;
	xulie_4=0;
	xulie_5=0;
	xulie_7=0;
	xulie_8=0;
	}

	if(xulie-xulie_6==1)
	 {
	trun_right();
	if(++time1==high[0])
	  d25=0;
	else if(time1==period[0])
	{
	  time1=0;
	  d25=1;
	}
	xulie_1=0;
	xulie_2=0;
	xulie_3=0;
	xulie_4=0;
	xulie_5=0;
	xulie_6=0;
	xulie_8=0;
	}

	if(xulie-xulie_8==-1)
	 {
	trun_left();
	if(++time1==high[0])
	  d25=0;
	else if(time1==period[0])
	{
	  time1=0;
	  d25=1;
	}
	xulie_1=0;
	xulie_2=0;
	xulie_3=0;
	xulie_4=0;
	xulie_5=0;
	xulie_6=0;
	xulie_8=0;
	}


} 

void pulse() interrupt 1 using 2              //---定时器0中断服务程序-----	   (用作降速)通过改变

{ 

  TH0 = -500/256;
  TL0 = -500%256;
if (times++==percent) 
  d24=0;
else if (times ==100) 
 {
  times = 0;
  d24=1;
 }

 

}


void scan_P2_7()
{
  if(d27==0)
  c++;
}
  

void cheshu()
{
   
  if(count==20)
  
   	 {
	  speed=c;
	 

	 }	 
} 	

void write_add(uchar WEI)
{
   
   P3=WEI;
   
   
 }	
 
void write_data(uchar data1)
{
   
   P0=Temp[data1];
}  	

void delay()								 //延时子程序
{  
for(i = 0;i<7576;i++);
}

void delay1(uint z)
{
   uint x,y;
   for(x=z;x>0;x--)
     for(y=110;y>0;y--);
}

void init_zz()								 //初使化小车直走
{
  d20=0;
  d21=0;
  d22=1;
  d23=0;
  d24=1;
  d25=0;
}
void trun_left()								  //舵机正转准备
{

 d20=0;
 d21=0;
 d22=0;
 d23=1;

 
}									
void trun_right()								   //舵机反转准备
{
 d20=0;
 d21=0;
 d22=1;
 d23=0;
 
 
}  

void main()									   //主函数
{
	 uchar ge,shi,bai,qian;
	 init_zz();								   //初使化小车直走
	 scan_P2_7();							   //扫描测速端口
	 cheshu();
	 qian=speed/1000;
	 bai=speed/100-qian*10;
	 shi=speed/10-qian*100-bai*10;
	 ge=speed-qian*1000-bai*100-shi*10;
	 write_add(0xf7);
	 write_data(qian);
	 delay1(1);
	 write_add(0xfb);
	 write_data(bai);
	 delay1(1);
	 write_add(0xfd);
	 write_data(shi);
	 delay1(1);
	 write_add(0xfe);
	 write_data(ge);
	 TMOD = 0x11;							   //设置定时计数器
     TH0 = -500/256; 						   //设置初值
     TL0 = -500%256;
	 TH1=(65536-10000)/256;
	 TL1=(65536-10000)%256; 
     EA = 1;		 							//开启cpu总中断
	 ET1=1;										//开启定时器1中断
	 ET0=1;
	 TR1=1;
	 TR0=1;	
 
  
 while(1)
	   {
	   if(xulie-xulie_1==1)
	   {
	   	do
         {
           TR1 = 1;
  	       TR0 = 1;
         }
      while(xulie-xulie_1==1);
        }



      
	   
	   if(xulie-xulie_2==-1)
	   {
	   	 do
         {
           TR1 = 1;
  	       TR0 = 1;
         }
      while(xulie-xulie_2==-1);
      
	   }
	
      if(xulie-xulie_3==-1)
	   {
	   	 trun_left();
	    do
         {
           TR1 = 1;
  	       TR0 = 1;
         }
      while(xulie-xulie_3==-1);
	   }
	  

	   if(xulie-xulie_2==1)
	   {
	     do
         {
           TR1 = 1;
  	       TR0 = 1;
         }
      while(xulie-xulie_2==1);
	} 

	   if(xulie-xulie_4==-1)
	   {
	   	  do
         {
           TR1 = 1;
  	       TR0 = 1;
         }
      while(xulie-xulie_4==-1);
	  } 

	   if(xulie-xulie_3==1)
	   {
	      do
         {
           TR1 = 1;
  	       TR0 = 1;
         }
      while(xulie-xulie_3==1);
	} 
	   
	    if(xulie-xulie_5==-1)
		{
		do
         {
           TR1 = 1;
  	       TR0 = 1;
         }
      while(xulie-xulie_5==-1);
	} 

		if(xulie-xulie_4==1)
		{
		    do
         {
           TR1 = 1;
  	       TR0 = 1;
         }
      while(xulie-xulie_4==1);
	} 

		if(xulie-xulie_6==-1)
		{
			do
         {
           TR1 = 1;
  	       TR0 = 1;
         }
      while(xulie-xulie_6==-1);
	} 
		
		if(xulie-xulie_5==1)
		{
		   do
         {
           TR1 = 1;
  	       TR0 = 1;
         }
      while(xulie-xulie_5==1);
	} 

		if(xulie-xulie_7==-1)
		{
		  do
         {
           TR1 = 1;
  	       TR0 = 1;
         }
      while(xulie-xulie_7==-1);
	} 

		if(xulie-xulie_6==1)
		{
		 do
         {
           TR1 = 1;
  	       TR0 = 1;
         }
      while(xulie-xulie_6==1);
	} 

		if(xulie-xulie_8==-1)
		{
		do
         {
           TR1 = 1;
  	       TR0 = 1;
         }
      while(xulie-xulie_8==-1);
	} 

		if(xulie-xulie_7==1)
		{
		do
         {
           TR1 = 1;
  	       TR0 = 1;
         }
      while(xulie-xulie_7==1);
	} 
  }
}  		   











⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -