51单片机控制超声波测距,大家看看我的程序为什么不对,详细注释
#include<reg52.h>sbitin=P1^0;sbitRST=P1^1;sbitled7=P2^7;sbitPled1=P2^0;sbitPled2=P2^1...
#include<reg52.h>
sbit in = P1^0;
sbit RST= P1^1;
sbit led7= P2^7;
sbit Pled1= P2^0;
sbit Pled2= P2^1;
sbit Pled3= P2^2;
sbit Pled4= P2^3;
sbit Pled5= P2^4;
long int num; //num一个数值代表1ms
void delay(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<110;j++)
;
}
void main()
{
int s;
num=0;
TMOD = 0x01;
EA=1;
RST=1;
while(1)
{
if(in==0) //接受到超声回波,即最开始探测到物体
{
led7=0;
RST=0; //停止发射超声波,RST是超声波发射电路中555的使能端
delay(30000); //停止发射3ms,清空空间中超声波,并点亮LED7
led7=1;
RST=1; //认为空间中声波已经不存在,重新发射声波,并以此为计时起点,计算发射声波到接受到返回的声波的时间
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TR0=1; //开启定时器
for(s=0;s<100;s++) ; //延时极小段时间,防止刚发出的声波干扰接收端
ET0=1; //定时器0中断打开
RST=0; //停止发射声波,只使用一小段声波进行探测
while(1)
{
if(in==0) //接受到超声波(第二次),并以此为计时终点
{
ET0=0;
if(num==0) Pled1=0; //计算距离,点亮相应的LED等,物体在17mm以内
else if(num<=1) Pled2=0; // 物体在34mm以内
else if(num<=2) Pled3=0;
else if(num<=3) Pled4=0;
else if(num<=4) Pled5=0;
while(1) //测试完毕,程序停在这里
{;}
}
}
}
}
}
void time1() interrupt 1 //定时器0的中断服务程序
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
num=num+1; //定时到,加1ms
} 展开
sbit in = P1^0;
sbit RST= P1^1;
sbit led7= P2^7;
sbit Pled1= P2^0;
sbit Pled2= P2^1;
sbit Pled3= P2^2;
sbit Pled4= P2^3;
sbit Pled5= P2^4;
long int num; //num一个数值代表1ms
void delay(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<110;j++)
;
}
void main()
{
int s;
num=0;
TMOD = 0x01;
EA=1;
RST=1;
while(1)
{
if(in==0) //接受到超声回波,即最开始探测到物体
{
led7=0;
RST=0; //停止发射超声波,RST是超声波发射电路中555的使能端
delay(30000); //停止发射3ms,清空空间中超声波,并点亮LED7
led7=1;
RST=1; //认为空间中声波已经不存在,重新发射声波,并以此为计时起点,计算发射声波到接受到返回的声波的时间
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TR0=1; //开启定时器
for(s=0;s<100;s++) ; //延时极小段时间,防止刚发出的声波干扰接收端
ET0=1; //定时器0中断打开
RST=0; //停止发射声波,只使用一小段声波进行探测
while(1)
{
if(in==0) //接受到超声波(第二次),并以此为计时终点
{
ET0=0;
if(num==0) Pled1=0; //计算距离,点亮相应的LED等,物体在17mm以内
else if(num<=1) Pled2=0; // 物体在34mm以内
else if(num<=2) Pled3=0;
else if(num<=3) Pled4=0;
else if(num<=4) Pled5=0;
while(1) //测试完毕,程序停在这里
{;}
}
}
}
}
}
void time1() interrupt 1 //定时器0的中断服务程序
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
num=num+1; //定时到,加1ms
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询