单片机学习小组
直播中

范琴英

7年用户 195经验值
私信 关注

超声波测距显示的数字总是卡死

#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;
***it trig=P2^1;
***it echo=P2^2;
***it en=P3^4;
***it rs=P3^5;
***it rw=P3^6;
***it p***=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;
0=com;
delay(1);
en=1;
delay(1);
en=0;
}
void wrdat(uchar dat)
{
rs=1;
rw=0;
0=dat;
delay(1);
en=1;
delay(1);
en=0;
}
void init()
{
EA=1;
TMOD=0x01;
ET0=1;
TH0=0;
TL0=0;
p***=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[qian]);
wrdat(table[bai]);
wrdat(table[shi]);
wrdat(table[ge]);
}
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;
}
在测距时,显示的数字总是卡死

回帖(5)

郭武莱

2019-2-27 10:54:23
你分析过问题没有?
你自己觉得最可能出问题在哪里?
举报

邱敏

2019-2-27 11:14:16
小弟觉得应该是程序出问题了,可是就是检查不出哪里出错,有时候程序可以执行,但是一变换距离就卡了
举报

王伟鹏

2019-2-27 11:20:00
我也觉得是程序有问题。
举报

刘颖

2019-2-27 11:27:28
肯定是程序有问题吗嘛~
举报

更多回帖

发帖
×
20
完善资料,
赚取积分