#include <REGX52.H>
sbit LED1 = P3^6;
sbit LED2 = P3^7;
sbit Trig = P1^5;
sbit echo = P1^6;
void Delay2000ms() //@11.0592MHz
{
unsigned char i, j, k;
//_nop_();
i = 15;
j = 2;
k = 235;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Time_0init()
{
TMOD &= 0xF0; //设置定时器模式
TMOD &= 0x01;
TL0 = 0; //设置定时初始值
TH0 = 0; //设置定时初始值
//先配成都为0时候距离65536时间比较长,不着急
}
void Delay10us() //@11.0592MHz
{
unsigned char i;
i = 2;
while (--i);
}
void trig_0() //触发超声波
{
Trig = 0;
Trig = 1;
Delay10us();
Trig = 0;
}
void main()
{
double time,dis;
trig_0();
Time_0init();
while(echo == 0); //上电就低电平
TR0 = 1; //开始计时
while(echo == 1); //高电平回收
TR0 = 0; //不满足就计时结束
time = (TH0*256+TL0)*1.085; // TH0和TL0都是8位,TH0应该左移8位留给TL0 所用时间一 //下1.085us
//二进制左移八位相当于原来的乘以2的8次方
dis = time * 0.017; //一来一回
if(dis < 10) //单位约掉故为10cm
{
LED1 = 0;
LED2 = 1;
}else
{LED1 = 1;
LED2 = 0;
Delay2000ms();
}
TL0 = 0; //设置定时初始值
TH0 = 0;
}