#include<reg52.h>
sbit TX =P3^6; //信號發(fā)送端
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}; //數(shù)碼管值 void delay(unsigned int i) //定義一個小延時,哈哈
{
while(--i);
} void sent() //定義一個發(fā)送
{
TX=1; //發(fā)送端發(fā)送信號
delay(25); //給一個大于10US的信號
TX=0; //關閉發(fā)送端信號
} 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); //持續(xù)延時RX為高電平的時間
TR0=0; //定時器0關
Count(); //調(diào)用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(); //給發(fā)送端一個>10us的信號
for(lv=2000;lv>0;lv--)
{
if(RX==1)
{
receive(); //調(diào)用RECEIVE
}
}
}
}
//寫了我一天的時間,唉,效率還是太低···努力,努力···
|