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

📄 超声波程序.c

📁 超声波传感器测距 能准确测出物体据传感器之间的距离
💻 C
字号:
#include <REGX51.H>
#define uchar unsigned char
#define uint unsigned int
#define v 0.34			//声波在空气中的传播速度

sbit out=P3^2;  
bit flag=0;
uchar N;
uchar  dis_SMG[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};	  //数码管显示码
	uint time;
	 float s;		//距离长度
	 uchar sm=0;	  //数码管段位
	 uint fir,sec,thi,four;   //显示值
	 
  void scan( );
  void delay( uint i) ;      //延时函数
  
  void main (void)
  {	 
     delay(500);
	 TMOD=0x11;        //TO为计时(发脉冲的时间),T1为计数(算出超声波的传输时间)
	           // IE1=1;
	 IT1=1;
	 EA=1;
	 ET0=1;
	 ET1=1;
	 EX1=1;
	 
	 TH0=(65536-200)/256;
	 TL0=(65536-200)%256;   //T0发200微秒的时间
	 TR0=1;
     TH1=0x00;
	 TL1=0x00; 
	                     //高电平发脉冲
	   N=0;		 //计时标记
	   
	   while(1)
	   {                         // if(TF1==1)	{ TF1=0;N++;  }
	

	        if(flag==1)
			 { 	EA=0;
			    flag=0;
			 
			   s=v*time*100;
	     fir=s/1000;
		 sec=(s-1000*fir)/100;
		 thi=(s-fir*1000-sec*100)/10;
		 four=s-1000*fir-100*sec-thi; }
		   
	 	  scan(); }
	  
   }

	 void scan(  )	  //显示函数
	 {
	   switch(sm++)
		  {
		    case 1: P0=dis_SMG[fir];
			       P1=0x01; delay(20);   break;
			case 2: P0=dis_SMG[sec];
			       P1=0x02;  delay(20);  break;
			case 3: P0=dis_SMG[thi];
			       P1=0x04;  delay(20);  break;
			case 4: P0=dis_SMG[four];
			       P1=0x08;  delay(20);  break;
		 	 default: {  }               break;
		   }
			if(sm>4)  sm=0;     }


	   void outer1(void)interrupt 2 using 2
	 {    
	      EA=0;
	     TR1=0;                   //关定时器
		 time=(65536*N+TH1*256+TL1)/2;
	      flag=1;	              //标记开始算时间
		   EX1=0; 
		   EA=1;

		     }


	   void timer0(void)interrupt 1 using 1
	   {   
	     TR0=0;
	     out=0;		   //关闭3.2的高电平
		   TR1=1;		 //打开定时器1
		   
		   }
		  
		  
		   void delay( uint i)
		   {  
		      for(i;i>0;i--);
           }

⌨️ 快捷键说明

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