51单片机超声波测距代码 20

51单片机超声波测距代码stc89c52单片机,求一个测距程序,只要可以实时测出距离就可以了,不需要显示,echo口和trig口分别为P2^0和P2^1,如果距离大于一个... 51单片机超声波测距代码stc89c52单片机,求一个测距程序,只要可以实时测出距离就可以了,不需要显示,echo口和trig口分别为P2^0和P2^1,如果距离大于一个数,我可以调用某个函数,最重要的是实时检测距离,谢谢,如果感觉我描述不清楚请直接问我 展开
 我来答
百度网友445a78443
2018-04-07 · TA获得超过113个赞
知道小有建树答主
回答量:121
采纳率:85%
帮助的人:78.8万
展开全部
#include <reg51.h>
#define uchar unsigned char
#define uint  unsigned int
#define LCD_DATA P2
sbit LCD_BL=P1^0;
sbit LCD_RS=P1^1;
sbit LCD_RW=P1^2;
sbit LCD_EN=P1^3;
sbit TRIG=P0^0;
sbit ECHO=P0^1;
bit flag=0;
uchar time,b,s,g;
uint l;
uchar code num_tab[]="0123456789";
void delay1602(uint z);
void delay10ms(uint x);
void write_com(uchar com);
void write_dat(uchar dat);
void init_t0();
void init_lcd1602();
void Get_L();
void display();
void main()
{
 LCD_BL=0;
 TRIG=0;
 init_t0();
 init_lcd1602();
 delay10ms(50);
 while(1)
 {
  Get_L();
  display();
  delay10ms(6);
 }
}
void delay1602(uint z)
{
 uint x,y;
 for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
void delay10ms(uint x)
{
 uint i,j;
 for(i=x;i>0;i--)
  for(j=1149;j>0;j--);
}
void write_com(uchar com)
{
 LCD_RW=0;
 LCD_RS=0;
 LCD_DATA=com;
 LCD_EN=1;
 delay1602(5);
 LCD_EN=0;
}
void write_dat(uchar dat)
{
 LCD_RW=0;
 LCD_RS=1;
 LCD_DATA=dat;
 LCD_EN=1;
 delay1602(5);
 LCD_EN=0;
}
void init_lcd1602()
{
 write_com(0x38);
 write_com(0x38);
 write_com(0x38); //设置8位格式,2行5x7点阵
 write_com(0x0c); //开显示,关光标,不闪烁
 write_com(0x06); //文字不动,光标自动右移
 write_com(0x01); //清屏并光标复位
}
void init_t0()
{
 TMOD=0x01;
 TH0=0x00;
 TL0=0x00;
}
void display()
{
 if(l!=0)
 {
  b=l/100;
  s=l%100/10;
  g=l%10;
  write_com(0x00|0x80);
  write_dat(num_tab[b]);
  write_dat(num_tab[s]);
  write_dat(num_tab[g]);
  write_dat('c');
  write_dat('m');
 }
}
void Get_L()
{
 TRIG=1;
 delay10ms(1);
 TRIG=0;
 while(ECHO!=1);
 TR0=1;
 while((ECHO!=0)&(TH0<0x4f));
 TR0=0;
 l=TH0;
 l<<=8;
 l+=TL0;
 if((l<174) | (l>20300))
 {
  l=0;
  flag=1;
 }
 else
  l=(l*1.085)/58;
 TH0=0x00;
 TL0=0x00; 
}
追问
本人小白,问一下,是不是只要把接口改了,代码就可以直接使用了?因为我还想在距离大于某个数值时加一个run(自己定义的)函数
或者说,只需要测距就可以了,不需要用1602屏显示,测出后判断是否大于某个值,然后添加自己的函数
上海科坤工业科技发展有限公司
2018-12-26 广告
当超声波束在液体中传播时,液体的流动将使传播时间产生微小变化,并且其传播时间的变化正比于液体的流速,其关系符合下列表达式。θ为声束与液体流动方向的夹角。M 为声束在液体的直线传播次数。D 为管道内径。Tup 为声束在正方向上的传播时间。Td... 点击进入详情页
本回答由上海科坤工业科技发展有限公司提供
mashilin4
2018-04-08
知道答主
回答量:20
采纳率:0%
帮助的人:10.7万
展开全部
1602液晶显示 的超声波模块程序
接口程序里边都有、、

#include
//#include
#include

#define uchar unsigned char
#define uint unsigned int

sbit lcdrs=P2^3;
sbit lcden=P2^2;
sbit trig=P2^0; //超声波发送
//sbit echo=P3^2; //超声波接受
//P0____________DB0-DB7
uchar dis[]="Disp_HC-SR04";
uchar num[]="0123456789";
uint distance;

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=121;y>0;y--);
}

void HC_init()
{
TMOD=0x09;
TR0=1;
TH0=0;TL0=0;
}

uint HC_jisuan()
{
uint dist,timer;
timer=TH0;
timer<<=8;
timer=timer|TL0;
dist=timer/53; //晶振11.0592MHz 距离cm=微秒us/58
return dist; //1个机器周期是12个时钟周期 timer*12/(58*11.0592)=timer/53
}

void HC_run()
{
uint tempH=0x00,tempL=0x00;
TH0=0;TL0=0;
trig=0;
trig=1;
delay(1);
trig=0;
while((TH0-tempH!=0||TL0-tempL!=0)||(TH0==0&&TL0==0))
{
tempH=TH0;
tempL=TL0;
}
delay(1);
}

void lcd_write_com(uchar com) //LCD写指令
{
lcdrs=0;
P0=com;
delay(1);
lcden=1;
delay(1);
lcden=0;
}

void lcd_write_data(uchar date) //LCD写数据
{
lcdrs=1;
P0=date;
delay(1);
lcden=1;
delay(1);
lcden=0;
}

void lcd_init() //LCD初始化
{
lcden=0;
lcd_write_com(0x38);
lcd_write_com(0x0c);
lcd_write_com(0x06);
lcd_write_com(0x01);
}

void lcd_display(uchar temp)
{
uint i;

lcd_write_com(0x82);
for(i=0;i<12;i++)
{
lcd_write_data(dis[i]);
}

lcd_write_com(0x80+0x41);
lcd_write_data('D');
lcd_write_data('i');
lcd_write_data('s');
lcd_write_data('t');
lcd_write_data('a');
lcd_write_data('n');
lcd_write_data('c');
lcd_write_data('e');
lcd_write_data(':');
lcd_write_data(num[temp/100]);
lcd_write_data(num[temp/10%10]);
lcd_write_data(num[temp%10]);
lcd_write_data('c');
lcd_write_data('m');
}

void main()
{
lcd_init();
HC_init();
while(1)
{
HC_run();
distance=HC_jisuan();
lcd_display(distance);
delay(200);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式