超声波测距模块使用-基于51
#include <reg51.h>
typedef unsigned char u8;
typedef unsigned int u16;
u8 code ledseg[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40};
u8 code ledloc[8]={0xe3,0xe7,0xeb,0xef,0xf3,0xf7,0xfb,
0xff};
u8 ledcach[8]={0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40};
bit flg;
sbit trig=P3^6;
sbit echo=P3^2;
void delay(u16 t)
{
u8 i;
while (t--)
{
i=124;
while(i--);
}
}
void ledshow(u8 t)
{
u8 i,j;
for(j=0;j<t;j++)
{
for(i=0;i<8;i++)
{
P0=0;
P2=ledloc[i];
P0=ledcach[i];
delay(1);
}
}
}
void timer0initial()
{
TH0=35536/256;
TL0=35536%256;
TMOD=0x09;
TR0=1;
ET0=1;
EA=1;
}
void main( )
{
u8 i;
u16 time,dis;
flg=0;
trig=0;
while (1)
{
ledshow(40);
flg=0;
timer0initial();
trig=1;
i=10;
while(i--);
trig=0;
while(!echo);
while(echo && !flg);
if(!flg)
{
time=TH0*256+TL0;
dis=(time-35536)*0.17;
ledcach[0]=ledseg[dis%10];
ledcach[1]=ledseg[dis%100/10];
ledcach[2]=ledseg[dis%1000/100];
ledcach[3]=ledseg[dis%10000/1000];
ledcach[4]=ledseg[dis/10000];
for(i=5;i<8;i++)
{
ledcach[i]=0x0;
}
}
}
}
void timer0() interrupt 1
{
u8 i;
TR0=0;
flg=1;
for(i=0;i<8;i++)
{
ledcach[i]=0x40;
}
}