日志档案

发表于 2008-4-16 0:36:20

2

标签: 无标签

反射式红外报警

 EDN51验证  ,不过,我不知道为什么,在台灯下面存在问题,就是会误报,不知道是不台灯也是38KHZ,呵呵,谁来解释哈撒

 

/**************************************************************************
简单的被动式红外线报警器
 PA=P1^0发射;
 PB=P0^7LED闪;
 PC=P0^6;灯

PD="P1"^7蜂鸣器
***************************************************************************/

#include   //

#include
void delay_nus(unsigned int n);//函数声明,本实验中会用到这两个函数
void delay_nms(unsigned int n);
sbit PA="P1"^0;
sbit PB="P0"^7;
sbit PD="P1"^7;
sbit PC="P0"^6;

 

void main(void)//主函数

  unsigned int i;
 
  unsigned int n;

  unsigned int j;
 
  IP="0x02";
  TMOD="0x01";
  PA="0";
  //TH0=-(26/256);
  //TL0=-(26%256);
   TH0=0xD1;
  TL0=0x33;
  IT0=1;  //电平触发
  EA="1";
  ET0=1;
  TR0=1;
  EX0 = 1; //允许外部中断0
 
 // TR0=1;
  //EX0 = 1; //允许外部中断0

  
   PB="0";
   PC="1";
   PD="1";
   j="0";
  
 
 while(1)
    {
     EX0 = 1;
  
  if(PC==0)
   {
        j++;
        if(j>10)
       {
     for(i=0;i<5;i++)
      {
          PB="0";//led
    PD="0";
       delay_nms(100);
    PB="1";//led
    PD="1";
    }
      j="0";
  
  
     }
     PC="1";
   }
 
    } 
}

void time() interrupt 1 using 1//产生38KHz的方波信号
{
  PA=!PA;
  TH0=0xD1;
  TL0=0x33;
}


void xian() interrupt 0 using 0
{  
    PC="0"; 
 EX0 = 0;
}


void delay_nus(unsigned int n)//n微秒延时函数
{
unsigned int i;
for (i=0;i  {
      _nop_();
  }
}

void delay_nms(unsigned int n)//n毫秒延时函数
{
  unsigned int i;
  for (i=0;i  delay_nus(1000);
}

系统分类: 单片机   |   用户分类: 单片机   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(622)    回复(2)  

投一票您将和博主都有获奖机会!

  • will666

    2008-4-18 12:40:36

    还请博主解释一下原理和使用方法,哈哈哈

  • 200708

    2008-4-18 15:33:10

    这么奇怪,你到网上查查嘛