51超声波测距

2019-07-15 20:30发布

大家好,我用的超声波测距模块是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--);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
ST_Lover
1楼-- · 2019-07-16 02:02
不要这么SB好不好  自己调试啊  你调试了几天啦,不知道啥问题 就发代码 汗
mengqiqi
2楼-- · 2019-07-16 02:56
代做 加Q1925276216详谈
540525866
3楼-- · 2019-07-16 07:03
看看、、、

一周热门 更多>