资讯详情

蓝桥杯单片机----超声波传感器的基本控制

超声波传感器是将超声波信号转换成其他能量信号(通常是电信号)的传感器。超声波振动频率高于20kHz的机械波。它具有频率高、波长短、绕射现象小的特点,特别是方向性好,能成为射线和定向传播。超声波具有很大的液体和固体穿透能力,特别是在阳光不透明的固体中。超声波碰到杂质或分界面会产生显着反射形成反射回波,碰到活动物体能产生多普勒效应。超声传感器广泛应用于工业、国防、生物医学等领域。

声音是由物体振动引起的,其频率为20HZ-20KHZ超过20KHZ被称为超声波,低于20HZ称为次声波。常用的超声波频率是几十KHz----几十MHz。

(1) 超声波在气体、液体、固体等介质中有效传播。

(2) 超声波传递能量的能力很强。

(3) 超声波具有反射特性,会产生干扰、叠加和共振。

(4) 当超声波在液体介质中传播时,会在界面上产生空化现象和强烈的冲击。

(1) 超声波在医学中的应用主要是诊断疾病,已成为临床医学中不可缺少的诊断方法。超声诊断的优点是无痛、无损伤、方法简单、图像清晰、诊断准确性高。

(2) 在工业上,超声波的典型应用是金属的无损检测和超声波测厚。在过去,许多技术受到阻碍,因为它们无法检测到物体组织的内部,超声波传感技术的出现改变了这种情况。

也许我听说过超声波的应用最多不是以上两个,而是用超声波测距。我们的设计内容也是用超声波传感器测距,用数字管显示。在此之前,我们先来看看超声波测距的其他应用场景。~

1.超声波传感器可以检测容器的状态。当超声波传感器安装在塑料熔体罐或塑料颗粒室顶部并向容器内部发出声波时,可以分析容器的状态,如满、空或半满。

2.超声波传感器可用于检测透明物体、液体、任何粗糙、光滑、光滑的致密材料和不规则物体。但不适用于室外、炎热环境或压力罐和泡沫物体。

3.超声波传感器可应用于食品加工厂,实现塑料包装检测的闭环控制系统。有了新技术,可以在洗瓶机、噪声环境、温度变化极大等潮湿环境中进行探测。

4.超声波传感器可用于检测液位、透明物体和材料、控制张力和测量距离,主要用于设备运输、塑料加工和汽车工业的包装、制瓶和材料搬运。超声波传感器可用于工艺监控,提高产品质量,检测缺陷,确定是否存在等方面。

设计内容:

1.第一个数字管数字管显示符"C",第二至第五位数字管熄灭,后三位数字管显示距离,单位CM;

2.超出测量距离范围的数字管显示为999,后三个未使用的数字管应熄灭。

