K_A12_004 基于STM32等单片机采集人体红外感应(HC-SR501)模块串口与OLED0.96双显示

请添加图片描述

一、资源说明

单片机型号测试条件模块名称代码功能
STC89C52RC晶振11.0592MHC-SR501模块STC89C52RC采集HC-SR501模块参数 串口与OLED0.96双显示
STM32F103C8T6晶振8M/系统时钟72MHC-SR501模块STM32F103C8T6采集HC-SR501模块参数 串口与OLED0.96双显示

其他资料目录 直戳跳转

二、基本参数

参数

请添加图片描述

引脚说明

HC-SR501模块引脚说明
VCC正极 3.3-5V供电
GND负极 接GND
DO数字量输出

三、驱动说明

模块工作原理:

请添加图片描述

对应程序:

以51为例

uint8_t HC_SR501_Read(void)
{
	if(R_SR501)
	{
		Flag_P=1;
	}
	else
	{
		Flag_P=0;		
	}
	return Flag_P;
}

void main()//主函数模块// 
{ 
	uint8_t i;
 	OLED_Init(); //OLED初始化
	UartInit();
	for(i=0;i<7;i++)
	{
		OLED_ShowCN(16*i,0,i+1);
	}
 	 while(1) 
  	{ 
		
			UartSendStr(HC_SR501_Buf1);
			
			if(HC_SR501_Read())
			{
				
					UartSendStr(HC_SR501_Buf2);
					OLED_ShowCN(0,3,8);
					for(i=1;i<4;i++)
					{
							OLED_ShowCN(0+16*i,3,i+9);
					}
			}
			else
			{
//					OLED_Fill(0x00);
					UartSendStr(HC_SR501_Buf3);
					OLED_ShowCN(0,3,9);
					for(i=1;i<4;i++)
					{
							OLED_ShowCN(0+16*i,3,i+9);
					}
			}

			
		//  DelayMs(500);
  	} 
} 

四、部分代码说明

1、接线引脚定义

需要自定义引脚可在此处更改,STM32要自定义引脚的话也要注意引脚时钟使能的更改

1.1、STC89C52RC+HC-SR501模块


//人体红外感应(HC-SR501)模块引脚定义
//人体红外感应模块(HC-SR501)-------------------------STC89C52RC
VCC-----------------------------------------------5V
GND-----------------------------------------------GND
OUT-----------------------------------------------P1.0
//OLED0.96模块引脚定义
sbit SCL=P1^2; //串行时钟
sbit SDA=P1^3; //串行数据

1.2、STM32F103C8T6+HC-SR501模块

//人体红外感应(HC-SR501模块)引脚定义 GPIOB_5  
#define R_HC_SR50  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)
//OLED0.96模块引脚定义					
/*STM32F103C8T6芯片的硬件I2C: PB6 -- SCL; PB7 -- SDA */
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;//I2C必须开漏输出
GPIO_Init(GPIOB, &GPIO_InitStructure);

五、基础知识学习与相关资料下载

1、STC89C52RC程序下载 直戳跳转

2、STM32F103C8T6程序下载
(1)串口下载 直戳跳转
(2)ST-LINK下载 直戳跳转
(3)J-LINK下载 直戳跳转
(4)DAP-LINK下载 直戳跳转

3、OLED0.96程序说明 直戳跳转

4、串口助手下载与使用
(1)安信可调试助手使用 直戳跳转
(2) sscom33串口调试助手使用 直戳跳转
(3)STC-ISP串口调试助手使用 直戳跳转

六、视频效果展示与程序资料获取

视频连接 直戳跳转
资料获取 ( 滑到最后添加个人号可免费获取)

七、注意事项

1、VCC GND请勿接反,接反易烧
2、OLED显示异常时,排除接线接触不良

八、接线说明

STC89C52RC

/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : 人体红外感应模块(HC-SR501)测试程序
//  测试条件   : STC89C52RC   晶振11.0592
接线
人体红外感应模块(HC-SR501)-------------------------STC89C52RC
VCC-----------------------------------------------5V
GND-----------------------------------------------GND
OUT-----------------------------------------------P1.0


OLED0.96(IIC) ------------------------------------STC89C52RC
VCC-----------------------------------------------3.3V
GND-----------------------------------------------GND
SCL-----------------------------------------------P1^2
SDA-----------------------------------------------P1^3
*************************************************************************************/

STM32F103C8T6

/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : 人体红外感应模块(HC-SR501)测试程序
//  测试条件   : STM32F103C8T6   晶振8M  系统时钟 72M
接线
人体红外感应模块(HC-SR501)--------------STM32F103C8T6
VCC-------------------------------------5V
GND-------------------------------------GND
OUT-------------------------------------PB_5 

OLED0.96
VCC-- -----------------------------------3.3V
GND- ------------------------------------GND
SCL- ------------------------------------PB_6 //SCL
SDA- ------------------------------------PB_7 //SDA	
*****************************************************************************************/

STM32F407IGT6单片机 HC-SR501人体红外感应模块串口显示)KEIL软件工程源码, int main(void) { uint8_t state; /* 复位所有外设,初始化Flash接口和系统滴答定时器 */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化串口并配置串口中断优先级 */ MX_DEBUG_USART_Init(); HMI_USARTx_Init(); /* 初始化LED */ LED_GPIO_Init(); HC_SR501_GPIO_Init(); /* 无限循环 */ while (1) { state=HC_SR501_StateRead(); switch(state) { case HC_SR501_LOW: HMI_string_setting("page1.t1.txt=\"无人\""); break; case HC_SR501_HIGH: HMI_string_setting("page1.t1.txt=\"有人\""); break; } } } /** * 函数功能: 向串口屏发送数据 * 输入参数: 无 * 返 回 值: 无 * 说 明: 无 */ void HMI_value_setting(const char *val_str,uint32_t value) { uint8_t tmp_str[30]={0}; uint8_t i; sprintf((char *)tmp_str,"%s=%d",val_str,value); for(i=0;i<strlen((char *)tmp_str);++i) { HMI_USARTx->DR=tmp_str[i]; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } /** * 函数功能: 向串口屏发送浮点数据 * 输入参数: 无 * 返 回 值: 无 * 说 明: 无 */ void HMI_string_setting(const char *val_str) { uint8_t tmp_str[50]={0}; uint8_t i; sprintf((char *)tmp_str,val_str); for(i=0;i<strlen((char *)tmp_str);++i) { HMI_USARTx->DR=tmp_str[i]; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); }
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值