main.c
/*******************************************************************************
*文件名 : main.c
*实现功能 : 热释电红外传感器(人体红外检测)
*实验平台 : 秉火 Zigbee 开发板
*硬件连接 : PEOPLE P0_0
LED1 P1_0
*******************************************************************************/
#include "People.h"
int flag=0;
int counter=0;
int flag2=0;
/**************************************************
函 数 名 : main
功能描述 : 热释电红外传感器(人体红外检测)
输入参数 : NONE
输出参数 : NONE
返 回 值 : NONE
***************************************************/
#pragma vector = T3_VECTOR
__interrupt void T3_ISR(void)
{
//消中断标志,可不清中断标志,硬件自动完成
IRCON = 0x00;
//200次中断LED闪烁一轮
if(counter<28200) //470/s
counter++;
else
{
counter=0;
flag=1;
}
}
void timer3init()
{
P1SEL|=0x08;
PERCFG&=~(1<<5); //备用位置1
P2SEL|=(1<<5); //定时器3优先
// T3CCTL0=~(1<<2);
T3CTL |= 0xE0; //标记频率/128
T3CTL |= 0x04; //清除计数器
T3CTL |= 0x10; //启动定时器T3
// T3CCTL1 |= 0x40; //T2的通道1中断使
T3CTL |= 0x08; //溢出中断使
IEN1 |= 0x08; //T3中断使能
IEN0 |= 0x80; //使能所有中断
}
void main(void)
{
uartinit();
//myprintf(char *data);
clockinit();
timer3init();
InitLed(); //调用初始化函数
PeopleInit();
while(1)
{
if(flag2==1)
myprintf("in!");
if(PeopleScan()) //改变LED状态
{
LED1=0; //有人,LED1点亮
flag2=1;
counter=0;
// myprintf("in!");
}
else
{
if(flag==1)
{
flag=0;
flag2=0;
}
LED1=1;
}
}
}
/*********************************************END OF FILE**********************/
people.h
/*******************************************************************************
*文件名 : People.h
*实现功能 : 热释电红外传感器(人体红外检测)
*实验平台 : 秉火 Zigbee 开发板
*硬件连接 : PEOPLE P0_0
LED1 P1_0
*******************************************************************************/
#ifndef __People_H__
#define __People_H__
#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char
//定义控制LED灯的端口
#define LED1 P1_0 //LED1为P1.0口控制
#define PEOPLE P0_7 //热释电红外传感器为P0.0口控制
//函数声明
void Delayms(uint xms); //延时函数
void InitLed(void); //初始化LED1
void PeopleInit(void); //热释电红外传感器初始化
uchar PeopleScan(void); //人体检测程序
#endif
/*********************************************END OF FILE**********************/
people.c
/*******************************************************************************
*文件名 : People.c
*实现功能 : 热释电红外传感器(人体红外检测)
*实验平台 : 秉火 Zigbee 开发板
*硬件连接 : PEOPLE P0_0
LED1 P1_0
*******************************************************************************/
#include "People.h"
/**************************************************
函 数 名 : Delayms
功能描述 : 毫秒延时
输入参数 : xms:延时时间,如 i=xms 即延时i/2毫秒
输出参数 : none
返 回 值 : none
***************************************************/
void Delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=587;j>0;j--);
}
/**************************************************
函 数 名 : InitLed
功能描述 : LED IO初始化函数
输入参数 : NONE
输出参数 : NONE
返 回 值 : NONE
***************************************************/
void InitLed(void)
{
P1DIR |= 0x01; //P1_0定义为输出
LED1 = 1; //LED1灯熄灭
}
/**************************************************
函 数 名 : PeopleInit
功能描述 : 热释电传感器IO初始化函数
输入参数 : NONE
输出参数 : NONE
返 回 值 : NONE
***************************************************/
void PeopleInit(void)
{
P0SEL &= ~0X80; //设置P0.7为普通IO口
P0DIR &= ~0X80; //在P0.7口,设置为输入模式
P0INP &= ~0x80; //打开P0.7上拉电阻,不影响
}
/**************************************************
函 数 名 : PeopleScan
功能描述 : 人体检测函数
输入参数 : NONE
输出参数 : NONE
返 回 值 : (uchar)0/1---检测结果
***************************************************/
uchar PeopleScan(void)
{
if(PEOPLE==0)
{Delayms(10);
if(PEOPLE==0)
{
return 0; //没人
}
}
return 1; //有人
}
/*********************************************END OF FILE**********************/