我们设计为3V-5V的工作电压以便报警系统安装更加灵活方便。通常情况下可以使用3只1.5V普通直流干电池为电源,考虑到更换电池的问题,也可以外接4.5V直流电源使用起来更为长久。
单片机运行起始情况都是由复位电路来控制和确定的,而且复位电路完成单片机的启动过程十分高效简洁。一般情况下电源连接上的时候单片机就会生成一个复位信号,如果此时单片机完成了启动动作,那么我们可以判断单片机目前运行正常;如果没有完成启动动作则单片机运行不正常,需要调试。当单片机运行之中遇到程序跑飞这种外界环境干扰和影响而产生的情况之时,我们通常使用复位按钮来启动热释电红外报警器系统单片机内部设定的程序让单片机重新运行我们所需要它运行的程序。通常情况中电路中的单片机复位方式要么是自动复位,要么就是手动复位,这是最常用最实用的电路复位方法。自动复位一般都是上电自动复位,手动复位就是按键复位,单片机复位动作往往是在时钟电路运行后于RESET端生成了两个周期高电平而完成的。至于手动复位,本设计采用了一个按键来实现,即手动复位键,改按键的设计使得电路复位变得更加简单可靠,为了把输出电平升高到一定的值,我们通常都连接了上拉电阻。 3.2 按键电路设计
本报警系统中不同状态的工作形式也是不同的,考虑到操作的简单和实用功能,我们对本设计的电路初步进行了简单的规划设计,经过再三研讨后设计确定如下:布防状态在我们按了布防按键后立即启动,大约5 秒系统进入布防状态,这5 秒的时间是为了操作人员离开布防区域而设置的,这个时间可以根据具体的离开布防区域需要的时间来设置;倘若无人闯入监控布防范围内,则不动作;倘若有人在探测器布防范围内移动,那么人体辐射的红外线会被探测器立刻感应到,并立刻通过电路传至单片机进行运算处理,单片机快速运算后立马通过电路发出信号控制声光报警部分报警。考虑到一些始料未及的突发情况,客户还需要我们对报警系统附加一个紧急的报警方案,为解决此问题,我们在设计中使用了一个紧急报警电路从根本上解决了这个需求,既方便又实用,在紧急报警按键按下后电路立刻进行声光报警。如图下图3-8所示。
3.3 指示灯电路设计 高低不同的电平状态是由单片机的I/O端口的输出来决定的,P22连接黄色LED指示灯,P21连接绿色LED指示灯,P20连接红色LED指示灯,P12连接报警用蜂鸣器,而蜂鸣器工作的驱动与否是由外部连接的三极管是否达到饱和状态而决定的,该三极管如同一个开关,达到了饱和状态就会驱动报警蜂鸣器运行。
第四章 程序设计 4.1 程序流程图
4.2 程序设计(黑体四号)
4.2.1 按键设计程序 //自动报警按键 void baojing()
{if(s1==0)
{delay(10);
if(s1==0)
{while(!s1);
jinji=1;temp=4;}
}}
//布防按键 void prebufang()
{if(jinji==0)
{if(s2==0)
{delay(10);
if(s2==0)
{while(!s2);
temp=1;}}}}
//关闭报警,撤销布防按键 void guanbi()
{ if(s3==0)
{temp=5;}}
//红外检测按键 void alarm()
{if(SR==0&temp==2)
{delay(10);
if(SR==0)
{while(!SR);
temp=3; }} }
4.2.2指示灯和报警程序 switch(temp)
{case 1:{LY=0;delay(500);LY=1;delay(500);TR0 =1;}break; //布防键按下
case 2 : {LY=0;TR0=0;}break; //5秒后常亮
case 3:{fmq=0;LR=0;LY=1;LG=0; delay(500); fmq=1;LR=1;LY=1;LG=1;delay(500);}break;//布防期间,有人来了
case 4 :{fmq=0;LR=0;LY=1;LG=1; delay(500); fmq=1;LR=1;LY=1;LG=1; delay(500);} break; //报警
case 5 :{LR=1;LG=1;LY=1;fmq=1;jinji=0;}break;//关闭报警/取消布防 default:{} }}}
5.1 软件调试调试主要方法和技巧: 通常一个调试程序应该具备至少四种性能:跟踪、断点、查看变量、更改数值。整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各个子程序模块进行分别调试。 我们在调试时,先对紧急报警模块与基本布防功能(黄灯常亮)进行了测试,在按下键后红灯闪烁,蜂鸣器闪鸣;布防键按下,黄灯常亮,功能正确;随后,增加了黄灯闪烁功能,布防键按下,黄灯闪烁5秒后常亮,有人闯入布防区域,绿灯与红灯闪烁,蜂鸣器闪鸣。最后,增加了取消报警撤销布防按钮。 5.2 仿真结果
结果分析根据仿真结果可知,本设计能够准确并彻底的完成设计要求。 按下自动报警按键,红灯闪烁,蜂鸣器闪鸣;按下布防按键,黄灯闪烁5秒后常亮,进入布防状态,这时若检测到有人来,红灯和绿灯闪烁,蜂鸣器闪鸣;按下关闭按键,关闭报警,撤销布防。
遇到的困难及解决办法
1.设置报警为最高优先级:在报警过程中,除关闭按钮外,不受其他按钮控制.(设置jinji标志位,添加限制条件)
2.程序需要多次判断,导致结构混乱。(将程序模块化处理)
3.闪烁时按下关闭按钮,跳不出死循环(设置状态标志位,用switch多分支选择语句)
- //51单片机简人体红外报警器设计,手动按键控制实现紧防、撤急报警、布防、关闭报警)
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit s1=P1^0; //紧急报警按键
- sbit s2=P1^1; //布防按键
- sbit s3=P1^3;
- sbit SR=P2^6;
- sbit LY=P2^2;
- sbit LG=P2^1;
- sbit LR=P2^0;
- sbit fmq=P1^2;
- uchar temp=0;
- uchar value=0;
- uchar jinji=0;
-
- void delay(uint j)
- {uchar t;
- while(j--)
- for(t=0;t<125;t++);
- }
-
- void baojing()
- {if(s1==0)
- {delay(10);
- if(s1==0)
- {while(!s1);
- jinji=1;temp=4;}
- }}
-
- void prebufang()
- {if(jinji==0)
- {if(s2==0)
- {delay(10);
- if(s2==0)
- {while(!s2);
- temp=1;} }}}
- void guanbi()
- { if(s3==0)
- {temp=5;}}
- void alarm()
- {if(SR==0&temp==2)
- {delay(10);
- if(SR==0)
- {while(!SR);
- temp=3; }} }
- void time0_int() interrupt 1{
- TH0 = 0x3c; TL0 = 0xb0; // 50ms
- value ++;
- if(value == 100)
- { temp=2;value=0; } }
- void main( )
- {LR=1;LY=1;LG=1;
- EA = 1; //开总中断
- TMOD = 0X01; //定时器0工作方式1
- ET0 = 1; //开定时器0中断
- TH0 = 0x3c;
- TL0 = 0xb0;
- while(1)
- { baojing();
- prebufang();
- guanbi();
- alarm();
- switch(temp)
- {case 1:{LY=0;delay(500);LY=1;delay(500);TR0 =1;}break; //布防键按下
- case 2 : {LY=0;TR0=0;}break; //5秒后常亮
- case 3:{fmq=0;LR=0;LY=1;LG=0; delay(500);
- fmq=1;LR=1;LY=1;LG=1;delay(500);}break;//布防期间,有人来了
- case 4 :{fmq=0;LR=0;LY=1;LG=1; delay(500);
- fmq=1;LR=1;LY=1;LG=1; delay(500);} break; //报警
- case 5 :{LR=1;LG=1;LY=1;fmq=1;jinji=0;}break;//关闭报警/取消布防
- default:{}
- }}}
复制代码
仿真文件下载:
单片机设计.7z
(425.98 KB, 下载次数: 152)
|