基于STM32F103ZET6 HC_SR501人体红外感应

这是最后的实验现象,有人走过会一直输出有人,离开范围时则输出没人

 

 开发板 PZ6086L ,HC_SR501模块

 

这是HC_SR501的示意图,,VCC和GND不再多做介绍,5V供电就行,

OUT接口,我接的时PA0,因为需要将该引脚配置为下拉输入模式才能正常使用

而我的开发板对应的需要PA0引脚

通过该模块的说明书,并不需要特殊的参数配置,

 

函数部分

 

HC_SR501配置函数

先是头文件,

#define HC_SR501 PAI(0)   PAI(0)是位绑定,方便操作用的,

void HC_SR(void);是HC_SR501的PA0配置函数

u8 HC_SR501_Statue(void);是为了判断PA0输入状态,如果被拉高了,说明有人进入了

 

void HC_SR(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE);//打开GPIOA时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//选中0引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//配置为下拉输入模式
GPIO_Init(GPIOA, &GPIO_InitStructure);
}

 


u8 HC_SR501_Statue(void)
{
  if(PAI(0)==1)//如果GPIOA_0 引脚输入高电平,代表有人,返回1
  {
    return 1;
  }
  return 0;//没人就返回0
}

 

 

部分主函数

int main(void)
{
delay_init(72); //滴答计时器配置函数
RCC_Configuration();//时钟配置
GPIO_Configuration();//GPIO配置
HC_SR();//HC_SR501引脚配置
USART1_Configuration();//串口配置函数

while(1)
{
GPIO_ResetBits(GPIOC,GPIO_Pin_0);//证明系统成功进入该循环


if(HC_SR501_Statue()==1)//如果返回状态为1 ,则该判断语句成立,输出有人
  {
  printf("有人\r\n");
  }
  else printf("没人\r\n");
  delay_ms(500); //防止输出太过频繁
}
}

 

以下是我的工程文件

包含全部程序,以及我使用的调试文件,HC_SR501模块手册,百度网盘 ,密码    lc5w

 

https://pan.baidu.com/s/1ALapR-4hFrfTKfuLVKRqqg

 

欢迎沟通交流,我们一起进步

posted @ 2019-04-12 16:23  朱智磊  阅读(8945)  评论(23编辑  收藏  举报