HR-SR04超声波测距调试不对,求各位大神帮忙,真心呀

qq_22734955 2015-05-11 06:08:36

我用的HR-SR04模块做的超声波信号的发射和接收,用得C52,程序本来是要用超声波测障碍物的距离,可是LCD1602上显示的距离是固定的,而且和实际距离无关
#include<reg52.h>
#include<intrins.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dispBUF[33]={" Distance: mm "};
uchar numcode[10]={'0','1','2','3','4','5','6','7','8','9'};
uint num[29]={0};
uchar jsh,jsl;
uchar count=0;
uint distance;
uchar bdata flag;
sbit RS=P2^0;
sbit RW=P2^1;
sbit E =P2^2;
sbit Busy = P0^7;
void Delay(uint time);
void delay1ms(uint ms);
void delay();
void delay15(uchar us);
void BUMA(void);
void B20_WDAT(uchar dat);
uchar B20_RDAT(void);
void Write_Comm(uchar);
void Write_Data(uchar);
void Init_LCD(void);
sbit START =P1^0;
sbit CNT =P2^5;
sbit CSBIN =P2^6;
sbit BUZZER =P3^7;
/******************ö***************************/
void timer1(void)interrupt 2 using 1
{TR1=0;}
/*************************/
void timer0(void)interrupt 1 using 0
{
TH0=0x15;
TL0=0xA0;
TH1=0;
TL1=0;
count++;
_nop_();
_nop_();
_nop_();
_nop_();
CNT=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
CNT=0;
_nop_();
_nop_();
_nop_();
_nop_();
TR1=1;
delay15(50);
}
/****************************************/
void SYS_INIT()
{
uchar i;
for(i=0;i<29;i++)
{ num[i]=0;}
TMOD=0x11;
TH0 =0x15;
TL0 =0xA0;
P0 =0;
CNT=0;
CSBIN=0;
EA =1;
}
/********************************************
void JULIJS()
{
float c,d,s;
uint t;
c=331.4;
t=jsh*256+jsl-120;
d=(c*t*0.001)/2;
d*=d;
s=d-7.98;
distance=sqrt(s);
}
/*******************************/
void HEXtoBCD()
{
float tp;
unsigned long int tmp;
tp*=10;
tmp=tp;
num[12]=tmp/100;
num[12]=num[12]|0x80;
num[13]=tmp/10-(tmp/100)*10;
tmp=distance;
num[25]=tmp/1000;
tmp%=1000;
num[26]=tmp/100;
tmp%=100;
num[27]=tmp/10;
tmp%=10;
num[28]=tmp/1;
}

/********************************************/
void LCD_DISP()
{
uchar b,d;
Init_LCD();
Write_Comm(0x01);
Write_Comm(0x80); ·
Write_Comm(0xc0);
for(b=16;b<33;b++)
{
d=dispBUF[b];
if((b>24)&&(b<29))
{
d=numcode[num[b]];
}
Write_Data(d);
}
}
/*********¬***********/
bit LCD_BUSY()
{
bit BS;
RW = 1;
RS = 0;
E = 1;
delay1ms(1);
BS =(bit)(P0&0x80);
E = 0;
return BS;
}
/*************************************************/
void Write_Comm(uchar lcdcomm)
{
while(LCD_BUSY());
RS = 0;
RW = 0;
E = 1;
delay1ms(1);
P0= lcdcomm;
delay1ms(1);
E = 0;
}
/************************************************/
void Write_Data(uchar lcddata)
{
while(LCD_BUSY());
RS = 1;
RW = 0;
E = 1;
delay1ms(1);
P0= lcddata;
delay1ms(1);
E = 0;
}
/*********************³***************************/
void Init_LCD()
{
delay();
Write_Comm(0x01);
Delay(2);
Write_Comm(0x38);
Delay(2);
Write_Comm(0x06);
Delay(2);
Write_Comm(0x0c);
Delay(2);
}
/*************************ý*************************/
void delay15(uchar us)
{
do
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
us--;
}
while(us);
}
/***********************ý************************/
void Delay(uint time)
{
while( time-- );
}
/*****************************************************/
void delay1ms(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++);
}
/**************************ý*********************/
void delay()
{
uchar y;
for(y=0;y<0xff;y++);
}
/************************************/
void beep(uint bp)
{
uchar i, j;
for (i=0;i<250;i++)
{
BUZZER=!BUZZER;
for (j = 0 ; j<bp ; j++)
_nop_();
}
BUZZER=0;
}
/*******************ý******************/
void main(void)
{
uchar i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++);
SYS_INIT();
while(!START)
{
beep(150);
delay1ms(500);
LCD_DISP();
ET0=1;
TR0=1;
while(1)
{
delay1ms(10);
while(0==CSBIN);
TR1=0;
jsh=TH1;
jsl=TL1;
HEXtoBCD();
JULIJS();
count=0;
LCD_DISP();
if(distance<=1110)
{
beep(10);
}
}
}
}
...全文
484 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

27,383

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