程序我没有仔细看,有些思路你考虑一下:
1、不知道你用的哪个型号的单片机,计数器所用的时钟频率是多少?5cm意味着约300uS的声波传输时间,结合你的计数频率和计数器的位数,看看300uS你的计数器有没有溢出;
2、超过5cm的时候,用示波器探一下有没有收到声波信号,可能是你的放大倍数不够,信号太弱导致信号没有被识别;
3、仔细考虑一下你的收发探头的安装方式,有没有可能接收到直射波,我觉得这种可能性要大一些;超声测距,接收探头必须只接收到反射波,否则测出来肯定不准确;
4、测试不准确,可以考虑进行多次测量,去掉一半的异常值(比如说测回来8个数,去掉2个Z大的,再去掉2个Z小的),然后取平均;这样测出来的结果相对准确一些。
就是这些了,希望对你有帮助