我用89S52做了个超声波测试的,感觉上电路、程序没错,调了一天但就是调不出来,一点数据显示都没!真烦部分程序如下:
void CountDistance() //计算距离
{
if(succeed_flag==1)
{
time=TH0;
time=time*256+TL0; //计算超声波往返用时
distance=time*0.0172; // 算出车尾距障碍物的距离
}
else
{
distance=0;
// test = !test; //测试灯变化
}
}
void DistanceDisplay()//距离值显示
{
uchar tvalue;
CountDistance();
if(distance==0)
{
Writestring(0x80,"No Signal!");
}
else
{
tvalue=distance;
disdata[0]=tvalue/10000+0x30;//千位数
disdata[1]=tvalue/1000+0x30;//百位数
disdata[2]=tvalue%1000/100+0x30;//十位数
disdata[3]=tvalue%100/10+0x30;//个位数
if(disdata[0]==0x30)
{
disdata[0]=0x20;//如果百位为0,不显示
if(disdata[1]==0x30)
{
disdata[1]=0x20;//如果百位为0,十位为0也不显示
if(disdata[2]==0x30)
disdata[2]=0x20;
}
}
WriteCommand(0x80);
WriteData(disdata[0]);//显示千位
WriteCommand(0x81);
WriteData(disdata[1]);//显示百位
WriteCommand(0x82);
WriteData(disdata[2]);//显示十位
WriteCommand(0x83);
WriteData(disdata[3]);//显示个位
WriteCommand(0x85);
WriteData(0x43);//显示小数点
WriteCommand(0x86);
WriteData(0x4D);//显示小数位
}
}
void send()
{
TL0=0x00;
TH0=0x00;
#pragma asm
MOV R4,#01H
SETB TR0
N1: CPL P3.4
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CPL P3.4
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
// NOP //10
DJNZ R4,N1
#pragma endasm
Delay5ms();
EA=1;
EX1=1;
}
//timer0中断子程
void timer0(void)interrupt 1//定时器0溢出,超过测距范围65535us*170m/s
{
TH0=0;
TL0=0;//复位
ET0=0;
TR0=0;//关闭定时器0
}
//外部中断int1中断子程
void exter1(void)interrupt 2
{
TR0=0;
EX1=0;
EA=0;
succeed_flag=1; //成功标志
}
void main()
{
LCMInit();
Writestring(0x80,"No Signal!");
distance=0;
time=0;
// times=0; //发射超声波次数
Transmit=0;
TMOD=0x01; //模式
TL0=0x00;
TH0=0x00;
IT1=1; // 外部中断1 exter1 为边沿触发(下降沿有效)
// EX1=0;
while(1)
{
succeed_flag=0; //清测量成功标志
send();
Delay5ms();
Delay5ms();
DistanceDisplay();
Delay5ms();
Delay5ms();
Delay5ms();
}
}
麻烦各位帮小弟分析一下,或有更好的资料可以发到QQ:330410780@qq.com
在此谢各位咯! |