超声波测距代码:
cpp
#include<reg52.h>
sbit echo=P2^0 ; //回声接收端口
sbit trig=P2^1 ;//超声波触发端口
sbit wei1=P2^4;
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;
sbit in=P2^2;
#define dula P0
#define uchar unsigned char
#define uint unsigned int
long int distance=0;
uchar count;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x71};
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--);
}
void display(long int num)
{
uchar qian,bai,shi,ge;
if((num>5000)||(num==0))
{
qian=15;
bai=15;
shi=10;
ge=15;
}
else
{
qian=num/1000;
bai=(num/100)%10;
shi=(num/10)%10;
ge=num%10;
if(bai>0)
{
in=0;
}
else if(bai==0)
{
in=1;
}
}
wei1=1;
wei2=0;
wei3=0;
wei4=0;
P0=table[qian];
delay(2);
wei1=0;
wei2=1;
wei3=0;
wei4=0;
P0=table[bai];
delay(2);
wei1=0;
wei2=0;
wei3=1;
wei4=0;
P0=table1[shi];
delay(2);
wei1=0;
wei2=0;
wei3=0;
wei4=1;
P0=table[ge];
delay(2);
}
void Init_timer0(void)
{
TMOD=0x01;
TL0=0x66;
TH0=0xfc;
ET0=1;
EA=1;
}
void Init_parameter(void)
{
echo=0;
trig=0;
count=0;
distance=0;
}
void Trig_SuperSonic(void) //发出声波
{
trig=1;
delay(1);
trig=0;
}
void Measure_Distance(void)
{
uchar l;
uint h,y;
TR0=1;
while(echo)
{
;
}
TR0=0;
l=TL0;
h=TH0;
y=(h<<8)+1;
y=y-0xfc66;
distance=y+1000*count;
TL0=0x66;
TH0=0xfc;
delay(30);
distance=0.17*distance;
}
void main(void)
{
uchar a;
Init_timer0();
Init_parameter();
while(1)
{
Trig_SuperSonic();
while(echo==0)
{
;
}
Measure_Distance();
for(a=100;a>0;a--)
{
display(distance);
}
Init_parameter();
}
}
void timer0(void)interrupt 1
{
TF0=0;
TL0=0x66;
TH0=0xfc;
count++;
if(count==18)
{
TR0=0;
TL0=0x66;
TH0=0xfc;
count=0;
}
}