初步探讨Zigbee之外设红外检测

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**********************/
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值