微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 超声波测距

超声波测距

时间:10-02 整理:3721RD 点击:
#include <AT89X52.h>       //调用51单片机的头文件
#include <intrins.h>
#include <math.h>
//---------------------------------------

sbit A0=P1^0;           //U165(74HC138)的A0脚接在P1.0口上
sbit A1=P1^1;           //U165(74HC138)的A1脚接在P1.1口上
sbit A2=P1^2;           //U165(74HC138)的A2脚接在P1.2口上
int N;
unsigned char code LED[10]=
{              
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
sbit TIRG=P3^4;           
sbit ECHO=P3^2;
        unsigned int flag;
void Timer0(void) interrupt 1
{                       
        flag=0;
}
void main(void)            
{
        long S;
        unsigned int i,c,flag;
        unsigned int  Timeout;
   TMOD&=0xF0;                    //将TMOD的低4位定时器0控制部分清零
   TMOD|=0x01;                    //设置定时器0为方式1
        TMOD=0x01;
   TL0=0;                              //设置定时器0初值低8位
   TH0=0;                              //设置定时器0初值高8位
   TR0=0;                         //停止定时器0
   ET0=1;                         //Timer0中断允许
   EA=1;                          //开全局中断
        while(1)
        {               
                TIRG=1;                                    
                  i=4;                                            
      while(i>0)                                 
              i--;                                             
                  TIRG=0;                                             
                TR0=0;                                                
                TL0=0;                     
           TH0=0;                                    
                flag=0;
                Timeout=0;
           while((ECHO==0)&&(Timeout++<20000));                        
           TR0=1;                          
                Timeout=0;
           while((ECHO==1)&&(Timeout++<20000));                                
           TR0=0;                                                
      S=(TH0*256+TL0)/58;        
                        
//                //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                              P1=0x03;                          //选通数码管的千位进行显示
//            P2=LED[S/1000];
//                          for(c=0;c<250;c++);
//            P1=0x02;                           //数码管的百位进行显示
//            P2=LED[(S%1000)/100];
                                for(N=0;N<10;N++)
                                {                   P0_0=1;  
            P0_1=1;
                                           P2=LED[(S%100)/10];
             P0_0=1;  
            P0_1=0;                          //十位进行显示
                                                for(c=0;c<1500;c++)
                                           P0_0=1;  
            P0_1=1;        
                                       
           P2=LED[S%10];                                       
            P0_0=0;  
            P0_1=1;                                 
            P2=LED[S%10];
                           for(c=0;c<1000;c++);
                                       
                                }
        }
}

顶一下新手

好牛逼啊                       

看了下,、还不错

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top