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

📄 main.c

📁 这个是做自动控制的小车的代码
💻 C
字号:
#include "common.h"
#include "config.h"
#include "timer.h" 
#include "pca.h"
#include "findline.h"
#include "bizhang.h"
#define T3RUN temppage=SFRPAGE;SFRPAGE=0x01;TR3=1;SFRPAGE=temppage
#define T4RUN temppage=SFRPAGE;SFRPAGE=0x02;TR4=1;SFRPAGE=temppage
#define T4STOP temppage=SFRPAGE;SFRPAGE=0x02;TR4=0;SFRPAGE=temppage
#define T3STOP temppage=SFRPAGE;SFRPAGE=0x01;TR3=0;SFRPAGE=temppage
#define S TMR4          //S为路程计数值

/*定时器2。3。4寄存器和定时器2。3。4捕捉寄存器字声明*/
sfr16 RCAP2=0xca;
sfr16 RCAP3=0xca;
sfr16 RCAP4=0xca;
sfr16 TMR4=0xcc;
sfr16 TMR3=0xcc;
sfr16 TMR2=0xcc;
uchar temp;
uchar temp1;
uchar temp3;
uchar k;    //避障接收次数计数
uchar ir[8];
uchar int0_count;
uchar temppage;
uchar tiepiancount=0x00;
bit c_flag;                  //到达C标志,1到达,0未到达
xdata uint s[6];  //16位

void delay1ms(uint time){//延迟1ms
	uint i;
	uint j;
	for (i=0;i<time;i++){
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    		for(j=0;j<300;j++);
	}
}	
void ring()              //测试用的报警蜂鸣器程序,低电平报警
{
  	 temppage=SFRPAGE;
	 SFRPAGE=0X0F;
	 P4_7=0;
     delay_ms(1);
	 P4_7=1;
     delay_ms(1);
	 SFRPAGE=temppage;
}
void ringl()              //测试用的报警蜂鸣器程序,低电平报警
{
  	 temppage=SFRPAGE;
	 SFRPAGE=0X0F;
	 P4_7=0;
     delay_ms(25);
	 P4_7=1;
     delay_ms(25);
	 SFRPAGE=temppage;
}
void main(void)   //90s计时成功,40K方波成功,路程计数成功,金属探测成功8。20
{
   config();
   EA=1;
   IE|=0x01;   //开外部中断0
   // t1_count_ini();     
   //t2_time90s_ini();  
   //t2_time90s_start();  //开始90计时
  // t4_count_ini();//开始计路程,*/
   // t3_ini();
    //t3_fre_set(100);
    //t3_fre_set40k();
   // T3RUN; 
    	
    //t0_ini();
    pca_ini();
    go_forward();
 
while(1);
/*hile(1)            //寻迹
	{
	    if(c_flag)       //是否到达C点
		   	break;       //到达C点
	    else
		findline();       //未到达C点
	}*/
/*while(1)
	{stop();
	delay1ms(5000);       //致达C点,停车5S
   
   /*while(1)
	{ 
	  if(S<0XFFFF)         //是否越过障碍区,
      {  
       //bizhang_tr(); 
  bizhang_isr();
      }
      else                      
      break;
	}*/
  
}

void int0_isr() interrupt 0
{              
  EA=0;
 
  //int0_count++;
  //if(int0_count>=2)          //450ms内有两次以上反射,则认为有障碍物,进行避障
  //bizhang_isr();
 //else
  EA=1;
}
void T0_isr() interrupt 1
{
  EA=0;            
  TH0     = 0x90;            //定时器赋初值
  TL0     = 0x0a;
  int0_count=0;              //450ms清零
  EA=1;
}
void t2ISR() interrupt 5
{    //T2定时溢出处理,计数351次后停车90s
    EA=0;
	temppage=SFRPAGE;
	SFRPAGE=0X00;
	TF2=0;
    ET2=0;
	SFRPAGE=temppage;
    t2count++;
	if(t2count<20)
	{  
	   //P4_7=0;
	   void t2_start();
	}
	else
	{
	temppage=SFRPAGE;
	SFRPAGE=0X0F;
	 P4_7=0;
     delay_ms(10);
	 P4_7=1;
	 SFRPAGE=temppage;
	 //stop();
	}
	ET2=1;
	EA=1;

}
void PCA_ISR(void) interrupt 9
{   
    uchar temp1;               //temp保存第一次的探测结果,temp1保存第一次的探测结果,k保存记录次数
	SFRPAGE=0x00;
    EIE1&=0xF7; //关PCA中断
	ring();
    delay1ms(15);
	temp1=PCA0CN&0X0C;
/*	if(k<2)
	{
	   temp=temp1;
	   k++;
	   //delay1ms(500);
	}
	else
    {
	  if(temp1==temp)
	  {*/
	  switch(temp1)
    	{ 
		  case 0x0c:                  //前方有障碍
	            front_bi(); 
				break;

		    case 0x08:                         //左方有障碍物
 			   //delay1ms(300);
			   //if(CCF2==1)
			   //front_bi();
		       //else
			   left_bi();
				break;
		   case 0x04:		                  //右方有障碍物 
               /* if(CCF3==1)
			    front_bi();
		        else*/
		        right_bi();            
				break; 
	   	   case 0x00:                         //没有障碍物
				break;
	   }
	   k=0;
	  //}
//	 }
    temppage=SFRPAGE;
	SFRPAGE=0x00;
	CCF2=0;
	CCF3=0;
    SFRPAGE=temppage; 
	EIE1|=0x08;//PCA中断使能,EPCA
}
/*void PCA_ISR(void) interrupt 9
{   
    ring();
    EIE1&=0xF7; //关PCA中断
  	delay1ms(5);
	P0|=0x0c;
    if(k<2)
    {
	  ir[k]=P0&0x0c;
	  k++;
	}
    else 
    {
	   if(ir[0]==ir[1])
      {	
         switch(ir[0])
    	{
		   case 0x00:
		       temppage=SFRPAGE;
               SFRPAGE=0x0f;
		       	P5_1=0;
				P5_0=0;
                delay1ms(500);
                P5_1=1;
				P5_0=1;
                delay1ms(500);
                SFRPAGE=temppage;
				break;
		    case 0x04:
 			     temppage=SFRPAGE;
                 SFRPAGE=0x0f;
				 P5_1=0;
                 delay1ms(500);
                 P5_1=1;
				 delay1ms(500);
                 SFRPAGE=temppage;
				break;
		   case 0x08:		
                 temppage=SFRPAGE;
                 SFRPAGE=0x0f;
                 P5_0=0;
                delay1ms(500);
				P5_0=1;
                delay1ms(500);
                SFRPAGE=temppage;              
				break; 
	   	case 0x0c:
				break;
	   }
        k=0;
	}
 }
	 CCF2=0;
	 CCF3=0;
	EIE1|=0x08;//PCA中断使能,EPCA
}*/
/*void PCA_CEX3_ISR(void) interrupt 9  //*CEX3负边沿触发模式,用来探测金属
 {  
    EIE1&=0xF7; //关PCA中断
    CCF3=0;
	ring();
  	temppage=SFRPAGE;
    SFRPAGE=0x00;
	PCA0CPM3 = 0x31;    // 正负边沿触发模式,CEX3捕捉中断使能  
 	PCA0CPL3 = 0x00;    
 	PCA0CPH3 = 0x00;
    SFRPAGE=temppage;	
	if(S>0XFFFF)
    c_flag=1;
	else
	{
	  tiepiancount++;
	  s[tiepiancount]=S;
	 }
 }*/

⌨️ 快捷键说明

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