1. 實驗目的
(1)通過實驗掌握 CC2530 芯片 GPIO 的配置方法
(2)掌握 HC-SR501 人體感應模塊的使用
2. 實驗設備
硬件:PC 機
一臺
EB2530(底板、核心板、仿真器、USB 線)
一套
人體紅外傳感器
一個
有源蜂鳴器
一個
軟件:2000/XP/win7 系統(tǒng),IAR 8.10 集成開發(fā)環(huán)
4. 傳感器說明
PIR 熱釋電紅外傳感器是一種能檢測人或動物發(fā)射的紅外線而輸出電信號的傳感器。調試時人體盡量
遠離感應區(qū)域,有時雖然人體不在模塊的正前方,但是人體離模塊太近時模塊也能感應到造成一直有輸出,
還有調試時人體不要觸摸電路部分也會影響模塊工作。人體感應模塊只能工作在室內并且工作環(huán)境應該避
免陽光、強烈燈光直接照射
溫故
1. 實驗目的 (1)通過實驗掌握 CC2530 芯片 GPIO 的配置方法 (2)掌握 HC-SR501 人體感應模塊的使用 2. 實驗設備 硬件:PC 機 一臺 EB2530(底板、核心板、仿真器、USB 線) 一套 人體紅外傳感器 一個 有源蜂鳴器 一個 軟件:2000/XP/win7 系統(tǒng),IAR 8.10 集成開發(fā)環(huán)境 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,系統(tǒng)時鐘不修改默認為 16M
* 入口參數(shù): msec 延時參數(shù),值越大,延時越久
* 出口參數(shù): 無
****************************************************************************/
void DelayMS(uint msec)
{
uint i,j;
for (i=0; i<msec; i++)
for (j=0; j<535; j++);
}
/****************************************************************************
* 名
稱: InitGpio()
* 功
能: 設置 LED 燈和 P0.4 相應的 IO 口
* 入口參數(shù): 無
* 出口參數(shù): 無
****************************************************************************/
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)
//無限循環(huán)
{
if(GetPeople() == 1)
{
LED1 = 0;
//有人時 LED1 亮
P0_7=0; //有人的時候,蜂鳴器報警,方便驗證
}
else
{
LED1=1;
//無人時 LED1 熄滅
P0_7=1;
//無人的時候,蜂鳴器不報警,方便驗
}
DelayMS(500);
}
|