显示出来的数跟距离根本没关系。
#include<reg51.h>
#include<lcd.h>
#define uint unsigned int
#define uchar unsigned char
sbit trig=P1^0;
sbit echo=P1^1;
unsigned int time=0;
unsigned int timer=0;
unsigned long int S=0;
bit flag =0;
uchar error[]=" error ";
uchar number[10]="0123456789";
uchar num[16];
void lcd(uint d)
{
unsigned char x,y,i;
LcdWriteCom(0x01);
for(x=16;x>0;x--)
{
y=d%10;
num[x]=y;
d=d/10;
if(d<1)
break;
}
for(i=1;i<=16;i++)
{
LcdWriteData(number[num[i]]);
}
}
void delay10us(uint a)
{
uint b;
for(;a>0;a--)
for(b=120;b>0;b--);
}
void sr04()
{
uchar i;
trig=0;
echo=0;
TMOD=0x01;
TH0=0;
TL0=0;
ET0=1;
TR0=0;
EA=1;
trig=1;
while(echo==1);
TR0=1;
trig=0;
while(echo==0);
TR0=0;
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*182)/10;
if(flag==1)
{
flag=0;
LcdInit();
for(i=1;i<=16;i++)
{
LcdWriteData(error[i]);
}
}
if(S<15&&S>0)
{
LcdInit();
for(i=1;i<=16;i++)
{
LcdWriteData(error[i]);
}
}
else
{
lcd(S);
}
}
void zd0() interrupt 1
{
flag=1;
}
void main()
{
LcdInit();
while(1)
{
sr04();
}
}
此帖出自
小平头技术问答
一周热门 更多>