这是最后的实验现象,有人走过会一直输出有人,离开范围时则输出没人
开发板 PZ6086L ,HC_SR501模块
这是HC_SR501的示意图,,VCC和GND不再多做介绍,5V供电就行,
OUT接口,我接的时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
欢迎沟通交流,我们一起进步