历史上的今天
返回首页

历史上的今天

今天是:2025年01月09日(星期四)

正在发生

2018年01月09日 | 超声波测距数码管显示程序

2018-01-09 来源:eefocus

//超声波模块显示程序 
#include      //包括一个52标准内核的头文件 
#define uchar unsigned char //定义一下方便使用 
#define uint  unsigned int 

#define ulong unsigned long 
sbit Tx  = P3^3; //产生脉冲引脚 
sbit Rx  = P3^2; //回波引脚 
uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管0-9 
uint distance[4];  //测距接收缓冲区 
uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i;  //自定义寄存器 
bit suCCeed_flag;  //测量成功标志 
//********函数声明 
void conversion(uint data); 
void delay_20us(); 
 void pai_xu(); 
void main(void)   // 主程序 
{  uint distance_data,a,b; 
   uchar CONT_1;    
   i=0; 
   flag=0; 
    Tx=0;       //首先拉低脉冲输入引脚 
    TMOD=0x11;    //定时器0,定时器1,16位工作方式 
    TR0=1;         //启动定时器0 
   IT0=0;        //由高电平变低电平,触发外部中断 
    ET0=1;        //打开定时器0中断 
    EX0=0;        //关闭外部中断 
    EA=1;         //打开总中断0     
   
     
while(1)         //程序循环 
    { 
  EA=0; 
         Tx=1; 
        delay_20us(); 
        Tx=0;         //产生一个20us的脉冲,在Tx引脚   
        while(Rx==0); //等待Rx回波引脚变高电平 
         succeed_flag=0; //清测量成功标志 
         EX0=1;          //打开外部中断 
           TH1=0;          //定时器1清零 
        TL1=0;          //定时器1清零 
         TF1=0;          // 
        TR1=1;          //启动定时器1 
   EA=1; 

      while(TH1 < 30);//等待测量的结果,周期65.535毫秒(可用中断实现)   
          TR1=0;          //关闭定时器1 
        EX0=0;          //关闭外部中断 

    if(succeed_flag==1) 
         {      
           distance_data=outcomeH;                //测量结果的高8位 
           distance_data<<=8;                   //放入16位的高8位 
             distance_data=distance_data|outcomeL;//与低8位合并成为16位结果数据 
            distance_data*=12;                  //因为定时器默认为12分频 
           distance_data/=58;                   //微秒的单位除以58等于厘米 
         }                                      //为什么除以58等于厘米,  Y米=(X秒*344)/2 
                                                   // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58  
    if(succeed_flag==0) 
           { 
            distance_data=0;                    //没有回波则清零 

           } 

           distance[i]=distance_data; //将测量结果的数据放入缓冲区 
            i++; 
             if(i==3) 
               { 
                 distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4; 
               pai_xu(); 
             distance_data=distance[1]; 

       
       a=distance_data; 
       if(b==a) CONT_1=0; 
       if(b!=a) CONT_1++; 
       if(CONT_1>=3) 
           { CONT_1=0; 
              b=a; 
              conversion(b); 
            }        
               i=0; 
               }          
     } 

//*************************************************************** 
//外部中断0,用做判断回波电平 
INTO_()  interrupt 0   // 外部中断是0号 
 {     
     outcomeH =TH1;    //取出定时器的值 
     outcomeL =TL1;    //取出定时器的值 
     succeed_flag=1;   //至成功测量的标志 
     EX0=0;            //关闭外部中断 
  } 
//**************************************************************** 
//定时器0中断,用做显示 
timer0() interrupt 1  // 定时器0中断是1号 
   { 
      TH0=0xfd; //写入定时器0初始值 
     TL0=0x77;          
     switch(flag)    
      {case 0x00:P0=ge; P2=0x7f;flag++;break; 
        case 0x01:P0=shi;P2=0xbf;flag++;break; 
        case 0x02:P0=bai;P2=0xdf;flag=0;break; 
      } 
   } 

//显示数据转换程序 
void conversion(uint data)   
 {   
    uchar ge_data,shi_data,bai_data ; 
    bai_data=data/100 ; 
    data=data%100;   //取余运算 
    shi_data=data/10 ; 
    data=data%10;   //取余运算 
    ge_data=data; 

    bai_data=SEG7[bai_data]; 
    shi_data=SEG7[shi_data]&0x7f; 
    ge_data =SEG7[ge_data]; 

    EA=0; 
    bai = bai_data; 
    shi = shi_data; 
    ge  = ge_data ;  
     EA=1; 
 } 
//****************************************************************** 


void delay_20us() 
 {  uchar bt ; 
    for(bt=0;bt<60;bt++); 
 } 
  void pai_xu() 
  {  uint t; 
  if (distance[0]>distance[1]) 
    {t=distance[0];distance[0]=distance[1];distance[1]=t;}  
  if(distance[0]>distance[2]) 
    {t=distance[2];distance[2]=distance[0];distance[0]=t;}  
  if(distance[1]>distance[2]) 
    {t=distance[1];distance[1]=distance[2];distance[2]=t;}   
    } 


推荐阅读

史海拾趣

创都(CAX)公司的发展小趣事

在电子行业的浪潮中,创都(CAX)公司凭借其卓越的技术创新能力,逐渐崭露头角。公司创始人李先生是一位热衷于新技术的电子工程师,他带领着一支由业内顶尖人才组成的研发团队,不断挑战技术极限。在一次偶然的机会中,他们成功研发出了一款具有革命性意义的高效能芯片,这款芯片不仅性能卓越,而且成本大幅降低,迅速在市场中获得了广泛认可。随着这款芯片的成功推出,创都公司的知名度迅速提升,订单量激增,公司也借此机会逐步扩大了生产规模和市场占有率。

DAYLIGHT公司的发展小趣事

在公司的初创阶段,DAYLIGHT就意识到技术研发对于企业发展的重要性。因此,公司投入大量资金用于研发新的电子产品和技术。经过几年的努力,DAYLIGHT成功研发出一项具有革命性的电子芯片技术,这一技术大大提高了电子产品的性能和可靠性,使得DAYLIGHT的产品在市场上获得了极高的声誉。

Crystal Clear Technology公司的发展小趣事

面对全球电子市场的竞争压力,Crystal Clear Technology决定加快国际化步伐。公司先后在多个国家设立研发中心和生产基地,利用当地的资源和优势,提升产品的竞争力和生产效率。同时,公司还积极参与国际展览和交流活动,与国际同行建立广泛的合作关系,为公司的发展注入了新的活力。

世纪金光(CENGOL)公司的发展小趣事

自成立以来,世纪金光始终注重科研实力的积累。公司积极承担国家科研任务,已转接和直接承担国家科研任务80多项。在这些科研项目中,世纪金光取得了丰硕的成果,其中12项成果处于国内同类技术领先水平,5项成果达到国际先进水平。这些成果的取得不仅提升了公司的技术水平,也为公司在半导体领域的竞争提供了有力支撑。

ERNI Electronics公司的发展小趣事

ERNI Electronics的源头可以追溯到1947年,当时其瑞士母公司成立。而在1956年,ERNI Electronics以生产继电器为起点,正式进入电子行业。在创立初期,公司专注于继电器的开发和制造,积累了丰富的电子行业经验。随着市场需求的不断变化,ERNI在1967年开发了第一个背板连接器,这一创新产品迅速成为公司的核心产品,并推动了公司的快速发展。

FEMA Electronics Corporation公司的发展小趣事

FEMA的创始人李明(化名)是一位资深的电子工程师,他在一次与客户的交流中,发现了市场对高质量电子元件的迫切需求。于是,他毅然决定创办FEMA,专注于研发和生产高性能的电子元器件。创业初期,公司面临着资金短缺、技术瓶颈等重重挑战。然而,李明凭借坚定的信念和不懈的努力,成功攻克了技术难关,并与多家知名企业建立了合作关系,为公司的发展奠定了坚实的基础。

问答坊 | AI 解惑

速度快了很多。。

刷新速度很快啊,服务器和网站优化做的很好了。。 庆祝一个。…

查看全部问答>

可控硅专辑---原理篇、参数篇、应用篇、检测篇

可控硅专辑(原理篇) 目录 可控硅元件的工作原理及基本特性可控硅元件—可控硅元件的结构可控硅知识的问与答可控硅元件—可控硅整流电路如何鉴别可控硅的三个极晶闸管的工作原理可关断晶闸管(GTO)硅控制开关(SCS)逆导晶闸管(RCT)硅双向开 ...…

查看全部问答>

关于3.3V转5V的电路分析问题

各位高手:     由于本人电路水平有限,对下图不知道分析的对不对,请大家帮忙看看,不对的地方请指正,谢谢!!     我的分析:         当3.3V口输出高电平为3.3V时,那么A点电电压为3.9V ...…

查看全部问答>

RTL8019复位引脚的地址

有没有人知道在EASYARM2200上的RTL8019的复位引脚,即第33引脚的地址。…

查看全部问答>

我是一名初学者,请各位硬件工程指指路

我毕业快要两年了,我们公司是工业仪表的计量产品的,我现在是做硬件,但是感觉基本上没我什么事可以做。PCB和软件搞定后才给我们了,我就是硬件调试和测试及维修工作,我现在基本和软件不沾边。数字芯片类的电路不比纯模拟电路,电路不用自己怎么 ...…

查看全部问答>

怎么用电脑发送一个24V的脉冲给机器?

没一点头续,最好有详细资料。 多谢!…

查看全部问答>

★★★★★诚聘【MSP430】单片机设计工程师★★★★★

诚聘单片机设计工程师: 1,会msp430,有设计经验 2,有msp430   C语言开发经验 3,懂信号处理,会用matlab 4,最好有工作经验1年以上 电话:010-81504648 公司网站:www.safezx.com 注:工作地点北京…

查看全部问答>

ARM,USB,免费PCB板. 申请一个一起研究吧

IC开发网07新春大型促销活动开始啦! 庆祝IC开发网全新平台升级成功 ——暨IC开发网07新春大型促销活动 www.icdev.com.cn   @   2007年1月19日至2月4日) 1、返券?不实惠!我们直降! 本站所有自主研发模块、DIY套装、 ...…

查看全部问答>

请问TMS320F28335和TMS320F28334的区别在哪里?

RT~ 我在用一块mini28335开发板,不小心烧坏了板子,目前手里有TMS320F28334的芯片,不知可不可以把板子上的芯片替换成28334暂时使用?…

查看全部问答>

PROTUES

为什么我的PROTUES不能仿真了 一仿真就不响应 同一个程序 以前能仿真 现在不行了…

查看全部问答>