#include<reg52.h>
sbit TX =P3^6; //信号发送端
sbit RX =P3^7; //信号接收端 unsigned long S;
unsigned int time;
unsigned char qian,bai,shi,ge;
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管值 void delay(unsigned int i) //定义一个小延时,哈哈
{
while(--i);
} void sent() //定义一个发送
{
TX=1; //发送端发送信号
delay(25); //给一个大于10US的信号
TX=0; //关闭发送端信号
} void Count()
{
time=TH0*256+TL0; //计算时间
TH0=0; //复位
TL0=0; //复位
S=(time*1.7)/10; //计算距离,单位MM
if(S<5000)
{
qian=tab[S/1000]; //定义第四位
bai=tab[S/100%10]; //定义第三位
shi=tab[S/10%10]; //定义第二位
ge=tab[S%10]; //定义第一位
P1=ge; //送出显示
P0=3;
delay(300);
P1=shi;
P0=2;
delay(300);
P1=bai;
P0=1;
delay(300);
P1=qian;
P0=0;
delay(300);
}
} void receive() //定义一个接收
{
TR0=1; //定时器0开
while(RX); //持续延时RX为高电平的时间
TR0=0; //定时器0关
Count(); //调用Count
} main()
{
int lv;
EA=1; //总中断开
ET0=1; //定时器中断0开
ET1=1; //定时器中断1开
TMOD=0X11; //定义TO,T1由TCON控制,工作方式为方式1
TH0=0;
TL0=0;
TH1=0;
TL1=0;
while(1)
{
RX=1; //给RX一个高电平
sent(); //给发送端一个>10us的信号
for(lv=2000;lv>0;lv--)
{
if(RX==1)
{
receive(); //调用RECEIVE
}
}
}
}
//写了我一天的时间,唉,效率还是太低···努力,努力···
|