找回密码
 注册
关于网站域名变更的通知
查看: 134|回复: 2
打印 上一主题 下一主题

基于51单片机的热释电红外检测报警器程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-22 10:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
两种模式:一种紧急报警模式,另一种布防报警模式。! S! V5 f3 X1 i$ J& p! J

2 v4 i/ Z! E- D% T7 U( w2 R' `, U# O7 }# @
三个LED指示灯:红色为报警指示灯(检测到有人报警时闪亮)、绿色为布防指示灯(等待布防时1s一闪、进入布防状态时常亮)、黄色为传感器信号指示灯(有信号就亮,否则灭)。
: a' C6 Z- j5 E. ], {  q6 s8 t' X4 h$ f, n2 ^$ J0 ~0 {

% v5 x( z) n3 @& o, B4 E9 J按下布防键,系统计时20秒进入布防状态(此时绿色的led灯闪烁),20秒后系统进入布防状态(此时绿色的led亮长亮),此时当有人靠近时,黄色信号灯亮,红外热释电传感器将信号输送给单片机,单片机接收到信号蜂鸣器响,红色led灯亮,实现声光报警。& F5 i3 \' e: Y4 C
4 ]5 t) L; P1 J5 I- Q, b

; Y% q5 c6 W, P, T4 }: Y* J7 T当遇到特殊情况时,按下按键1(紧急报警键),系统马上报警。1 j  B" A1 M, [

4 h! n1 ?7 B; n' G4 v0 n6 t3 v! a" V红外热释电传感器感应人体,当感应到人输出高电平,没感应到人输出低电平。! g" @6 ]( J8 B& Q
- [. H  c4 @- _9 z# U# a

. h3 @3 y3 e" X( f四个按键:按键1紧急报警按键、按键2布防按键、按键3撤防按键、单独的是复位按键
2 T! v1 @- Z* N
6 P) ^& I5 b* K+ I单片机源程序如下:& o% t) d5 B$ I+ J1 l: B( P
  • #include <reg52.h>                 //调用单片机头文件
  • #define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255
  • #define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535
  • //   红外热释电传感器 平时为0  有输出为1
  • sbit beep  = P2^5;           //蜂鸣器定义
  • sbit red   = P0^1;           //红色发光二极管定义
  • sbit green = P0^4;           //绿色发光二极管定义
  • sbit yellow = P0^7;           //黄色发光二极管定义
  • sbit hw    = P0^0;           //红外热释传感器定义
  • bit flag_500ms = 0;
  • uchar flag_alARM ;     //报警标志位
  • uchar flag_bufang ;    //布防标志位
  • uchar flag_bufang_en ; //布防标志位使能
  • uint  flag_value;      //用做定时器的变量
  • /***********************1ms延时函数*****************************/
  • void delay_1ms(uint q)
  • {
  •         uint i,j;
  •         for(i=0;i<q;i++)
  •                 for(j=0;j<120;j++);
  • }
  • /********************独立按键程序*****************/
  • uchar key_can;         //按键值
  • void key()         //独立按键程序
  • {
  •         static uchar key_new;
  •         key_can = 20;                   //按键值还原
  •         P1 |= 0xff;
  •         if((P1 & 0xff) != 0xff)                //按键按下
  •         {
  •                 delay_1ms(1);                     //按键消抖动
  •                 if(((P1 & 0xff) != 0xff) && (key_new == 1))
  •                 {                                                //确认是按键按下
  •                         key_new = 0;
  •                         switch(P1 & 0xff)
  •                         {
  •                                 case 0xfb: key_can = 1; break;          //得到按键值
  •                                 case 0xf7: key_can = 2; break;          //得到按键值
  •                                 case 0x7f: key_can = 3; break;          //得到按键值
  •                         }
  •                 }
  •         }
  •         else   //按键松开
  •                 key_new = 1;
  • }
  • /******************对应不同按键处理**********************/
  • void key_with()
  • {
  •         if(key_can == 1)         //按键紧急报警
  •         {
  •                 flag_alarm = 1;  //报警标志位 ;
  •         }
  •         if(key_can == 2)     //布防按键
  •         {
  •                 flag_bufang_en = 1;
  •         }
  •         if(key_can == 3)         //取消报警  把变量清零
  •         {
  •                 flag_alarm = 0;
  •                 flag_bufang = 0;
  •                 flag_bufang_en = 0;
  •                 flag_value = 0;
  •                 beep = 1;
  •                 red = 1;  //关闭红灯
  •                 green = 1; //关闭绿灯
  •                 yellow = 1; //关闭黄灯
  •         }
  • }
  • /*************定时器0初始化程序***************/
  • void time_init()
  • {
  •         EA   = 1;                   //开总中断
  •         TMOD = 0X01;          //定时器0工作方式1
  •         ET0  = 1;                  //开定时器0中断
  •         TR0  = 1;                  //允许定时器0定时
  • }
  • /******************红外报警处理**********************/
  • void hongwai_dis()
  • {
  •         if(flag_bufang_en == 1) //准备开始布防
  •         {
  •                 green = ~green;           //绿灯闪
  •         }
  •         if(flag_bufang == 1)   //确认布防
  •         {
  •                 green = 0;         //如果延时布防成功 绿灯长亮
  •                 if(hw == 1)               //红外有输出
  •                 {
  •                         flag_alarm = 1;
  •                 }
  •         }
  •         if(flag_alarm == 1)           //报警
  •         {
  •                 red = ~red;                   //红灯报警
  •                 beep = ~beep;           //蜂鸣器报警
  •         }
  • }
    9 [; j/ m0 Z- E

% Z: j; c: Z: R

该用户从未签到

2#
发表于 2022-6-22 10:49 | 只看该作者
那四个按键接哪,程序里没有分配引脚0 N. h: H% N% p' v
是不是:这三行啊。% _0 W. e' P' H% J/ G( k
case 0xfb: key_can = 1; break;          //得到按键值3 B2 m# B  T$ R$ P5 @& e; d
case 0xf7: key_can = 2; break;          //得到按键值
: y5 \2 m- }! n# |2 [2 K# e$ E4 ]case 0x7f: key_can = 3; break;          //得到按键值

点评

学习学习。||ヽ(* ̄▽ ̄*)ノミ|Ю  详情 回复 发表于 2022-6-22 13:05

该用户从未签到

3#
发表于 2022-6-22 13:05 | 只看该作者
Terran 发表于 2022-6-22 10:49+ T) G2 I+ O, f
那四个按键接哪,程序里没有分配引脚
8 j  W; ~* K  G7 c9 e7 f2 }' |是不是:这三行啊。
8 h$ _, `  O( M0 h( ^case 0xfb: key_can = 1; break;          //得 ...
! Q  i: _5 N) x8 t
学习学习。||ヽ(* ̄▽ ̄*)ノミ|Ю
; D/ M. c9 M" r
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-13 20:49 , Processed in 0.125000 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表