已解决:HCSR501连接单片机,LED灯时亮时灭怎么回事?(含程序)

问题原因及解决办法在文末,
首先介绍一下什么是HCSR501。

一、HC-SR501 小型人体感应模块说明书(来源于HCSR501官方说明文档)
1、产品概述
HC-SR505 小型人体感应模块是基于红外线技术的自动控制产品,
灵敏度高,可靠性强,超小体积,超低电压工作模式。广泛应用于各
类自动感应电器设备,尤其是干电池供电的自动控制产品。
在这里插入图片描述
2、电气参数
在这里插入图片描述
3、功能特点
■全自动感应:人进入其感应范围则输出高电平,人离开感应范围则自动延时关闭高电平,输出低电平。■ 可重复触发方式:即感应输出高电平后,在延时时间段内,如果有人体在其感应范围活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平(感应模块检测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点)。■ 超小体积。■ 工作电压范围宽:默认工作电压 DC**4.5V-20V**。■ 微功耗:静态电流<50 微安,特别适合干电池供电的自动控制产品。■输出高电平信号:可方便与各类电路实现对接。应用范围■ 人体感应灯具 ■ 人体感应玩具■ 安防产品 ■ 工业自动化控制■自动感应电器设备 ■电池供电自动控制等
4.使用说明
在这里插入图片描述
5.感应范围
在这里插入图片描述
6.外形调节
在这里插入图片描述
7.应用范围及电路说明
在这里插入图片描述
二、HCSR501连接单片机后,程序如下:

#include <STC8.H>
#include<intrins.h>
sbit HCR501=P3^2;	 //HCSR501的电平输出端接入单片机P3^2口
void main(void)
{  
	P6=0XFF;
	while(1)
	{
		if(HCR501 == 1)	  //有人时,输出高电平	   
			P6 = 0X00;	  //此单片机的LED灯为共阳极,使P6口为低电平,LED灯全亮
		else if(HCR501 == 0)
			P6 = 0XFF;	  //P6口为高电平,LED灯全灭
	}
}

三、出现问题

LED灯在HCSR501模块不管在有人还是没人时一直时亮时灭。

四、检查解决

问题原因: 仔细检查程序没问题,检查HCSR501接线发现HCSR501所接正极电源为3.3V,而HCSR501说明书里明确指出工作电压为4.5V-20V,于是把HCSR501的正极输入端接到单片机的5V输出端。再次测试成功。

五、效果图
在这里插入图片描述

以下是基于32单片机HCSR501程序示例,供参考: ```c #include "stm32f10x.h" #define LED_PIN GPIO_Pin_13 #define LED_PORT GPIOC void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = LED_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LED_PORT, &GPIO_InitStructure); // HCSR501引脚配置 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); } void EXTI_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; // HCSR501中断线配置 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void EXTI0_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line0) != RESET) { GPIO_WriteBit(LED_PORT, LED_PIN, Bit_SET); // 点LED EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断标志位 } } int main(void) { GPIO_Config(); EXTI_Config(); while (1) { GPIO_WriteBit(LED_PORT, LED_PIN, Bit_RESET); // 熄LED } } ``` 在此示例中,我们将HCSR501连接到了STM32的PA0引脚,并通过中断检测到人体运动信号。当检测到人体运动,会触发PA0的中断,并通过中断服务程序PC13引脚上的LED。在主函数中,我们通过循环控制LED的状态,以保证程序一直运行。 需要注意的是,上述示例中省略了HCSR501初始化的代码,需要根据具体的芯片型号进行相应的配置。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值