找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1213|回复: 0
收起左侧

单片机驱动人体红外传感器源码分析

[复制链接]
ID:835881 发表于 2022-1-1 21:24 | 显示全部楼层 |阅读模式
1. 实验目的
(1)通过实验掌握 CC2530 芯片 GPIO 的配置方法
(2)掌握 HC-SR501 人体感应模块的使用
2. 实验设备
硬件:PC 机
一台
EB2530(底板、核心板、仿真器、USB 线)
一套
人体红外传感器
一个
有源蜂鸣器
一个
软件:2000/XP/win7 系统,IAR 8.10 集成开发环
4. 传感器说明
PIR 热释电红外传感器是一种能检测人或动物发射的红外线而输出电信号的传感器。调试时人体尽量
远离感应区域,有时虽然人体不在模块的正前方,但是人体离模块太近时模块也能感应到造成一直有输出,
还有调试时人体不要触摸电路部分也会影响模块工作。人体感应模块只能工作在室内并且工作环境应该避
免阳光、强烈灯光直接照射

温故

1. 实验目的 (1)通过实验掌握 CC2530 芯片 GPIO 的配置方法 (2)掌握 HC-SR501 人体感应模块的使用 2. 实验设备 硬件:PC 机 一台 EB2530(底板、核心板、仿真器、USB 线) 一套 人体红外传感器 一个 有源蜂鸣器 一个 软件:2000/XP/win7 系统,IAR 8.10 集成开发环境 3. 实验相关电路图

温故
5. 实验相关寄存器 实验中使用 P0_4 作为检测引脚, 人进入其感应范围模块输出高电平,点亮 LED1,人离开感应范围 LED1 熄灭,P0.4 口为 HC-SR501 传感器的输入端。具体 HC-SR501 人体感应模块 OUT 输出电平由模块决 定,不同厂家可能不一样,不一样关系也不大,改动非常的小。
6. 源码分析
/****************************************************************************
* 文 件 名: main.c
* 描
述: 人进入其感应范围模块输出高电平,点亮 LED1,人离开感应范围 LED1 熄灭,
*
P0.4 口为 HC-SR501 传感器的输入端
****************************************************************************/
#include <ioCC2530.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define LED1
P1_0
//定义 P1.0 口为 LED1 控制端
#define DATA_PIN P0_4
//定义 P0.4 口为传感器的输入端
#define uint8 unsigned char
/****************************************************************************
* 名
称: DelayMS()
* 功
能: 以毫秒为单位延时 16M 时约为 535,系统时钟不修改默认为 16M
* 入口参数: msec 延时参数,值越大,延时越久
* 出口参数: 无
****************************************************************************/
void DelayMS(uint msec)
{
uint i,j;
for (i=0; i<msec; i++)
for (j=0; j<535; j++);
}
/****************************************************************************
* 名
称: InitGpio()
* 功
能: 设置 LED 灯和 P0.4 相应的 IO 口
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void InitLed(void)
{
P1DIR |= 0x01;
//P1.0 定义为输出口
P0SEL = 0x00;
P0DIR &= ~0x10;
//P0.4 定义为输入口
P2INP |= 0x20;
P0DIR |= 0x80;
//蜂鸣器引脚
}//检测人体传感器是否有人
//人体传感器接在 P04 上
//一旦检测到有人,10 次检测内都认为有人
//返回 1 表示有人,0 表示无人
uint8 GetPeople()
{
static uint8 peopleSencond=0;
uint8 people=0;
if(DATA_PIN==1)
{
peopleSencond=10;//一旦检测到有人,10 次检测内都认为有人
people=1;//检测到有人
}
else
{
if(peopleSencond>0)
{
peopleSencond--;
people=1;//倒计时结束前都认为有人
}
else
{
peopleSencond=0;
people=0;//没有人
}
}
return people;
}
void main(void)
{
InitLed();
//设置 LED 灯和 P0.4 相应的 IO 口
while(1)
//无限循环
{
if(GetPeople() == 1)
{
LED1 = 0;
//有人时 LED1 亮
P0_7=0; //有人的时候,蜂鸣器报警,方便验证
}
else
{
LED1=1;
//无人时 LED1 熄灭
P0_7=1;
//无人的时候,蜂鸣器不报警,方便验
}
DelayMS(500);
}



评分

参与人数 1黑币 +20 收起 理由
admin + 20 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表