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

📄 main.c

📁 智能小车的往返行驶,单片机实现,使用红外信号进行路面信号的采集
💻 C
字号:
#include "SPCE061V004.h"
#define   FORWARD             0              //前进状态
#define   BACKWARD            1		         //后退状态
#define   STOP				  2				 //停止状态
#define   BLACKWIRE_H    7
typedef unsigned int uint;
typedef unsigned char uchar;
void System_Init(void);
void ScanLimit(unsigned char);
void LEDdisplay( unsigned char , unsigned char  );
unsigned char  PointCTL(unsigned char );
void ForeWheelForword();
void ForeWheelReverse();
void TurnLeft();
void TurnRight();
void Stop();
void Delay10s();
void Keycontrol();
void    cls();
void TreatKey();
void TimeGo();
void ReturnKeyValue();
void Startdelay();
void Protect();
extern uint key_array[8];
static uint i=0,j=0,k=0;
extern uint KeyUpFlag,KeyDownFlag;
uint led[8];
uint SpeedValue=30;               //档位值,从1-100
uint Status=FORWARD;		     //记录和控制车前进,后退状态
uint Time500ms=0;                //500ms时间控制
uint S=0;						 //总路程,单位:厘米 		
uint Time=0;					 //总时间
uint Blackwire=0;				 //记录黑线数
extern uint Delay10sFlag;             //延时10s信号
extern uint StartFlag;
uint timebuf_dl10s=0;
uint timebuf_dl3s=0;
uint startdelayflag=0;
int main()
{ 
  System_Init();
  for(j=0;j<8;j++)
       key_array[j]=0;
  cls();
  LEDdisplay( 0x03 , 0x0b);
  LEDdisplay( 0x04 , 0x0b);
  while(1)
  {  
    if(  Status!=STOP )
        {
          TreatKey();
//          if(startdelayflag==1)
//                Protect();
          *P_Watchdog_Clear=1;
          if( StartFlag)    {
                             LEDdisplay( 0x03 , 0x0a);
                             LEDdisplay( 0x04 , 0x0d); 
                             Startdelay();  
                            }
          if( Delay10sFlag)  {
                            
                             LEDdisplay( 0x03 , 0x0b);
                             LEDdisplay( 0x04 , 0x0d);
                              Delay10s();    
                             }
          TimeGo();
        }
    *P_Watchdog_Clear=1;
  }
}
void TreatKey()
{
 
 if(KeyDownFlag)
     {
       
       ReturnKeyValue();            
       KeyDownFlag=0;
     /**********************检测用*****************************************************************
     if(key_array[0]) {if(i<5)i++;else i=0;
                        if(i==1) ForeWheelForword();
                        else if(i==2) ForeWheelReverse();
                        else if(i==3) TurnLeft();
                        else if (i==4) TurnRight();
                        else Stop();
                        LEDdisplay( 0x01 ,i  );
                        key_array[0]=0;}
     /**********************************************************************************************/
     Keycontrol();
   }

}
void TimeGo()
{
  uint timebuf; 
if(Time500ms>=2)
   {
      Time++;
      Time500ms=0;
      timebuf=Time; 
      led[0]=timebuf/100;
      timebuf=timebuf-led[0]*100;
      led[1]=timebuf/10;
      led[2]=timebuf-led[1]*10;
      LEDdisplay( 0x00 , led[0]);
      LEDdisplay( 0x01 , led[1]);
      LEDdisplay( 0x02 , led[2]);
   }

}
uint delay10stimes=0;
void Delay10s()
{
if(delay10stimes==0)
{
     timebuf_dl10s=Time; 
     delay10stimes=1;
}     
if( (Time-timebuf_dl10s)>=10)
   {
    Delay10sFlag=0;
    Blackwire=BLACKWIRE_H;
    ForeWheelReverse();
    LEDdisplay( 0x03 , 0x0a);
    LEDdisplay( 0x04 , 0x0a);
   }
*P_Watchdog_Clear=1;
}


void Startdelay()
{
if(startdelayflag==0)
{
	timebuf_dl3s=Time;
	startdelayflag=1;
}	
if((Time-timebuf_dl3s)>=3)
  { 
   StartFlag=0;
   Blackwire=0;
   ForeWheelForword();
   LEDdisplay( 0x03 , 0x0a);
   LEDdisplay( 0x04 , 0x0a);
  }
*P_Watchdog_Clear=1;
}

⌨️ 快捷键说明

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