单片机补充案例--入侵检测系统
        【摘要】  说明:使用 STC89C52 设计入侵检测系统,给出方案和核心代码,需满足下列要求: 1. 发现入侵立刻开启 LED 闪烁警示 2. 入侵超过 5s 警报响起 3. 手动清除声光报警时,需输入安许可防密码 
设备: 
 
 
  入侵检测示意
 
也可采用按键模拟入侵信号,具体程序如下所示。但一定要掌握流程图和小系统设计的一般思路方法。 
使用ROS将入侵信号接入机器人物...
    
    
    
    说明:使用 STC89C52 设计入侵检测系统,给出方案和核心代码,需满足下列要求:
 1. 发现入侵立刻开启 LED 闪烁警示
 2. 入侵超过 5s 警报响起
 3. 手动清除声光报警时,需输入安许可防密码
设备:
 
也可采用按键模拟入侵信号,具体程序如下所示。但一定要掌握流程图和小系统设计的一般思路方法。
使用ROS将入侵信号接入机器人物联网系统,可完成更多丰富的应用案例。
程序:
  
   - 
    
     
    
    
     
      #include <8052.h>
     
    
- 
    
     
    
    
     
      __sfr  __at (0xE8) P4;
     
    
- 
    
     
    
    
     
      __sbit __at (0xEC) P4_4;
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #define LED P0 //LED闪烁警示
     
    
- 
    
     
    
    
     
      #define LSA P1_5 //P0控制=0
     
    
- 
    
     
    
    
     
      #define LSB P1_6 //P0控制=0
     
    
- 
    
     
    
    
     
      #define LSC P1_7 //P0控制=0
     
    
- 
    
     
    
    
     
      #define ALARM P4_4 //声音警示
     
    
- 
    
     
    
    
     
      #define HUMAN P3_2 //模拟人体检测信号
     
    
- 
    
     
    
    
     
      #define KEY01 P3_4 //模拟密码组合1
     
    
- 
    
     
    
    
     
      #define KEY02 P3_5 //模拟密码组合2
     
    
- 
    
     
    
    
     
      unsigned int   cnt = 0; //定义一个计数变量,记录 T0 溢出次数
     
    
- 
    
     
    
    
     
      unsigned char  alarmlevel=0; //警报等级
     
    
- 
    
     
    
    
     
      void sleep(unsigned int t);
     
    
- 
    
     
    
    
     
      void SysInit();
     
    
- 
    
     
    
    
     
      void Timer0() __interrupt 1;
     
    
- 
    
     
    
    
     
      /************************************************************/
     
    
- 
    
     
    
    
     
      void main () //主函数
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
     
      	SysInit();
     
    
- 
    
     
    
    
     	while(1)
     
    
- 
    
     
    
    
     
      	{
     
    
- 
    
     
    
    
      if(alarmlevel==1) //LED警示
     
    
- 
    
     
    
    
     
       {
     
    
- 
    
     
    
    
     
       LED=0xff;
     
    
- 
    
     
    
    
     
       sleep(10000);
     
    
- 
    
     
    
    
     
       LED=0x00;
     
    
- 
    
     
    
    
     
       sleep(10000);
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
      if(alarmlevel==2) //LED+Sound警示
     
    
- 
    
     
    
    
     
       {
     
    
- 
    
     
    
    
     
       LED=0xff;
     
    
- 
    
     
    
    
     
       ALARM=1;
     
    
- 
    
     
    
    
     
       sleep(2000);
     
    
- 
    
     
    
    
     
       LED=0x00;
     
    
- 
    
     
    
    
     
       ALARM=0;
     
    
- 
    
     
    
    
     
       sleep(2000); 
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
     
      	}
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
      /************************************************************/
     
    
- 
    
     
    
    
     
      void sleep(unsigned int t)
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
     	while(t--);
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
     
      void SysInit()
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
     
      	LSA  = 0; //本开发板的P0发光二极管片选地址
     
    
- 
    
     
    
    
     
      	LSB  = 0;
     
    
- 
    
     
    
    
     
      	LSC  = 0;
     
    
- 
    
     
    
    
     
      	LED  = 0xff;; //初始化LED
     
    
- 
    
     
    
    
     
      	TMOD = 0x01; //设置定时器T0工作方式1
     
    
- 
    
     
    
    
     
      	TL0  = 47104%256;  //计数器初值
     
    
- 
    
     
    
    
     
      	TH0  = 47104/256;
     
    
- 
    
     
    
    
     
      	TR0  = 1; //启动定时器
     
    
- 
    
     
    
    
     
      	ET0  = 1; //开中断
     
    
- 
    
     
    
    
     
      	EA   = 1;
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
     
      void Timer0() __interrupt 1 //定时器 T0 中断响应
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
     
       	TL0  = 47104%256;   //计数器初值
     
    
- 
    
     
    
    
     
      	TH0  = 47104/256;
     
    
- 
    
     
    
    
     	if(HUMAN==0)
     
    
- 
    
     
    
    
     
      	{
     
    
- 
    
     
    
    
     
       cnt++;
     
    
- 
    
     
    
    
      if(alarmlevel==0)
     
    
- 
    
     
    
    
     
       alarmlevel=1;
     
    
- 
    
     
    
    
     
      	}
     
    
- 
    
     
    
    
      	if (cnt > 249) //判断 T0 溢出是否达到 250 次,等于5秒
     
    
- 
    
     
    
    
     
       	{
     
    
- 
    
     
    
    
      if(alarmlevel==1)
     
    
- 
    
     
    
    
     
       alarmlevel=2;
     
    
- 
    
     
    
    
     
       	}
     
    
- 
    
     
    
    
      	if(KEY01==0&&KEY02==0)  //密码合适清全部状态
     
    
- 
    
     
    
    
     
      	{
     
    
- 
    
     
    
    
     
       alarmlevel=0;
     
    
- 
    
     
    
    
     
       LED=0xff;
     
    
- 
    
     
    
    
     
       ALARM=1;
     
    
- 
    
     
    
    
     
       cnt=0;
     
    
- 
    
     
    
    
     
      	}
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
      
     
    
 
文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。
原文链接:zhangrelay.blog.csdn.net/article/details/109667314
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)