STC8H系列—16.GPIO方式驱动HC-SR04超声波模块教程

18 篇文章 15 订阅
订阅专栏
本文介绍了在C51内核的STC8H系列单片机中,使用GPIO驱动HC-SR04超声波模块的详细过程,包括发射超声波、接收回声并计算距离,最后在OLED屏上显示结果。还涉及了工作时序、引脚介绍和实验平台搭建。
摘要由CSDN通过智能技术生成

一、概述:

      超声波模块HC-SR04使用Arduino驱动的例程比较多,驱动起来也是比较的简单,自然不在本文的讨论的范围。本文在C51内核的高性能芯片STC8H系列的平台上驱动HC-SR04超声波模块,驱动方式有三种,传统的方式采用GPIO方式,第二种为串口方式,第三种为I2C方式,由于硬件的限制本文使用传统的GPIO方式驱动模块【可以在模块背面R4、R5两个电阻位分别安装一个10K的电阻即可实现方式二与方式三的驱动,驱动方法不在本文的探讨范围】。

      如下的例程实现超声波模块超声波束的发射与采集,通过回声来确定探测距离,然后单片机将返回的数据量化、计算,然后将距离数据显示在OLED屏上。

      超声波模块的驱动方法,单片机向TR端发射一个10us的脉冲信号,当模块接收到触发信号后,模块开始工作,模块向被测物体发射一束超声波信号,声波信号的返回时间与距离成正比,模块自波束发射完成起向单片机输出一个高电平脉冲,当模块接收到波束信号高电平脉冲信号结束。当单片机INTO接收到上升沿时,定时器(12T)开始计时【每一个计数脉冲用时1us】,当下降沿到达时,定时器结束计时,然后将计时时间转换成距离。

二、知识链接:

   1、工作时序:

单片机P20端口给模块Trig脚一个大于 10uS的高电平脉冲;模块的Echo给单片机INTO端(P32),会给出一个与距离等比的高电平脉冲信号,可根据脉宽时间“T”【注:定时器输出值为us,必须换成s】算出【C=340m/s】:

距离=T*C/2

2、引脚介绍:

3、模式转换:

三、实验平台搭建:

   1、MCU:STC-打狗棒系列核心实验板 V2.3

   2、实验板平台:德飞莱LY-51s

   3、显示:SSD1306 0.96寸白色OLED屏(4脚IIC接口)

   4、硬件连接表:

      0.96寸4脚OLED接线图硬I2C接线表

         SDL---------->P24

         CLK---------->P25

         VCC---------->+5V

         GND---------->GND

      超声波模块HC-SR04接线图

        VCC---------->+5V

        Trig---------->P20(触发信号)

        Echo---------->P32(接收信号)

四、测试源代码:

#include <STC8H.h>
#include <stdio.h>
#include "intrins.h"
#include "oledfont.h"

#define uint8_t unsigned char
#define u8 unsigned char
#define u16  unsigned int
#define uint32_t unsigned long

#define SIZE 16
#define XLevelL		0x00
#define XLevelH		0x10
#define Max_Column	128
#define Max_Row		64
#define	Brightness	0xFF 
#define X_WIDTH 	128
#define Y_WIDTH 	64	
		     
#define OLED_CMD  0	//写命令
#define OLED_DATA 1	//写数据
 unsigned int a0=0;//测量的距离值
void init_IO();//初始化IO
//超声波
void init_Ultra();
void start_Ultra();
void Delay10us();		//@12.000MHz
void Delay1ms(unsigned char x);		//@12.000MHz 
//硬件IIC
void init_IIC();//初始化硬IIC
void IIC_wait();//执行等待
void IIC_SendData(unsigned char dat);//发送数据
void IIC_RevAck();//接收ACK信号
void IIC_STOP();//停止信号
//OLED控制用函数	
void OLED_Init(void);
void OLED_WR_Byte(unsigned char dat,unsigned char cmd);
void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr);
void OLED_ShowString(uint8_t x,uint8_t y, uint8_t *p);	 
void OLED_Set_Pos(unsigned char x, unsigned char y);
void OLED_Clear(void);
void main()
{
		uint8_t  oledBuf[16];	 
	  P_SW2 |= 0x80;  //扩展寄存器XFR访问使能	
		init_IO();	//初始化IO
    init_IIC();//初始化硬IIC
	  OLED_Init();//初始化OLED
	  init_Ultra();
	  OLED_ShowString(0,0,"Ultrasonic Test");
	  OLED_ShowString(0,4,"by lizhipeng!");
	  OLED_ShowString(0,6," 2023/08/18");
	  sprintf((char *)oledBuf ,"Length:%d mm",a0);//格式化输出
	  OLED_ShowString(0,2,oledBuf);
	while(1)
	{
	   start_Ultra();//开始测距
		//清空显示
		sprintf((char *)oledBuf ,"Length:         ");//格式化输出
	  OLED_ShowString(0,2,oledBuf);
		//显示数值
		Delay1ms(10);		
		sprintf((char *)oledBuf ,"Length:%d mm",a0);//格式化输出
	  OLED_ShowString(0,2,oledBuf);		
	}
}


