找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2608|回复: 2
打印 上一主题 下一主题
收起左侧

超声波测距超出量程以后显示错误数据。

[复制链接]
跳转到指定楼层
楼主
ID:279646 发表于 2018-1-25 15:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
超声波模块用的是HC-SR04,参数上写的是最大测距4.5m。在超出量程以后LCD上显示的却是1米多,其他的距离测量都正常,就这里很奇怪,找不到原因,大家帮我看看哪里有问题?
附上主程序
#include<reg52.h>
#include"LCD1602.H"
sbit in=P1^0;
sbit out=P1^1;
char list[]={'0','1','2','3','4','5','6','7','8','9','.','-'};
char value[5];
int time=0;
int j=0;
bit flag=0;

void delay12us()   //误差 -0.064236111111us
{
    uchar a;
    for(a=4;a>0;a--);
}
void delay60ms()   //误差 -0.000000000014us
{
    unsigned char a,b,c;
    for(c=7;c>0;c--)
        for(b=168;b>0;b--)
            for(a=22;a>0;a--);
}



void Timerinit(){
        TMOD=0x10;
        TL1=0;
        TL1=0;
        EA=1;
        ET1=1;
}

void Wavedriver(){
        in=1;
        delay12us();
        in=0;
}
void Readtime(){
        while(!out);
        TR1=1;
        while(out);
        TR1=0;
}
void Datapros(){
        float tp;
        int distance;
        time=256*TH1+TL1;
        tp=0.017*time*1.085;
        TH1=0;
        TL1=0;
        distance=tp*100;
        if((distance>=45000)||(flag==1))
                {
                        value[0]=list[11];
                        value[1]=list[11];
                        value[2]=list[11];
                        value[3]=list[11];
                        value[4]=list[11];
                        flag=0;
                }
        else
                {
                        value[0]=list[distance/10000];
                         value[1]=list[distance%10000/1000];
                     value[2]=list[distance%1000/100];
                     value[3]=list[10];
                     value[4]=list[distance%100/10];
                }
}                 

void Lcddisplay(){
        lcdinit();
        for(j=0;j<5;j++)
        {
                writedat(value[j]);
        }

}
int main(){
        Timerinit();
        while(1){
                Wavedriver();
                Readtime();
                Datapros();
                Lcddisplay();
                delay60ms();
        }       

}

void Timerint() interrupt 3
{
        flag=1;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:82765 发表于 2018-1-25 16:10 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

板凳
ID:279646 发表于 2018-1-27 19:33 | 只看该作者
cjjcjj1 发表于 2018-1-25 16:10
HC-SR04测量距离,经过实物测试是 2.4 米以内

不止,用这个我测量最大到过3米左右。 而且这不是主要问题 主要问题是当明显超量程以后 它应该显示----。但是我这个超量程了显示错误的数据。程序的问题不知道出在哪。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表