龙道行 发表于 2012-9-1 09:40:50

超声波测距,求大侠帮助

本帖最后由 龙道行 于 2012-9-1 10:15 编辑

#include<reg52.h>
#define u unsigned int
#define uchar unsigned char
uchar code table0[]="距离是:";
uchar code table[]="0123456789";
u s,time;
uchar bai,shi,ge,qian;
sbit trig=P2^1;
sbit echo=P2^2;
sbit en=P3^4;
sbit rs=P3^5;
sbit rw=P3^6;
sbit psb=P3^7;
void delay(u x)
{
        u y,z;
        for(y=x;y>0;y--)
                for(z=110;z>0;z--);
}
void mai()
{
        trig=0;
        delay(1);
        trig=1;
        delay(1);                                                  
        trig=0;
}
void wrcom(uchar com)
{
        rs=0;
        rw=0;
        P0=com;
        delay(1);
        en=1;
        delay(1);
        en=0;
}
void wrdat(uchar dat)
{
        rs=1;
        rw=0;
        P0=dat;
        delay(1);
        en=1;
        delay(1);
        en=0;
}
void init()
{
        EA=1;
        TMOD=0x01;
        ET0=1;
        TH0=0;
        TL0=0;
        psb=1;
        wrcom(0x38);
        wrcom(0x0c);
        wrcom(0x01);
}
void dis0()
{
        uchar i;
        wrcom(0x80);
        for(i=0;i<8;i++)
        {
                wrdat(table0);
                delay(1);
        }
        wrcom(0x86);
        wrdat('c');
        wrdat('m');
}
void dis()
{
        wrcom(0x84);
        wrdat(table);
        wrdat(table);
        wrdat(table);
        wrdat(table);
}
void jisuan()
{
        time=TH0*256+TL0;
        s=time*1.87/100+1;
        TH0=0;
        TL0=0;
        if(s>9999)
        {
                uchar i;
                wrcom(0x86);
                for(i=0;i<4;i++)
                {
                        wrdat('-');
                }
        }
        else
        {
                qian=s/1000;
                bai=s%1000/100;
                shi=s%100/10;
                ge=s%10;
        }
}
void main()
{
        init();
        dis0();
        while(1)
        {
                mai();
                while(!echo);
                TR0=1;
                while(echo);
                TR0=0;
                jisuan();
                dis();
                delay(1000);
        }
}
void timer0() interrupt 1
{
        TH0=0;
        TL0=0;
}


测距离时,老是卡在那里,一转换距离,就不准,甚是郁闷

avr-qq 发表于 2012-9-1 10:01:41

到底有什么问题, 让别人猜 ?

龙道行 发表于 2012-9-1 10:15:44

avr-qq 发表于 2012-9-1 10:01 static/image/common/back.gif
到底有什么问题, 让别人猜 ?

测距离时,老是卡在那里,一转换距离,就不准,甚是郁闷

xsh2005105326 发表于 2012-9-1 10:19:21

{:lol:}贴个程序算啥?

1米49 发表于 2012-9-27 10:58:43

主函数里面的超声波出发程序 换到中断里面,让中断定时60-100MS触发一次就可以了
页: [1]
查看完整版本: 超声波测距,求大侠帮助