超声波测距程序
#include <stc15f2k60s2.h>
#include <intrins.h>
void shumaguan();
void Timer0Init();
void Delay500ms();
unsigned char abile[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
unsigned char saomiao[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};
unsigned int distance;
void Send_Wave();
sbit TX=P1^0;
sbit RX=P1^1;
unsigned int time=0;
void mdistance();
void main()
{
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;P2=0XA0;P0=0X00;
Timer0Init();
while(1){
mdistance();
if(distance ==999)
{
saomiao[0]=0x8e;
saomiao[1]=0x8e;
Delay500ms();
}
else{
saomiao[0]=abile[(distance%100)/10];
saomiao[1]=abile[distance%10];
Delay500ms();
}
}
}
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void weixuan() interrupt 1
{
unsigned char i;
P2=P2&0x1f|0xe0;
P0=0xff;
P2=0x1f;
P2=P2&0x1f|0xc0;
P0=1<<i;
P2=0x1f;
P2=P2&0x1f|0xe0;
P0=saomiao[i];
P2=0x1f;
i++;
if(i==8) i=0;
}
void Timer0Init() //[email protected]
{
AUXR |= 0x80; //?????1T??
TMOD &= 0xF0; //???????
TL0 = 0x9A; //??????
TH0 = 0xA9; //??????
TF0 = 0; //??TF0??
TR0 = 1; //???0????
EA=1;
ET0=1;
}
void Send_Wave()
{
TX=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
void mdistance()
{
unsigned int time=0;
TMOD&=0X0F; //定时器1模式
TL1=0; //初始化
TH1=0;
Send_Wave();
TR1=1; //启动定时器
while((RX==1)&&(TF1==0)); //等待超声波信号返回,或者超出值
TR1=0; //关闭定时器
if(TF1==1)
{
TF1=0; //超出距离
distance = 99;
}
else
{
time=TH1*256+TL1;
distance=time*0.017;
TH1 = 0; //
TL1 = 0;
}
}