微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 超声波测距乱显示

超声波测距乱显示

时间:10-02 整理:3721RD 点击:
如题 为什么会乱显示

晕,这样说谁知道问题在哪儿

什么都没有,那里知道啊

我就是看有人回复没有,还是有好心人回复我就上程序给看看
/*************************************************
发射脉冲的端口:P10
接收脉冲的端口:P11
让定时器t0处于计时状态
--------------------
*****************************************************/
#include <reg51.h>
#include<intrins.h>       // 声明了void _nop_(void);
sbit  Trig=P1^0;
sbit  Echo=P1^1;
bit temp;
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
unsigned int dat=0;//全局变量,保持测得的距离
void disp(unsigned char x1,unsigned char x2,unsigned char x3,unsigned char x4);
//=========延时函数============================
void delay()
{unsigned int n;
for(n=0;n<200;n++);
}
void main()
{unsigned char k;
TMOD=0x01;//计数器0工作于方式1
TH0=0x00;
TL0=0x00;
while(1)
{ET0=1;
EA=1;
Echo=1;//将其作为输入引脚
  Trig=1;                   //  启动一次模块
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
  Trig=0;
  
  while(!Echo);//等待发送信号
  TR0=1;//开启计时器

while(Echo);//为高电平,处于计时状态,为0时表明接收到回波
  TR0=0;//关闭计时器,按方式1,最大为65536us,大约能到达9m
dat=TH0*256+TL0;
//为使得计算范围始终在int类型内
  dat=dat*0.18;//计算出距离,单位:cm
    TH0=0x00;
    TL0=0x00;//值清零
for(k=20;k>0;k--)
disp(dat/1000,dat%1000/100,dat%100/10,dat%100%10);
}
}
//====定时器溢出中断====
void intT0_int() interrupt 1
{
disp(10,10,10,10);//超出距离,定时器溢出指示
}
/*******四位数码管的显示函数
段选:P0
位选:P20-P23*******/
void disp(unsigned char x1,unsigned char x2,unsigned char x3,unsigned char x4)
{
P2=0x08;//高半字节保持不变,设定为选信号
P0=tab[x1];
delay();
P2=0x04;
P0=tab[x2];
delay();
P2=0x02;
P0=tab[x3]+0x80;
delay();
P2=0x01;
P0=tab[x4];
delay();
}

正纠结之中》》》》

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top