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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
两种模式:一种紧急报警模式,另一种布防报警模式。
) |) g; u% I' O/ u. f* p: i9 c, T4 U8 I; @3 |5 c( u6 Y! g$ E

) d- n0 P  d9 k8 A6 T; B三个LED指示灯:红色为报警指示灯(检测到有人报警时闪亮)、绿色为布防指示灯(等待布防时1s一闪、进入布防状态时常亮)、黄色为传感器信号指示灯(有信号就亮,否则灭)。
9 C4 |3 s0 p* u$ }' y" B# e: Q* ^. b" K: F0 ^

6 X& A9 P# e& ~9 y* `按下布防键,系统计时20秒进入布防状态(此时绿色的led灯闪烁),20秒后系统进入布防状态(此时绿色的led亮长亮),此时当有人靠近时,黄色信号灯亮,红外热释电传感器将信号输送给单片机,单片机接收到信号蜂鸣器响,红色led灯亮,实现声光报警。
& m# G/ s0 E1 A0 E9 N0 l/ p) a2 Q
1 M3 D; E6 o7 X% ^8 g& ]
/ Y% K& X- k2 M) {( I当遇到特殊情况时,按下按键1(紧急报警键),系统马上报警。" K$ U/ E, w4 ~* T1 P# E6 ^! h

. C7 o$ ~& I- }! A2 o红外热释电传感器感应人体,当感应到人输出高电平,没感应到人输出低电平。& H; [. V0 V9 V+ ~2 \
) l+ T; g, m/ Y# `4 k7 V5 l
" a/ O, h! T9 J& D1 ?
四个按键:按键1紧急报警按键、按键2布防按键、按键3撤防按键、单独的是复位按键/ X% D1 q; M+ w: \. r

6 A, x$ h% ~) m4 s. h/ y( I! i: }单片机源程序如下:7 S$ p  i) M9 S5 ~/ m/ }
  • #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;           //蜂鸣器报警
  •         }
  • }
    * ^3 Y$ {1 U' m7 T. v
! X$ G4 v! u3 b) w

该用户从未签到

2#
发表于 2022-6-22 10:49 | 只看该作者
那四个按键接哪,程序里没有分配引脚
; D1 R5 F. b3 Y. x2 Y3 \. V是不是:这三行啊。
; a2 n  ^, B" W- pcase 0xfb: key_can = 1; break;          //得到按键值: e: C9 m+ F' w& j- b* F1 f
case 0xf7: key_can = 2; break;          //得到按键值0 `7 y: c6 n4 }- w& }/ b, u
case 0x7f: key_can = 3; break;          //得到按键值

点评

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

该用户从未签到

3#
发表于 2022-6-22 13:05 | 只看该作者
Terran 发表于 2022-6-22 10:49
* t& \' L# J, c8 y4 Q/ }# I% C- N那四个按键接哪,程序里没有分配引脚5 U9 `, c) m/ @' D0 k% H) L; ]+ O
是不是:这三行啊。# s# v$ n# S+ l8 Y5 s( ^( [
case 0xfb: key_can = 1; break;          //得 ...
0 x. U4 P9 Q. P# Z( i
学习学习。||ヽ(* ̄▽ ̄*)ノミ|Ю
6 d  f: u  g, |' G0 y* M& m) M6 R
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-5 01:48 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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