打印
[51单片机]

这是超声波测距程序,但是启动后一直显示7,求大神指导

[复制链接]
1046|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
21lic(gao)|  楼主 | 2016-11-3 22:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include "intrins.h"
#define uchar unsigned char
#define        uint  unsigned int
uint bai,shi,ge,shifen,time,distance,i,a;

sbit trig=P3^2;          //超声波发送
sbit echo=P3^3;          //回波接收
sbit smg0=P2^0;
sbit smg1=P2^1;
sbit smg2=P2^2;
sbit smg3=P2^3;

uchar code table0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};


void initial(void)                                          
{
  TMOD=0x01;
  TH0=0;
  TL0=0;
  TR0=0;
  EA=0;
}

void delay(uchar i)
{
  uchar j;
  for(j=i;j>0;j--)
  {}
}
                          
uint ultrasonic(void)
{
             trig=0;
                echo=1;
                delay(500);
        trig=1;
        delay(100);
        trig=0;
                while(!echo)
        TR0=1;
        while(echo)
        TR0=0;
                time=TH0*256+TL0;
                return (time*1.7)/100;
                TH0=TL0=0;                
}          




                                                       
void display(uint distance)                               
{
           bai=distance/1000;//分离百位
        shi=distance%1000/100;//分离十位
        ge=distance%100/10;//分离个位
        shifen=distance%10;//分离十分位

  P0=table0[bai];
  smg0=0;
  delay(500);
  P0=0xff;
  smg0=1;

  P0=table0[shi];
  smg1=0;
  delay(500);
  P0=0xff;
  smg1=1;

  P0=table1[ge];
  smg2=0;
  delay(500);
  P0=0xff;
  smg2=1;

  P0=table0[shifen];
  smg3=0;
  delay(500);
  P0=0xff;
  smg3=1;
}




                                                                               
void main(void)
{
      initial();
          distance=ultrasonic();        
          for(i=0;i<=1000;i++)
          {
          display(distance);
          }
}

相关帖子

沙发
冰零分子| | 2016-11-4 09:55 | 只看该作者
你这主程序没有死循环,执行完for语句就停止了啊

使用特权

评论回复
板凳
sanyaweiic| | 2016-11-9 18:28 | 只看该作者
楼主可以用时差法的来做。4精度模式19PS
测量范围它的输出电压为1.8~3.6V。 电流小于1,5UA   带宽1-8MHZ。
    (1)测量范围1
    测量范围1的特点是:两个stop通道共用一个start通道,双通道单精度模式75PS  单通道双精度37PS,测量范围是3.5ns~2.5US,每个通道都可以选择上升沿或者下降沿触发,ENABLE引脚提供强大的stop信号使 能功能可测量任意两个信号之间的时差。
   (2)测量范围2
    测量范围2的特点是:只有一个stop通道对应start通道,单通道单精度模式75PS  双精度37PS,4精度模式19PS。测量范围是500ns~4MS,有3次采样能力,测量范围:2×Tref~4ms,可选上升/下降沿触发。
(3)脉冲发生器
   模拟输入电路:斩波稳定低漂移比较器,具有可编程偏移电压,+-35MV  
温度测量单元; 2个或4个温度传感器,PT500/PT1000  内部集成施密特触发器

使用特权

评论回复
地板
Ketose| | 2016-11-10 13:48 | 只看该作者
void main(void)
{
      initial();
           
                                        while(1)
                                        {
                                                distance=ultrasonic();      
                                                display(distance);
                                        }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