STC89C52超声波实现测距

先给出代码,详细讲解后续再出

#include <REGX52.H>

//距离小于10cm,D5亮,D6灭,反之相反现象 

sbit D5=P2^7;

sbit D6=P2^0;

sbit Trig=P1^5;

sbit Echo=P1^6;


void Timer0Init()
{
        TMOD &= 0xF0;                //设置定时器模式
        TMOD |= 0x01;        
        TL0=0;
        TH0=0;
        //设置定时器0工作模式,初始值设定为0开始数数,不着急启动定时器
        

}
void Delay10us()                //@11.0592MHz
{
        unsigned char i;

        i = 2;
        while (--i);
}

//十进制2左移1位,变成20,相当于乘以10
//二进制1左移1位,变成10(2),相当于乘以2,左移8位乘以2的8次方

void startHC()
{
        Trig=0;
        Trig=1;
        Delay10us();
        Trig=0;
        
}

void main()
{
        double time;
        double dis;
        
         Timer0Init();
//        //1.Trig,给一个10us脉冲信号
        while(1)
        {
        startHC();
        
//        2.由低电平跳转到高电平,表示开始发波
//        
        
        while(Echo==0);
        //波发出去的那一下,开始启动定时器
        
        TR0=1;
        
//        3.由高电平跳转到低电平,表示波回来了
        while(Echo==1);
        //波回来了定时器停止计时
        TR0=0;
        
//        4.计算出中间经过了多少时间
//        
        time=(TH0*256+TL0)*1.085;//us 单位
        
//        5.距离=速度(340m/s)*时间
        dis=time*0.017;
        
        if(dis<0)
        {
                D5=0;
                D6=1;
        }
        else
        {
                D5=1;
                D6=0;
        
        }
                //定时器清零以便下一次计算
        TL0=0;
        TH0=0;

}
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值