#include <stc15f2k60s2.h> #include <intrins.h>  #define uchar unsigned char   ///定义无符号字符类型uchar #define uint unsigned int     ///定义无符号整型类型uint  #define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}  sbit TX = P1^0; sbit RX = P1^1;  uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0x8e,0xc6};//数字0~九、-、关F”,“C” uchar yi,er,san,si,wu,liu,qi,ba;   //定义字符变量yi,er,san,si,wu,liu,qi,ba,控制数字管显示控制变量  uint time,Distance,trie; bit flag=0;  void delayms(int ms);          ///延迟函数 void allinit();                //初始化函数 void display1(uchar yi,uchar er);   //第一和第二段数字管函数 void display2(uchar san,uchar si);  //第三、四段数字管函数 void display3(uchar wu,uchar liu);  //第五、六段数字管函数 void display4(uchar qi,uchar ba);   //第七、八段数字管函数 void Timer0Init(void);  //2毫秒@12.000MHz void Timer1Init(void);  //2毫秒@12.000MHz void send_fb(); void Ultrasonic();  void main()//主函数 {  allinit();                  ///初始化函数  Timer0Init();  Timer1Init();  yi=11;er=11;san=11;si=11;wu=11;liu=11;qi=11;ba=11.//关闭所有数字管  while(1)  {   yi=13;er=11;san=11;si=11;wu=11;   if(Distance>=100){liu=Distance/100;qi=Distance0/10;ba=Distance;}   else if(Distance>=10){liu=11;qi=Distance/10;ba=Distance;}   else if(Distance<10){liu=11;qi=11;ba=Distance;}      Ultrasonic();   display1(yi,er);          //第一和第二段数字管函数   display2(san,si);         //第三、四段数字管函数   display3(wu,liu);         //第五、六段数字管函数   display4(qi,ba);          //第七、八段数字管函数  } } void Ultrasonic() {  if(flag == 1)  {   flag = 0;   send_fb();   TR1 = 1;   while((RX == 1)&&(TF1 == 0));   TR1 = 0;   if(TF1 == 1)   {    TF1 = 0;    Distance = 999;   }   else    {    time = TH1 << 8;    time |= TL1;    Distance = time*0.017;    Distance = Distance/12;   }   TH1 = 0;   TL1 = 0;  } } void send_fb() {  unsigned int i = 8;  do  {   TX = 1;   somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;   TX = 0;   somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;  }while(i--); } void Timer0Init(void)  //2毫秒@12.000MHz {  AUXR |= 0x80;  //定时器时钟1T模式  TMOD &= 0xF0;  //设置定时器模式  TL0 = 0x40;  ///设定时初值  TH0 = 0xA2;  ///设定时初值  TF0 = 0;  //清除TF0标志  TR0 = 1;  ///定时器0开始计时  EA = 1;ET0 = 1; } void Timer1Init(void)  //2毫秒@12.000MHz {  AUXR |= 0x40;  //定时器时钟1T模式  TMOD &= 0x0F;  //设置定时器模式 } void time0() interrupt 1 {  TL0 = 0x40;  ///设定时初值  TH0 = 0xA2;  ///设定时初值    if(  trie == 100)  {   trie = 0;   flag = 1;  } } void delayms(int ms)///延迟函数 {  uint i,j;  for(i=ms;i>0;i--)   for(j=845;j>0;j--); } void allinit()///初始化函数 {  P2=0XA0;P0=0X00;      ///关闭蜂鸣器继电器  P2=0X80;P0=0XFF;      //关闭一切LED灯    P2=0XC0;P0=0XFF;      ///选择所有数字管段  P2=0XFF;P0=0XFF;      //关闭一切数码管 } void display1(uchar yi,uchar er)//第一和第二段数字管函数 {  P2=0XC0;P0=0X01;              //选中第一个数码管段选
	P2=0XFF;P0=tab[yi];            //让第一个数码管显示yi指向的值
	delayms(1);                    //延时1ms
	
	P2=0XC0;P0=0X02;               //选中第二个数码管段选
	P2=0XFF;P0=tab[er];            //让第一个数码管显示er指向的值
	delayms(1);	                   //延时1ms
}
void display2(uchar san,uchar si)//第三、四段数码管函数
{
	P2=0XC0;P0=0X04;               //选中第s三个数码管段选
	P2=0XFF;P0=tab[san];           //让第一个数码管显示san指向的值
	delayms(1);                    //延时1ms
	
	P2=0XC0;P0=0X08;               //选中第四个数码管段选
	P2=0XFF;P0=tab[si];            //让第一个数码管显示si指向的值
	delayms(1);	                   //延时1ms
}
void display3(uchar wu,uchar liu)//第五、六段数码管函数
{
	P2=0XC0;P0=0X10;               //选中第五个数码管段选
	P2=0XFF;P0=tab[wu];            //让第一个数码管显示wu指向的值
	delayms(1);                    //延时1ms
	
	P2=0XC0;P0=0X20;               //选中第六个数码管段选
	P2=0XFF;P0=tab[liu];           //让第一个数码管显示liu指向的值
	delayms(1);	                   //延时1ms
}
void display4(uchar qi,uchar ba)//第七、八段数码管函数
{
	P2=0XC0;P0=0X40;               //选中第七个数码管段选
	P2=0XFF;P0=tab[qi];            //让第一个数码管显示qi指向的值
	delayms(1);                    //延时1ms
	
	P2=0XC0;P0=0X80;               //选中第八个数码管段选
	P2=0XFF;P0=tab[ba];            //让第一个数码管显示ba指向的值
	delayms(1);                    //延时1ms
}

 

标签: 液位传感器缺陷3fb振动速度传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台