超声波测距的问题
时间:10-02
整理:3721RD
点击:
测距显示到65之后不显示66显示的是0,从0又开始了,是啥问题,还有我这个测距只能测1.3米什么问题,我的是CT107D开发板,下面是程序
#include<reg52.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define BUZZ XBYTE[0xBFFF]
uchar code table[]=
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
uchar dspbuf[8]={10,10,10,10,10,10,10,10};
uchar dspcom=0;
sbit TX=P1^0; //发送
sbit RX=P1^1; //接收
uchar a,flag;
void delay() //延迟函数
{
uchar i;
i=10;
_nop_();
_nop_();
_nop_();
while(--i);
}
void display() //显示函数
{
XBYTE[0xE000]=0xff;
XBYTE[0xC000]=(1<<dspcom);
XBYTE[0xE000]=table[dspbuf[dspcom]];
if(++dspcom==8)
{
dspcom=0;
}
}
void init() //初始化计时器
{
BUZZ=0;
TMOD=0x11;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TH1=0;
TL1=0;
EA=1;
ET0=1;
TR0=1;
}
void send_wave() //发送方波
{
uchar x;
for(x=0;x<8;x++) //发送八个方波
{
TX=1;
delay();
TX=0;
delay();
}
}
uint getdistance() //测距
{
uint distance,time;
send_wave();
TR1=1;
while((RX==1)&&(TF1==0)); //等待收到超声波
TR1=0;
if(TF1==1)
{
TF1=0;
distance=999;
}
else
{
time=TH1; //时间
time=(time<<8)|TL1;
distance=time*17/1000; //距离
}
TH1=TL1=0;
return distance;
}
void main()
{
uint value;
init();
while(1)
{
if(flag==1)
{
flag=0;
value=getdistance();
dspbuf[0]=value/100;
dspbuf[1]=value%100/10;
dspbuf[2]=value%10;
}
}
}
void timer0() interrupt 1 //中断
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
display();
if(++a==50)
{
a=0;
flag=1;
}
}
#include<reg52.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define BUZZ XBYTE[0xBFFF]
uchar code table[]=
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
uchar dspbuf[8]={10,10,10,10,10,10,10,10};
uchar dspcom=0;
sbit TX=P1^0; //发送
sbit RX=P1^1; //接收
uchar a,flag;
void delay() //延迟函数
{
uchar i;
i=10;
_nop_();
_nop_();
_nop_();
while(--i);
}
void display() //显示函数
{
XBYTE[0xE000]=0xff;
XBYTE[0xC000]=(1<<dspcom);
XBYTE[0xE000]=table[dspbuf[dspcom]];
if(++dspcom==8)
{
dspcom=0;
}
}
void init() //初始化计时器
{
BUZZ=0;
TMOD=0x11;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TH1=0;
TL1=0;
EA=1;
ET0=1;
TR0=1;
}
void send_wave() //发送方波
{
uchar x;
for(x=0;x<8;x++) //发送八个方波
{
TX=1;
delay();
TX=0;
delay();
}
}
uint getdistance() //测距
{
uint distance,time;
send_wave();
TR1=1;
while((RX==1)&&(TF1==0)); //等待收到超声波
TR1=0;
if(TF1==1)
{
TF1=0;
distance=999;
}
else
{
time=TH1; //时间
time=(time<<8)|TL1;
distance=time*17/1000; //距离
}
TH1=TL1=0;
return distance;
}
void main()
{
uint value;
init();
while(1)
{
if(flag==1)
{
flag=0;
value=getdistance();
dspbuf[0]=value/100;
dspbuf[1]=value%100/10;
dspbuf[2]=value%10;
}
}
}
void timer0() interrupt 1 //中断
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
display();
if(++a==50)
{
a=0;
flag=1;
}
}
总感觉这是一个16位的无符号数据除1000后取整的结果。是不是你这个受制于申请的变量长度的原因啊?
怎么改,大神,我快被这个问题烦死了
谢了