#include<reg52.h>
sbit TX =P3^6; //信號(hào)發(fā)送端
sbit RX =P3^7; //信號(hào)接收端 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) //定義一個(gè)小延時(shí),哈哈
{
while(--i);
} void sent() //定義一個(gè)發(fā)送
{
TX=1; //發(fā)送端發(fā)送信號(hào)
delay(25); //給一個(gè)大于10US的信號(hào)
TX=0; //關(guān)閉發(fā)送端信號(hào)
} void Count()
{
time=TH0*256+TL0; //計(jì)算時(shí)間
TH0=0; //復(fù)位
TL0=0; //復(fù)位
S=(time*1.7)/10; //計(jì)算距離,單位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() //定義一個(gè)接收
{
TR0=1; //定時(shí)器0開
while(RX); //持續(xù)延時(shí)RX為高電平的時(shí)間
TR0=0; //定時(shí)器0關(guān)
Count(); //調(diào)用Count
} main()
{
int lv;
EA=1; //總中斷開
ET0=1; //定時(shí)器中斷0開
ET1=1; //定時(shí)器中斷1開
TMOD=0X11; //定義TO,T1由TCON控制,工作方式為方式1
TH0=0;
TL0=0;
TH1=0;
TL1=0;
while(1)
{
RX=1; //給RX一個(gè)高電平
sent(); //給發(fā)送端一個(gè)>10us的信號(hào)
for(lv=2000;lv>0;lv--)
{
if(RX==1)
{
receive(); //調(diào)用RECEIVE
}
}
}
}
//寫了我一天的時(shí)間,唉,效率還是太低···努力,努力···
|