返回目录:范文示例
今天小编给各位分享超声波测距仪的设计的知识,文中也会对其通过[51单片机] HC-SR04超声波测距仪和求用HC-SR04超声波测距仪来测距离,用51单片机控制,LCD1602显示距离的完整c程序。等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!
内容导航:
一、[51单片机] HC-SR04超声波测距仪
1、HC-SR04超声波模块工作原理
(1)采用IO口触发测距,给至少10us高电平脉冲;
(2)模块自动发送八个40khz方波,并自主检测是否有电波返回;
(3)当有信号返回时,通过IO口输出一个高电平,高电平的持续时间就是超声波从发送到返回的时间;
(4)测距公式:距离=(高电平时间*声速)/2;
超声波模块的时序图
(5)工作原理分析
英语啥的我也看不懂呐
差不多就是这个意思
2、使用元器件如下
超声波模块和蓝牙模块
加上51单片机后的连接图
3、开始运行时的工作状态
哇哦还是蛮准的嘛,允许一丢丢误差
把障碍物放在距离超声波模块前方的14cm左右(当然放多远是无所谓的,这里就以14cm为例吧!),根据单片机计算出来的值,由蓝牙模块发送到手机上面。
嘿嘿不晓得这样说有没有说清楚,这差不多就是我的理解吧!
这时候要用个手机软件(当然用电脑也是ok的啦,也需要一个蓝牙串口的软件),俺用的是下面这个➡️
偷偷告诉你豌豆荚可以下
4、上主菜
#include <AT89X51.H>
#include <intrins.h>
#include <STDIO.H> //c语言库
#define uchar unsigned char
#define uint unsigned int
#define ECHO P1_1 //echo 接线:模块TRIG接 P1.2 ECH0 接P1.1
#define TRIG P1_0 //trig
unsigned int time=0;
float S=0;
bit flag =0;
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.87)/100; //算出来是CM
if(flag==1) //超出测量
{
flag=0;
printf("--------");
}
printf("S=%5.2fcm",S);
}
void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
void zd0() interrupt 1 //T0中断计数器溢出
{
flag=1; //中断溢出标志
}
void StartModule() //T1中断用来扫描
{
int i;
TRIG=1; //启动一次模块
for(i=0;i<21;i++)
{
_nop_();
}
TRIG=0;
}
void main(void) //主工作区
{
TMOD=0x21; //T0为方式1 GATE=1;
SCON=0x50; //SCON是单片机串行口控制寄存器,用于控制串行通信的方式选择、接收和发送,指示串口的状态。
TH1=0xFD;
TL1=0xFD;
TH0=0;
TL0=0;
TR0=1;
ET0=1; //允许T0中断
TR1=1; //开启定时器
TI=1; //TI是串口送数据完成标志
EA=1; //开启总中断
while(1)
{
StartModule(); //启动模块
while(!ECHO); //当ECHO为零时
TR0=1; //开启计数
while(ECHO);//当ECHO为1计数并等待
TR0=0; //关闭计数
Conut(); //计算
delayms(50); //500ms = 0.5s
}
}
下次见
2020.05.16
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧··END·‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
一、求用HC-SR04超声波测距仪来测距离,用51单片机控制,LCD1602显示距离的完整c程序。
这也太好做了吧,我正好前两天给一个同学做过毕设,百度私信吧,二、运用HC-SR04超声波距模块做的51单片机超声波测距系统完成超声波测距(LED数码管显示)与报警
P3^2数码管段选P0.0-P0.7位选P1.0-P1.3 除了你自己,没人能做。因为没有硬件逻辑图, 没有检测的接口, 没有显示的接口描述,什么都没三、51单片机超声波测距代码
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineLCD_DATAP2
sbitLCD_BL=P1^0;
sbitLCD_RS=P1^1;
sbitLCD_RW=P1^2;
sbitLCD_EN=P1^3;
sbitTRIG=P0^0;
sbitECHO=P0^1;
bitflag=0;
uchartime,b,s,g;
uintl;
ucharcodenum_tab[]="0123456789";
voiddelay1602(uintz);
voiddelay10ms(uintx);
voidwrite_com(ucharcom);
voidwrite_dat(uchardat);
voidinit_t0();
voidinit_lcd1602();
voidGet_L();
voiddisplay();
voidmain()
{
LCD_BL=0;
TRIG=0;
init_t0();
init_lcd1602();
delay10ms(50);
while(1)
{
Get_L();
display();
delay10ms(6);
}
}
voiddelay1602(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddelay10ms(uintx)
{
uinti,j;
for(i=x;i>0;i--)
for(j=1149;j>0;j--);
}
voidwrite_com(ucharcom)
{
LCD_RW=0;
LCD_RS=0;
LCD_DATA=com;
LCD_EN=1;
delay1602(5);
LCD_EN=0;
}
voidwrite_dat(uchardat)
{
LCD_RW=0;
LCD_RS=1;
LCD_DATA=dat;
LCD_EN=1;
delay1602(5);
LCD_EN=0;
}
voidinit_lcd1602()
{
write_com(0x38);
write_com(0x38);
write_com(0x38);//设置8位格式,2行5x7点阵
write_com(0x0c);//开显示,关光标,不闪烁
write_com(0x06);//文字不动,光标自动右移
write_com(0x01);//清屏并光标复位
}
voidinit_t0()
{
TMOD=0x01;
TH0=0x00;
TL0=0x00;
}
voiddisplay()
{
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');
}
}
voidGet_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;
}
关于超声波测距仪的设计的问题,通过《运用HC-SR04超声波距模块做的51单片机超声波测距系统完成超声波测距(LED数码管显示)与报警》、《51单片机超声波测距代码》等文章的解答希望已经帮助到您了!如您想了解更多关于超声波测距仪的设计的相关信息,请到本站进行查找!