标题:
HC-SR04的询问和求解
[打印本页]
作者:
HanZG
时间:
2024-12-4 12:27
标题:
HC-SR04的询问和求解
我用的是51单片机开发板,我想把HC-SR04超距检测的结果在LCD1602上显示,但数据检测很不好,总在01234这几个之徘徊。
大佬们看看我写的HC-SR04模块哪里有错误,要改进哪里:
#include <REGX51.H>
#include "Delay.h"
sbit Trig=P1^7;
sbit Echo=P1^6;
void Timer_Init()
{
TMOD |= 0x01;
TH0 = 0;
TL0 = 0;
TR0=0;
}
/*
初始化
*/
void HC_Init()
{
Trig=0;
Echo=0;
Timer_Init();
}
unsigned int HC_Getdistance()
{
unsigned char time,distance;
Trig=1;
Delay10us();
Trig=0;
while(Echo==0);
TR0=1;
while(Echo==1);
TR0=0;
time=(256*TH0+TL0)*1.085;
TH0 = 0;
TL0 = 0;
distance=time*17/100;
Delay_ms(80);
return distance;
}
作者:
飞云居士
时间:
2024-12-11 21:38
在 HC_Getdistance 函数内定义 unsigned char time,distance;,使用 unsigned char 类型对于时间和距离变量可能范围不够。尤其是时间变量,如果定时器计数较多,unsigned char 类型会很快溢出,导致计算出来的时间和距离都是错误的。
将 time 和 distance 变量改为 unsigned int 类型,以扩大其能够表示的数据范围,确保可以正确存储计算过程中的数值,避免出现数据溢出
作者:
glinfei
时间:
2024-12-12 08:38
你这几句计算的是超声脉冲的宽度:
while(Echo==0);
TR0=1;
while(Echo==1);
TR0=0;
作者:
jjy1039
时间:
2024-12-12 08:58
time=(256*TH0+TL0)*1.085; 这一行,time是无符号字符型,无符号字符最大255,th0取任意值,结果均大于255,数据溢出,同时1.085是浮点型,运算会舍弃小数部分,
distance=time*17/100;这一行,distance最大值是255,如果time大于15就会造成溢出,同时除100后是浮点型,数据类型不一致
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1