|
這是一款能用的超聲波測距程序,三位共陰數(shù)碼管顯示測量結(jié)果,主電路較為簡單,發(fā)送接收電路這里沒有具體給出,可使用運放電路,也可以使用CX20106電路等,程序打包下放在百度網(wǎng)盤上,需要的可以自己下載。下載鏈接: http://pan.baidu.com/s/1kUV8MCR 密碼: 5kg8 同時這里也貼出一份。
可用的超聲波測距程序.rar
(216.8 KB, 下載次數(shù): 33)
2016-6-10 07:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
原理圖.jpg (252.75 KB, 下載次數(shù): 137)
下載附件
超聲波測距仿真
2016-6-10 07:22 上傳
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char code WE0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};
unsigned char temp[3];
sbit RX=P3^2; //
sbit TX=P2^5; //
sbit led1=P2^0;
sbit led2=P2^1;
sbit led3=P2^2;
bit flag=0;
uint time=0;
uint s=0;
void delay(int xms)//延時大概x毫秒
{
int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void start() //給至少10us的高電平,啟動模塊
{
uint n;
n=10;
while(n--)
TX=~TX;
}
uchar count()
{
time=TH0*256+TL0;
TH0=0;
TL0=0; //清零
s=(time*1.72)/100;//厘米
return s;
}
void dispros()//數(shù)據(jù)分割
{
temp[0]=s%1000/100;//百位
temp[1]=s%1000%100/10; //十位
temp[2]=s%100%100%10; //個位
}
void display() //顯示函數(shù)
{
led1=1;led2=0;led3=0;
P0= ~WE0[temp[0]]; delay(2);
led1=0;led2=1;led3=0;
P0= ~WE0[temp[1]]; delay(2);
led1=0;led2=0;led3=1;
P0= ~WE0[temp[2]]; delay(2);
led1=0;led2=0;led3=0;
}
void main()
{
TMOD=0X01; //定時器工作方式0
TH0=0;
TL0=0;
EA=1; //開總中斷
ET0=1;//開定時器中斷
TX=1;
while(1)
{
start();//啟動模塊
while(!RX); //當(dāng)RX為零時等待
TR0=1; //啟動計數(shù)
while(RX); //當(dāng)RX為1時計數(shù)并等待
TR0=0; //關(guān)閉計數(shù)器
count(); //計數(shù)
dispros(); //處理,分割數(shù)據(jù)
display(); //顯示
delay(2);
}
}
void t0() interrupt 0
{
flag=1; //溢出標(biāo)志
}
|
|