|
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar time,distance,ge,shi,bai;
sbit Trig=P0^0; //超聲波發(fā)射
sbit Echo=P0^1; //回波接收
sbit smg0=P2^0; //數(shù)碼管0位選
sbit smg1=P2^1; //數(shù)碼管1位選
sbit smg2=P2^2; //數(shù)碼管2位選
sbit smg3=P2^3; //數(shù)碼管3位選
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //四位共陽(yáng)數(shù)碼管段碼
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
/*
**********************************************
* 函 數(shù) 名 :超聲波測(cè)距
* 功能說(shuō)明 :?jiǎn)?dòng)超聲波,并計(jì)算距離
* 形 參 :無(wú)
* 返 回 值 :int distance
**********************************************
*/
int chaoshengbo(void)
{
TH0=0;
TL0=0;
Trig=0;
delay(1);
Trig=1;
delay(10);
while(!Echo);
{
TR0=1;
}
while(Echo);
{
TR0=0;
time=TH0*256+TL0;
distance=(time*1.7)/100;
return distance;
}
}
/*
**********************************************
* 函 數(shù) 名 :測(cè)量距離數(shù)碼管顯示
* 功能說(shuō)明 :用四位共陽(yáng)數(shù)碼管顯示測(cè)量距離
* 形 參 :uint distance
* 返 回 值 :無(wú)
**********************************************
*/
void display(int distance)
{
bai=distance/100;
shi=distance%100/10;
ge=distance/10;
P0=table[bai];
smg0=0;
delay(5);
smg0=1;
P0=table[bai];
smg0=0;
delay(5);
smg0=1;
P0=table[shi];
smg1=0;
delay(5);
smg1=1;
P0=table[ge];
smg2=0;
delay(5);
smg2=1;
}
/*
**********************************************
* 函 數(shù) 名 :主函數(shù)
* 功能說(shuō)明 :
* 形 參 :無(wú)
* 返 回 值 :無(wú)
**********************************************
*/
void main(void)
{ //4位共陽(yáng)數(shù)碼管顯示超聲波測(cè)的距離
distance=chaoshengbo();
display(distance); //超聲波測(cè)距,返回一個(gè)整形參數(shù)distanc
}
|
|