超声波模块用的是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;
}
|