基於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

 

歡迎溝通交流,我們一起進步


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM