收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
-
发送超声波信号:将Trig引脚设置为高电平(通常是10微秒),然后将其恢复为低电平。这将触发HC-SR04模块发送一个短时脉冲的超声波信号。
-
接收超声波回波:HC-SR04模块会自动接收超声波信号的回波,并将其转换为Echo引脚上的电平信号。您可以通过读取Echo引脚上的电平,来确定超声波信号的传播时间。
-
计算距离:通过测量超声波信号从发射到接收的时间差(通常以微秒为单位),可以计算出距离。公式如下:距离 = (时间差 * 声速)/ 2,其中声速通常为340米/秒。
需要注意的是,HC-SR04模块的使用可能会受到一些因素的影响,例如噪声、超声波传播速度的变化等。在编程时,您还需要根据具体的控制器和开发平台,选择适当的代码和库函数来进行触发和读取操作。
综上所述,使用HC-SR04模块可以通过发送超声波信号,并测量其回波的时间来计算距离。这在许多项目中用于避障、测量距离等应用。
模块与单片机连接方式:
/*
接线方式:
超声波 Trig–>P2.4 Echo—>P2.3
PCF8591 SCL–>P2.0 SDA–>P2.1
注明:所有模块的VCC 和 GND都需要连接
*/
主函数代码如下:
#include "reg52.h"
#include "LCD1602.h"
#include "delay.h"
#include <string.h>
#include <stdio.h>
#include <I2C.H>
#include "usart.h"
#include <intrins.h>
/*
接线方式:
超声波 Trig-->P2.4 Echo--->P2.3
PCF8591 SCL-->P2.0 SDA-->P2.1
注明:所有模块的VCC 和 GND都需要连接
*/
#define PCF8591 0x90 //PCF8591 地址
int light=0; //定义光照强度
int t=0;
sbit beep=P2^5;
sbit RX=P2^3;
sbit TX=P2^4; //超声波模块端口定义
bit flag =0;
char i=0;
char inf[]="light:000 distance:0000 t:000\r\n";
unsigned int time=0;
unsigned long S=0;
unsigned int distance=0;
unsigned int timer=0;
//蜂鸣器报警的函数
void beep_my()
{
int i=1000;
while(i)
{
beep=~beep;
i--;
delay(100);
}
}
void StartModule() //启动模块
{
TX=0; //启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
void Int0Init() //定时器初始化
{
TMOD|=0x01; //设T0为方式1,GATE=1;
TH0=0;
TL0=0;
ET0=1; //允许T0中断
EA=1; //开启总中断
}
int Conut(void) //计算距离
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.7)/10; //算出来是mm
return S;
}
/*******************************************************************
DAC 变换, 转化函数
*******************************************************************/
bit DACconversion(unsigned char sla,unsigned char c, unsigned char Val)
{
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址
if(ack==0)return(0);
SendByte(c); //发送控制字节
if(ack==0)return(0);
SendByte(Val); //发送DAC的数值
if(ack==0)return(0);
Stop_I2c(); //结束总线
return(1);
}
/*******************************************************************
ADC发送字节[命令]数据函数
*******************************************************************/
bit ISendByte(unsigned char sla,unsigned char c)
{
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址
if(ack==0)return(0);
SendByte(c); //发送数据
if(ack==0)return(0);
Stop_I2c(); //结束总线
return(1);
}
/*******************************************************************
ADC读字节数据函数
*******************************************************************/
unsigned char IRcvByte(unsigned char sla)
{ unsigned char c;
Start_I2c(); //启动总线
SendByte(sla+1); //发送器件地址
if(ack==0)return(0);
c=RcvByte(); //读取数据0
Ack_I2c(1); //发送非就答位
Stop_I2c(); //结束总线
return(c);
}
void main(void)
{
![img](https://img-blog.csdnimg.cn/img_convert/04157bb288ed541ced4e749dff8336d6.png)
![img](https://img-blog.csdnimg.cn/img_convert/e075d9365088567867158aac722dcaee.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**
**需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**
上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**
**需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**