大家好,我用的超声波测距模块是HC-SR04,目的是检测小于一米则报警。但是下载后没反应,求指教,谢谢!
程序如下:
#include<reg52.h>
unsigned char pp,i;
double s,aa;
sbit beep=P2^3; //蜂鸣器
sbit TXD=P0^0; //发送端
sbit RXD=P0^1; //接收端
void delay1ms(void); //延时1ms,误差 -0.651041666667us
void delay100us(void); //延时100微秒,误差 -0.173611111111us
void init(void) //初始化函数
{
TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。
TH0=0Xff; //定时器设置,每隔100微秒发起一次中断。
TL0=0Xa4;
ET0=1; //开定时器0中断
EA=1; //开总中断
TXD=0;//初始化
RXD=0;
delay1ms();
}
void main(void)
{
init();
while(1)
{
TXD=1;//开始工作
delay100us();
if(RXD==1) //如果接收端为高电平
{
TR0=1; //启动定时器
if(RXD==0) //检测接收端是否为低电平,如果是低电平则进入以下函数
{
TR0=0; //关闭定时器
TXD=0; //发送端置为低电平
aa=pp; //把此时的计数值赋给aa
pp=0; //把计数值置零
s=(aa*100/1000000)*340; //计算距离
if(s<1) //如果距离小于1m则报警
beep=0;
else //否则不报警
beep=1;
for(i=0;i<80;i++)//延时80ms
delay1ms();
}
}
}
}
void
time0() interrupt 1
{
TH0=0Xff;
TL0=0Xa4;
pp++;
}
void delay1ms(void) //延时1ms,误差 -0.651041666667us
{
unsigned char a,b;
for(b=102;b>0;b--)
for(a=3;a>0;a--);
}
void delay100us(void) //延时100微秒,误差 -0.173611111111us
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=43;a>0;a--);
}
一周热门 更多>