求大神帮忙看下这个超声波程序错在哪了?

2019-03-24 18:21发布

显示出来的数跟距离根本没关系。
#include<reg51.h>
#include<lcd.h>
#define  uint unsigned int
#define  uchar unsigned char
sbit trig=P1^0;
sbit echo=P1^1;
unsigned int  time=0;
unsigned int  timer=0;
unsigned long int S=0;
bit flag =0;
uchar error[]="     error     ";
uchar number[10]="0123456789";
uchar num[16];   
void lcd(uint d)
{
        unsigned char x,y,i;
        LcdWriteCom(0x01);
        for(x=16;x>0;x--)
        {
                y=d%10;
                num[x]=y;
                d=d/10;
                if(d<1)
                        break;
        }
        for(i=1;i<=16;i++)
        {
                LcdWriteData(number[num[i]]);
        }
}
void delay10us(uint a)
{
        uint b;
        for(;a>0;a--)
                for(b=120;b>0;b--);
}

void sr04()
{
    uchar i;
        trig=0;
        echo=0;
        TMOD=0x01;
        TH0=0;
        TL0=0;
        ET0=1;
        TR0=0;
        EA=1;
        trig=1;
        while(echo==1);
        TR0=1;
        trig=0;
        while(echo==0);       
        TR0=0;
        time=TH0*256+TL0;
        TH0=0;
        TL0=0;
        S=(time*182)/10;
        if(flag==1)                    
        {
                flag=0;
                LcdInit();
                for(i=1;i<=16;i++)
           {
                        LcdWriteData(error[i]);
                }
        }
        if(S<15&&S>0)
        {
               
                LcdInit();
           for(i=1;i<=16;i++)
           {
                        LcdWriteData(error[i]);
                }
        }
        else
        {
                lcd(S);
        }
}
void zd0() interrupt 1                  
    {
            flag=1;                                                       
    }
void main()
{
    LcdInit();
        while(1)
        {
                sr04();
        }
} 此帖出自小平头技术问答
0条回答

一周热门 更多>