void init_IO()
{
	RSTCFG=0x50;  //开启RST键进入ISP模式
	P0M1 = 0x00;   P0M0 = 0x00;   //设置P0口为准双向口
	P2M1 = 0x00;   P2M0 = 0x00;   //设置P1口为准双向口
	P3M1 = 0x00;   P3M0 = 0x00;   //设置P3口为准双向口	
}

/***************************超声波部分**********************************/
//初始化超声波
void init_Ultra()
{
  //开启INT0中断 
	IT0=0;//INT0边缘触发
	IE0=0;//清空标志位
	EX0=1;//开启INT0中断
	EA=1;//开总中断
	PX0=1;//PX0提高INT0的优先级
	IPH|=0x01;//设置PX0H=1

	AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式模式一16位不重装
	TL0 = 0x00;		//设置定时初始值
	TH0 = 0x00;		//设置定时初始值
	TF0 = 0;		//清除TF0标志
	TR0 = 0;		//定时器0开始计时
  ET0=0;//不中断只计时
  P20=0;	
}

//开始测距
void start_Ultra()
{
	 unsigned int temp=0;	
  	//产生10us脉冲
		P20=1;
		Delay10us();
		P20=0;		
	  Delay1ms(200);	
	  //读取高电平的值
	  temp=TH0;
		temp=temp<<8;
		temp+=TL0;
		//计算距离,单位为mm
	  a0=temp*34;
		a0=a0/200; 
}


//INT0中断接收
void INT0_isr() interrupt 0//INT0中断入口
{
	
	if(P32==1)//上升沿
	{
	TL0 = 0x00;		//设置定时初始值
	TH0 = 0x00;		//设置定时初始值
	TF0 = 0;		//清除TF0标志	
	TR0 = 1;		//定时器0开始计时	
	}
	else//下降沿
	{
	  TR0=0; 	//停止计时	
	}
	IE0=0;//清空中断标志位
}

void Delay10us()		//@12.000MHz
{
	unsigned char i;
	i = 38;
	while (--i);
}

void Delay1ms(unsigned char x)		//@12.000MHz 
{
	unsigned char i, j;
	while(x--)
	{
		i = 16;
	  j = 147;
		do
		{
			while (--j);
		} while (--i);
	}	
}

/***************OLED函数部分已省略*************/

 

