#include <REGX52.H>
//配置超声波模块串口
sbit Trig=P1^0;
sbit Echo=P1^1;
//本程序使用超声波模块实现灯的亮灭
void Delay15us() //@11.0592MHz,延时15us函数
{
unsigned char i;
i = 4;
while (--i);
}
void Timer0Init(void) //@11.0592MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0; //设置定时初值
TH0 = 0; //设置定时初值
}
void main()
{
double time;
double juli;
Timer0Init();
while(1)
{
Trig=0;
Trig=1;
Delay15us();
Trig=0;//开始发送数据
while(Echo==0)
{
//当Echo为0时说明没有接收到信号,在程序中等待
}
//当Echo=1时说明开始发送信号,打开计时器开启
TR0=1;//开启计时器
while(Echo==1)
{
//同理当Echo持续为高电平时,没有接收到返回的数据
}
//Echo=0时接收到数据
TR0=0;
time=((TH0*256)+TL0)*1.085;
juli=time*0.017;
if(juli < 10)
{
P2_0=0;//led小灯
P2_1=1;
}
else
{
P2_0=1;
P2_1=0;
}
TL0 = 0; //设置定时初值
TH0 = 0; //设置定时初值
}
}
接线没问题,为什么超声波模块只有在每次重新给电的一瞬间起作用