历史上的今天
今天是:2024年12月06日(星期五)
2020年12月06日 | 基于51单片机的热释电红外检测报警器程序
2020-12-06 来源:51hei
两种模式:一种紧急报警模式,另一种布防报警模式。
三个LED指示灯:红色为报警指示灯(检测到有人报警时闪亮)、绿色为布防指示灯(等待布防时1s一闪、进入布防状态时常亮)、黄色为传感器信号指示灯(有信号就亮,否则灭)。
按下布防键,系统计时20秒进入布防状态(此时绿色的led灯闪烁),20秒后系统进入布防状态(此时绿色的led亮长亮),此时当有人靠近时,黄色信号灯亮,红外热释电传感器将信号输送给单片机,单片机接收到信号蜂鸣器响,红色led灯亮,实现声光报警。
当遇到特殊情况时,按下按键1(紧急报警键),系统马上报警。
红外热释电传感器感应人体,当感应到人输出高电平,没感应到人输出低电平。
四个按键:按键1紧急报警按键、按键2布防按键、按键3撤防按键、单独的是复位按键
单片机源程序如下:
#include #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 } /********************独立按键程序*****************/ 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; //蜂鸣器报警 } } for(j=0;j<120;j++);
下一篇:单片机8键电子琴设计
史海拾趣
|
全球GSM用户数突破20亿 2006-7-7 据GSM协会发布的报告:“在6月17日~18日这个周末,全球GSM手机用户数已突破20亿。” GSM协会主席CraigEhrlich说,这是移动通信行业所达到的又一个辉煌的里程碑。自从第一 ...… 查看全部问答> |
|
变频器是电牵引采煤机上常用的、重要的调速设备。因此 ,为保证其稳定、可靠地工作 ,合理的使用、维护尤其重要。文章总结了 ACS800系列变频器使用、维护及故障处理过程中应注意的事项 ,这对于其它型式变频器的维护有一定的借鉴作用。… 查看全部问答> |
|
安装后,在电脑上多出一个虚拟打印机,用虚拟打印机打印的结果是生成一个PDF文档,如果需要将原理图生成PDF文档上传到网上,就可用虚拟打印机实现了!!!!:D [ 本帖最后由 lycdl 于 2008-7-10 12:20 编辑 ]… 查看全部问答> |
|
我在WINCE6.0下使用DialogBox()下出错,其消息函数中,在一条消息函数中,只执行了一条语句就转到其他消息去了,请问这是什么原因.谢谢!… 查看全部问答> |




