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

📄 main.c

📁 本程序为51单片机超声波测距c程序
💻 C
字号:
/*********************************************/
//超声测距===================================/
/*******************************************/
#include <at89x52.h>
#include<INTRINS.H>

#define	 CSI1  P3_0 //P1_0 发射            //P3_0      
#define  CSO1  P3_1 //P1_1  接收           //P3_1
 
#define CSI2   P2_4 //P1_2              //P2_4
#define CSO2   P2_5 //P1_3              //P2_5


unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; 
/***************小段延时,消除误差********************/

void delay_100us(void)
{ unsigned char k;
  for(k=0;k<200;k++);
}


/***************40KHz方波延时程序********************/

void delay25us(void)
{
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();

  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();

  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();

}
void delay(int j)
{
  int i;
  for(;j!=0;j--)  
  for(i=124;i!=0;i--);
}


void delay_1s(unsigned char sec)
{ 
  for(;sec!=0;sec--)
  delay(1000);
}

int measure_time(void)
{

  unsigned int time=0;
  P2=0xff;
  CSI1=0;
  delay25us();
  CSI1=1;
  delay25us();
  CSI1=0;
  delay25us();
  CSI1=1;
  delay25us();
  CSI1=0;
  delay25us();
  CSI1=1;
  delay25us();
    	  //开始计算时间
  CSO1=1;   
  TH0=0;TL0=0;
  TR0=1;
  delay_100us();   //延时以消除误传
  TR1=1;
 
  while(!CSO1&&TH1<0xf6);
	
  TR0=0;
  TR1=0;
  TH1=0;TL1=0;
  time=TH0*255+TL0;
  TR0=0;
  TR1=0;
  TH1=0;TL1=0;
  if(time<500||time>3000)
  return 1;			    //没检测到人返回1
  else return 0;
  }

int measure_time2(void)
{

  unsigned int time=0;
  P2=0xff;
  CSI2=0;
  delay25us();
  CSI2=1;
  delay25us();
  CSI2=0;
  delay25us();
  CSI2=1;
  delay25us();
  CSI2=0;
  delay25us();
  CSI2=1;
  delay25us();
    	  //开始计算时间
  CSO2=1;   
  TH0=0;TL0=0;
  TR0=1;
  delay_100us();   //延时以消除误传
  TR1=1;
 
  while(!CSO2&&TH1<0xf6);
	
  TR0=0;
  TR1=0;
  TH1=0;TL1=0;
  time=TH0*255+TL0;
  TR0=0;
  TR1=0;
  TH1=0;TL1=0;
  if(time<1000)
     return 1;
  else 
     return 0;
  }




void main(void)
{
  unsigned char a=0,b=0,c=0,d=0; //d用于清除c
  
  P3_7=0;    //控制信号给凌阳
  TMOD=0x11; 
  while(1)
  { 
    a+=measure_time();  // 没人加1
    a+=measure_time();
    a+=measure_time();
    if(a==0)    //(a<3)
  {  a=0;
     b+=measure_time2();//
     b+=measure_time2();
     b+=measure_time2();
     d++;

     if(b==3)
     { c++;
	    if(c==3)
		{
		 P2=0xfd;
		 P3_7=1;
		 delay(100);
		 P3_7=0;
		 P0=table[c];  //显示
		// delay_1s(60);
	     c=0;
 		 }
    	 else P2=0xfe;
    } 
	 if(d==3)         //若三次中有又出现没有检测到就清除c
	 {
	   d=0;
	   c=0;
	   }
	P0=table[c];


     delay(500);
     P3_7=0;
//	 P2=0xff;
  }
    delay(1000);
    P2=0xff;
    a=0; 
    b=0;	
  }
}


⌨️ 快捷键说明

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