超声波测距hc_sr04使用
weixin_44607878的博客
08-07 270
超声波是通过声波的形式传播,声音的传输介质有固,液,气三种形式,空气中的成分比较复杂。声音的传播和介质的密度有关系,密度越大,声音的传播湿度越慢。还有做了更具体的温度和湿度补偿的计算公式:声速 m/s = 331.4 +(0.606 * 温度)+(0.0124 * 湿度)。hc_sr04接到mcu的触发信号,内部发送一个byte的驱动信号,具体的发送过程博主会贴在图片面。GPIO模式下测量的时序图在下图,通过时序图,可以知道mcu要个一个大于10us的高电平,告诉hc_sr04,可以发送数据了,
HC-SR04超声波测距模块驱动
11-21
本工程采用两路轮询触发HC-SR04超声波测距模块,将测到的距离通过RS485发送至上位机。测量频率高。抗干扰强!
驱动程序】HC-SR04超声波模块_CubeMX_HAL库
最新发布
2201_75563094的博客
08-06 310
HC-SR04超声波模块_CubeMX_HAL库 移植方便
超声波模块驱动(STM32、51单片机等)
m0_73931287的博客
01-07 1280
超声波模块驱动(STM32、51单片机等)。单片机超声波模块驱动,测量距离和显示
Linux驱动 | HC-SR04超声波模块驱动
欲盖弥彰1314
03-26 3219
HC-SR04超声波模块
【STM32篇】驱动HC_SR04超声波测距模块
we_long的博客
01-13 6683
使用stm32f10x的外部中断和定时器辅助HC_SR04超声波测距模块完成测距,并通过OLED屏幕显示。
智能小车(LiteOS-M)超声波模块驱动和应用实验
OSCOURSE的博客
04-01 1000
智能小车(LiteOS-M)超声波模块驱动和应用实验
STC单片机+HC-SR04超声波测距程序-LCD1602屏显示.rar
04-22
STC单片机HC-SR04超声波传感器是电子工程中常见的硬件组件,它们在各种自动化和物联网项目中都有广泛应用。本项目结合两者,实现了一个通过LCD1602显示屏显示超声波测距结果的系统,这对于学习嵌入式开发和传感器...
4 HC-SR04超声波_原理图.pdf
04-30
HC-SR04 超声波模块原理图 HC-SR04 超声波模块是一种基于超声波技术的距离测量模块,广泛应用于机器人、自动化生产线、汽车电子等领域。本文将对 HC-SR04 超声波模块的原理图进行详细分析和解释。 HC-SR04 超声波...
基于STC8A8K64S4A12-LQFP44单片机HC-SR04超声波测距-串口助手显示实验软件例程源码.rar
05-24
基于STC8A8K64S4A12_LQFP44单片机HC-SR04超声波测距-串口助手显示实验软件例程源码 void main() { P1M1 |= 0x30; P1M0 |= 0x30; //设置P1.4和P1.5为准双向口 delay_ms(100); //上电延时 UartInit(); //...
基于单片机HC-SR04超声波模块测距仪设计(数码管显示)
热门推荐
qq_31569699的博客
09-10 1万+
单片机实现;用C语言编程;硬件电路板布局合理;用数码管显示器显示;距离测量范围是:10cm----100cm;误差小于8%;超过测距量程并报警;通过按键调节测距范围。
超声波电机的驱动方案
07-07
1-1前言 一般人所能夠感受到声音的频率约介于5H2-20KHz,超音波(Ultrasonic wave)即为频率超过20KHz以上的音波或机械振动,因此超音波马达就是利用超音波的弹性振动频率所构成的制动力。   超音波马达的内部主要是以压电陶瓷材料作为激发源,其成份是由鉛(Pb)、结(Zr)及钛(Ti)的氧化物皓钛酸铅(Lead zirconate titanate,PZT)製成的。   將歷电材料上下方各黏接弹性體,如銅或不銹鋼,並施以交流电压于压电陶瓷材料作为驅动源,以激振弹性體,稱此結构为定子(Stator),將其用弹簧與轉子Rotor)接觸,將所産生摩擦力來驅使轉子轉动,由于压电材料的驱动能量很大,並足以抗衡轉子與定子間的正向力,雖然伸縮振幅大小僅有數徵米(um)的程度,但因每秒之伸縮達數十萬次,所以相較于同型的电磁式马达的驅动能量要大的許多。   超音波马达的優點为:   1,轉子慣性小、響應時間短、速度範圍大。   2,低轉速可產生高轉矩及高轉換效率。   3,不受磁場作用的影響。   4,构造簡單,體積大小可控制。   5,不須經过齒輸作減速机构,故較为安静。   实際應用上,超音波马达具有不同于傳統电磁式马达的特性,因此在不適合應用傳統马达的場合,例如:間歇性運动的裝置、空間或形狀受到限制的場所;另外包括一些高磁場的場合,如核磁共振裝置、斷層掃描儀器等。所以未來在自动化設備、視聽音響、照相机及光學儀器等皆可應用超音波马达來取代。
基于STM32的超声波模块驱动程序
01-14
基于STM32F1超声波模块驱动程序,代码细节描述清晰,易于理解阅读
超声波驱动
04-06
基于51单片机的智能跟踪小车。利用超声波来保持小车与跟踪物体的距离。并用PID来实现小车的快速小偏差的智能跟踪
HC-SR04超声波模块+STM32F103
03-26
实测可用,精度很好; 用了定时器的输入捕获功能;
HC-SR04+89C52RC+11.0592Mhz高精度驱动程序
05-01
我们知道超声波在空气中的传播速度为0.34mm/us,这样只要能够精确计算高电平的持续时间,测量精度就能够达到0.34mm。 具体的高精度算法我已经写到程序里面了,需要的同学可以点击下载HC-SR04超声波模块驱动程序
HC-SR04-V1.2.zip_HC-SR04_hc-sr04测距程序_sr04测试距离_stc15f104 hc-sr04_
09-23
HC-SR04是一款广泛应用在各种测距项目中的超声波传感器,它的V1.2版本在本压缩包中提供了相关的程序代码,适用于STC15F104微控制器。这款传感器工作原理是通过发射超声波脉冲,然后测量回波的时间差来计算物体的距离...
013——超声波模块驱动开发(基于I.MX6uLL与SR04
qq_52479948的博客
04-03 1397
超声波测距模块是利用超声波来测距。模块先发送超声波,然后接收反射回来的超声波,由反射经历的时间和声音的传播速度 340m/s,计算得出距离。SR04 是一款常见的超声波传感器,模块自动发送 8 个 40KHz 的方波,自动检测是否有信号返回,用户只需提供一个触发信号,随后检测回响信号的时间长短即可。SR04 采用 5V 电压,静态电流小于 2mA,感应角度最大约 15 度,探测距离约 2cm-450cm。SR04 模块上面有四个引脚,分别为: VCC、 Trig、 Echo、 GND。
STM32驱动HC-SR04超声波模块
m0_49476241的博客
04-16 5970
本篇文章将带大家使用HAL库驱动HC-SR04超声波模块超声波模块作为智能小车必备的模块,要学习智能小车的同学是必须掌握好这个模块的使用的。HC-SR04是一种常用的超声波传感器模块,也被称为超声波测距模块,广泛应用于各种自动化控制和测距系统中。它通常由超声波发射器、接收器、控制电路和外壳组成,可以实现非接触式的距离测量。下面是HC-SR04超声波模块的一些特性和技术参数:距离测量范围:2cm ~ 400cm(可调)。测量精度:0.3cm。工作电压:DC 5V。工作电流:15mA。
写文章

热门文章

  • STC8H系列—8.串口通信控制教程 5727
  • C51单片机定时器2实现SG90舵机控制 5302
  • STC89C52驱动W25Q32测试笔记 4493
  • STC8H系列—11.ADC模数转换控制教程 3914
  • C51单片机驱动基于MAX7219串行接口多联8X8点阵模块 3645

分类专栏

  • 单片机类 6篇
  • 训练笔记 1篇
  • STC8H单片机系列 18篇
  • 物联网学习笔记 1篇
  • Python学习笔记 5篇

最新评论

  • STC8H系列—14.16位高级PWM定时器实例呼吸灯教程

    Naiva: 这个互补输出可以关闭吗?比如我只想要P1.0 / PWM1P输出 pwm方波;但是P1.1/PWM1N 还可以用作其他用途。

  • C51单片机驱动基于MAX7219串行接口多联8X8点阵模块

    WY14792849080: 那个怎么写入 16 位数据啊 没看懂😭

  • STC8H系列—13.硬件I2C驱动OLED屏教程

    shy746522: 博主你好,请问有头文件程序吗

  • 01.ESP-01s通过AT指令TCP方式接入新大陆云平台实验

    午后来杯java: 如果用arduino编程该怎么做呢

  • STC89C52驱动W25Q32测试笔记

    菲子叭叭: 想问一下为什么除了读取flash ID 以外的数据都是0x00

大家在看

  • DAY39||背包理论基础 |416.分割等和子集
  • 重磅推荐:复旦大学首部大模型中文专著震撼发布
  • 早安问候语每日更新,新的一天,最暖心问候正能量励志句子 492
  • 语句(c语言进阶)
  • 一分钟学会MATLAB-时间序列预测模型

最新文章

  • C51单片机驱动TM1637四位数码管
  • C51单片机驱动WS2812B-8炫彩小灯条
  • Python编程软件Pycharm安装
2024年2篇
2023年27篇
2022年2篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家芜湖美陈商场镇江玻璃钢雕塑商家玻璃钢亮化雕塑福建佛像玻璃钢雕塑销售厂家义乌 商场美陈广东周年庆典商场美陈价格玻璃钢雕塑制作设计哪家专业定做玻璃钢雕塑仿铜北京大型商场美陈采购葫芦岛玻璃钢花盆生产厂家玻璃钢雕塑的有点和不足郑州玻璃钢雕塑厂家价格商场灯光美陈定制濮阳镂空玻璃钢雕塑公司温州玻璃钢花盆研发公司专业的生产玻璃钢雕塑厂家杞县玻璃钢雕塑设计下城商场美陈新余环保玻璃钢雕塑制作广州校园雕塑玻璃钢源汇玻璃钢雕塑加工厂家玻璃钢雕塑猪玻璃钢香蕉雕塑多少钱四川特色商场美陈供应商制作玻璃钢雕塑公司多少钱扬州玻璃钢雕塑定制价格开州玻璃钢雕塑青海园林玻璃钢雕塑定做玻璃钢雕塑漆工作优质耐用的玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化