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

📄 chaosb.c

📁 自制实验超声波
💻 C
字号:
#include "reg51.h"
#include "7219.h"
#include"intrins.h"

#define uchar unsigned char
#define uint  unsigned int
uchar k[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};
sbit vout =P2^0;
bit flag;//成功标志  
bit wt;//溢出标志

float high,low;//超声波时间
uchar qian,bai,shi,ge;//距离的个位、十位、百位


 /*************************************************************************
*  函数原型:void delay_50us()
*  功    能:50us的延时
**************************************************************************/
void delay_50us(unsigned int t) // t=100, 5ms; t=1000, 50ms
{
 unsigned char j;  
 for(;t>0;t--)   
  for(j=19;j>0;j--);
}

 /*************************************************************************
*  函数原型:void work()
*  功    能:超声波距离转换
**************************************************************************/
void work(void)
{ 
  float value;
  value=(high*256+low)*17/1000-3;
  qian=value/1000;
  bai=(value-qian*1000)/100;
  shi=(value-qian*1000-bai*100)/10;
  ge=value-qian*1000-bai*100-shi*10;
 
}
/*************************************************************************
*  函数原型:void fas()
*  功    能:发送40khz的超声波
**************************************************************************/
void fas()
{
unsigned char i;
	     ET1 = 1;
		 TR1 = 1;
		 for(i=0;i<8;i++)
		   {
		     vout = ~vout;
		     _nop_();
		     _nop_();
		     _nop_();
		     _nop_();
		     _nop_();
		     _nop_();
		     _nop_();
		     _nop_();
		   }
		   delay_50us(1);
		   EX0 = 1;        //开启外部中断
		    EA = 1;
}
 /*************************************************************************
*  函数原型:void INIT1()
*  功    能:超声波计时溢出中断
**************************************************************************/
void INTT1() interrupt 3 
{
  EA = 0;
  TR1 = 0;
  TH1 = 0;
  TL1 = 0;
  wt=1;

    
}
 /*************************************************************************
*  函数原型:void work()
*  功    能:超声波返回中断
**************************************************************************/
void PINT0() interrupt 0 
{
  TR1 = 0;
  //ET1 = 0;     //关闭定时器0
  //EX1 = 0;
  EA = 0;
  low = TL1;
  high = TH1;
    TH1 = 0;
   TL1 = 0;
  flag = 1;
 // jis++;
}
 /*************************************************************************
*  函数原型:void max7219show()
*  功    能:超声波距离显示--厘米为单位
**************************************************************************/
void max7219show()
 {
	Write(0x04,k[ge]);
	Write(0x03,k[shi]);
    Write(0x02,k[bai]);
	Write(0x01,k[qian]);

}
main()
{ 
 	P0 = 0xff;
  	P1 = 0xff;
  	P2 = 0xff;
  	P3 = 0xff; 
  	TMOD = 0x10;
  	TH1 = 0;
  	TL1 = 0;
  	inith();
  max7219show();
  wt=1;
  while(1)
	 {
	  if(flag)
		  {
		    //EA = 0;
		   //if(jis>45)
		   //{
		    work();
			max7219show();
		//	jis=0;
			//}	
			delay_50us(6000);
		    flag = 0;
		    fas();
		  }
		 if (wt)
		  {
		    //EA=0;
		//	max7219show();
			wt=0;
		  	fas();
		  }
	 }
}

⌨️ 快捷键说明

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