
這是最后的實驗現象,有人走過會一直輸出有人,離開范圍時則輸出沒人
開發板 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
歡迎溝通交流,我們一起進步
