51单片机实现超声波测距

2019-07-14 19:19发布

我在网上买的郭天祥的板子学习单片机,在做超声波测距时,障碍物离超声波模块太近显示600多cm,这是什么原因呢?第一次发帖,求大神指教!#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit trig=P1^7;
sbit echo=P1^6;
sbit dula=P2^6;
sbit wela=P2^7;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
uint bai,shi,ge,time,s;

void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}
void initHC()
{
        trig=0;
        echo=0;
}       

void initt0()
{
        TMOD=0x01;
        TH0=0;
        TL0=0;
        EA=1;
        ET0=1;
}

uint distance()
{
        time=TH0*256+TL0;
        TH0=0;
        TL0=0;
        s=time*0.01853;
        return s;
}

void lcd_com(uchar com)
{
        lcdrs=0;
        P0=com;
        delayms(5);
        lcden=1;
        delayms(5);
        lcden=0;
}

void lcd_date(uchar date)
{
        lcdrs=1;
        P0=date;
        delayms(5);
        lcden=1;
        delayms(5);
        lcden=0;
}

void initlcd()
{
        dula=0;
        wela=0;
        lcden=0;
        lcd_com(0x38);
        lcd_com(0x0c);
        lcd_com(0x06);
        lcd_com(0x01);
}

void main()
{
        initlcd();
        initt0();
        initHC();
       
        while(1)
        {
                trig=1;
                _nop_();_nop_();_nop_();_nop_();_nop_();
                _nop_();_nop_();_nop_();_nop_();_nop_();
                _nop_();_nop_();_nop_();_nop_();_nop_();
                _nop_();_nop_();_nop_();_nop_();_nop_();
                trig=0;
                while(echo==0);
                TR0=1;
                while(echo==1);
                TR0=0;
                distance();
                        bai=s/100%10;
                        shi=s/10%10;
                        ge=s%10;
                        lcd_com(0x80);
                        lcd_date('D');
                        lcd_date('i');
                        lcd_date('s');
                        lcd_date('t');
                        lcd_date('a');
                        lcd_date('n');
                        lcd_date('c');
                        lcd_date('e');
                        lcd_com(0x80+0x46);
                        lcd_date(0x30+bai);
                        lcd_date(0x30+shi);
                        lcd_date(0x30+ge);
                        lcd_date('c');
                        lcd_date('m');
                        delayms(1000);
                }
}

IMG20170827210441.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。