找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 15466|回复: 4
收起左侧

基于STC89C52单片机的防盗报警系统课程设计报告(论文)下载

[复制链接]
ID:289599 发表于 2018-4-1 10:01 | 显示全部楼层 |阅读模式
课程设计(设计报告)论文
基于STC89C52单片机的防盗报警系统

专    业:自动化

摘  要

随着现代科技社会的发展,人们的生活水平不断地提高,科技产品每时每刻都在不断地更新,人们不断的追求创新的科技产品,家居智能化也逐步的走进了人们的生活。与此同时,人们对自己生活环境的舒适性和安全性有了新的要求,特别是在家居安全方面,舒适生活的前提就是有一个相对安全的环境,虽然在一些高端的住宅、酒店等已经实现了智能楼宇安保系统应用,但在绝大部分的普通住宅、宾馆等仍然存在财产安全等一系列的安全问题。在本文中介绍了一种利用红外热释电传感器进行监控,并能够及时进行报警的系统的设计。

本设计基于STC89C52单片机,利用热释电红外传感器良好的工作特性及隐蔽性高的特点射设计了防盗报警系统,以实现防盗报警的目的。

目  录

1绪论

2系统设计

2.1硬件设计

2.1.1电源模块

2.1.2热释电红外传感器

2.2程序设计

2.3软件仿真

3仿真结果

4硬件调试

5设计总结

附录:程序源代码



1 绪论

随着科技的进步,家居智能化、现代化的发展,我们的生活水平有了很大提高。各种类型的高档家电和贵重物品已成为多数家庭中不可或缺的重要组成。同时也带来了一定的安全问题,虽然智能楼宇安保系统能够有效的解决这一问题,但是市场上的智能楼宇安保系统大部分是适用于一些大公司的重要机构或者仅仅应用在高档住宅小区、酒店等,其价格昂贵,使普通家庭难以承受。

如果设计一种价格低廉,性能可靠、智能化的报警系统,必将在私人财产安全性的应用中发挥重要的作用。在防盗报警领域中,常利用红外线的隐蔽性及其相关检测产品的工作特性稳定的优势进行防盗报警,红外线报警器分为主动式和被动式两种。主动式红外线报警器,是报警器主动发出红外线,红外线碰到障碍物,就会反弹回来,被报警器的探头接收。如果探头监测到,红外线是静止不动的,那么报警器就不会报警。当物体隔断红外线的时候,探头就会检测到异常,就会报警。被动式报警器不能发射红外线,只能被动接收红外线。这类红外线报警器对温度敏感,温度越高的物体辐射出的红外线越强,当感应到环境中存在高出背景强度的辐射时,就触发报警。

本设计采用被动式红外线传感器——热释电红外传感器,以STC89C52为控制核心,对人体发出的红外线进行检测,实现防盗报警。

2 系统设计

本设计包括硬件和程序设计两个部分。硬件部分主要包括:红外感应部分、STC89C52单片机、报警系统三大部分。程序设计部分为系统的控制程序。在系统设计过程中,首先通过Proteus仿真软件对硬件电路的设计进行仿真搭建,通过软件仿真完成对程序的验证。完成程序验证及元器件校验后,进行硬件搭建,将程序下载到单片机芯片中,完成系统的调试。

本设计采用被动式红外线传感器——热释电红外传感器,以STC89C52为控制核心,对人体发出的红外线进行检测,实现防盗报警。若检测到红外信号则触发报警器以实现防盗报警的目的。其中系统控制由以STC89C52为控制核心的最小系统和指示电路、报警电路、按键控制、红外感应、电源模块组成。系统工作原理为:由热释电红外感应器完成信息采集、处理,经过处理后的模拟量变为数字量传送至单片机,由单片机发出报警信号至报警装置进行报警。系统总体设计原理图如图2-1所示:

图2-1 系统总体设计框图

2.1 硬件设计

2.1.1 电源模块

本系统需求供电电压为4.5v左右,可通过变压器变压由220v交流电之间供电,也可由3个1.5v的直流干电池直接供电。前者供电较为稳点,但由后者供电方便系统的安装,其缺点是需要手动定时更换电池,以保证系统正常工作。

2.1.2 热释电红外传感器

热释电红外传感器(简称PIR)是80年代发展起来的一种新型高灵敏度探测元件。热释电红外传感器是基于热电效应原理的热电型红外传感器。其热电系数远远高于热电偶,同时为了抑制因自身温度变化而产生的干扰, 该传感器在工艺上将两个特征一致的热电元反向串联或接成差动平衡电路方式, 因而能以非接触式检测出物体放出的红外线能量变化,并将其转换成电压信号输出。同时通过装在探头内的场效应管完成电压信号的放大以驱动各种控制电路,其在实际中的应用主要有:电源开关控制、防盗防火报警、自动监测等。

人体辐射的红外线中心波长为9~10--um,而探测元件的波长灵敏度在0.2~20--um范围内几乎稳定不变。因此在探测器的前方装设一个菲涅尔透镜,该透镜用透明塑料制成,将透镜的上、下两部分各分成若干等份,制成一种具有特殊光学系统的透镜,它和放大电路相配合,可将信号放大70分贝以上,这样就可以测出10~20米范围内人的行动。在传感器顶端开设了一个装有滤光镜片的窗口,这个滤光片可通过光的波长范围为7~10--um,正好适合于人体红外辐射的探测,而对其它波长的红外线由滤光片予以吸收,这样便形成了一种专门用作探测人体辐射的红外线传感器,本传感器是整个系统的关键,通过本传感器对人体红外线的检测以实现报警电路信号的获取。如图2-2所示为热释电红外传感器实物图。

图2-2 热释电红外传感器

2.1.3 单片机最小系统

STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。片上Flash允许程序存储器在系统可编程,同时也适用于常规编程器。其最重要的特点是有掉电保护,其RAM内容能够被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

单片机最小系统是由STC89C52单片机、复位电路和晶振电路构成。其工作电压范围为:4V-5.5V,通常我们给单片机5V直流电源。单片机的与电源的连接方式为40引脚VCC接正极(5V),20引脚VSS接地。

复位电路,就是利用它把电路恢复到起始状态。确保使系统各部件处于确定的初始状态,并从初态开始工作。VCC上电时,使电容C充电,在10 K电阻上出现高电位电压,使得单片机复位;几毫秒后,电容C充满,10K电阻上电流降为0A,电压也为0V,使得单片机进入工作状态。工作期间,按下S1开关,电容C放电,在10K电阻上出现电压,使得单片机复位。

时钟电路一般由晶体振荡器、晶震控制芯片和电容组成,产生像时钟一样准确运动的振荡电路,向单片机提供一个正弦波信号作为基准,控制单片机的执行速度。XTAL1和XTAL2分别为反向放大器的输入和输出,该反向放大器可以配置为片内振荡器。如采用外部时钟源驱动器件,XTAL2应不接。因为一个机器周期含有6个状态周期,而每个状态周期为2个振荡周期,所以一个机器周期共有12个振荡周期,如果外接石英晶体振荡器的振荡频率为12MHZ,一个振荡周期为1/12us。如图2-3所示为单片机最小系统。

图2-3 单片机最小系统

2.1.4 按键控制电路

按键控制电路包括布防、紧急报警和取消报警三种工作状态,当按下布防按键后,系统在20秒后进入检测状态,当有人靠近时,热释电红外传感器检测到红外信号,送至单片机,单片机发出信号控制报警电路进行声光报警。如遇到紧急情况时,可直接按下紧急报警键,直接触发声光报警。按键控制电路如图2-4所示。

图2-4 按键控制电路

2.1.5 指示灯及报警电路

指示电路使用红、绿、黄发光二极管共阳极连接构成,红灯表示报警指示灯,黄灯表示系统指示灯,绿灯表示布防指示灯。在P20、P21和P22分别与LED指示灯相接,P23与蜂鸣器相接,同时与蜂鸣器串联的三极管起到开关作用,当三极管达到饱和状态时,蜂鸣器被驱动正常工作。报警电路如图2-5所示。

图2-5 报警电路

2.2 程序设计
     依据系统设计目的我们可以分析得到主程序工作流程图,如图2-4所示。

启动防盗报警系统,黄色发光二极管亮,等待按键信号输入,当布防按键按下时,系统进入20秒布防时间,在此期间绿色发光二极管闪烁,布防时间结束后,绿色发光二极管常亮,等待红外信号输入,当检测到红外信号时,触发报警电路,蜂鸣器报警,红色发光二极管闪烁;当紧急报警按键按下时,直接触发报警电路,蜂鸣器报警,红色发光二极管闪烁。



图2-4 主程序流程图

2.3 软件仿真

Proteus是基于SPICE3F5仿真引擎的混合电路仿真软件,不仅能够仿真模拟、数字电路以及模数混合电路,更具特色的是它能够仿真基于单片机的电子系统。Proteus不但完全支持MCS-51及其派生系列单片机的设计系统,另外也能仿真基于AVR和PIC系列的单片机系统。Proteus的仿真资源Proteus软件可提供的模拟、数字、交(直)流等元器件达30多个元件库,共计数千种。此外,对于元件库中没有的器件,使用者也可依照需要自己创建。软件调试方面,其自身自带汇编编译器,不支持C语言。但可以将它与Keil C51集成开发环境连接,将用汇编和C语言编写的程序编译好之后,可以立即进行软、硬件结合的系统仿真,如同使用仿真器一样来调试程序。如图2-5所示为Proteus软件。

图2-5 Proteus软件

3 仿真结果

如图3-1所示为系统仿真系统搭建。

图3-1 Proteus仿真系统搭建

在仿真过程中,首先将源程序的.hex文件载入单片机芯片中,然后开始仿真,闭合电源模块中的SW3开关,指示灯D5点亮;闭合布防按键,则D3指示灯开始闪烁,进入20秒布防时间,布防结束后,D3指示灯常亮,若红外热释电传感器检测到红外线即开关SW2闭合,则触发报警(蜂鸣器LS1响,指示灯D1闪烁);闭合手动报警按键,直接触发报警(蜂鸣器LS1响,指示灯D1闪烁);在报警过程中,闭合取消键则取消报警(蜂鸣器LS1停止报警,指示灯D1停止闪烁)。

仿真过程中,开始由于线路连接问题,导致仿真无法正常运行,经过反复检查终于发现,在连线过程中未能将电源成功接入电路中,导致整个系统无法正常运行。

最终经仿真验证,系统程序正确,硬件电路元件选择合理。

4 硬件调试

如图4-1为系统正面图,图4-2为系统背面图。在系统正面图中所示热释电红外传感器中有两个调节旋钮,左边调节旋钮为灵敏度调节,右边调节旋钮为延时调节,通过调节两个旋钮完成监测精度和信号延时的设定。

调试时,首先对焊接点进行观察,检查是否有虚焊、漏焊的焊点,保证系统能够安全运行。初步检查后,使用万用表对各个焊点进行再次检查,确保电路没有短路且其通断状态与设计一致,保证系统能够安全运行。在确保系统能够安全运行后,对其加电检查,用万用表对各个器件两端电压进行检测,确保其能够正常工作,最后将程序写入单片机中,对复位电路、指示电路、报警电路、按键控制和红外检测进行验证。

图4-1 系统正面图

图4-2 系统背面图

5 设计总结

本设计完成了基于单片机的热释电红外防盗报警器的制作。该防盗报警器以STC89C52单片机为系统处理核心,通过热释电红外传感器这种被动式红外探测器件,以非接触方式探测人体发出的红外辐射,并将其转化为电信号输出,同时该传感器能有效的抑制人体辐射波长以外的红外光线与可见光的干扰。在正常工作时传感器输出低电平,当有人在探测区范围内移动时,传感器输出变为高电平,并将此高电平信号作为单片机的外部触发信号处理,同时单片机发出响应的控制信号,驱动声光报警电路报警。该防盗报警器的特点有以下几点:

  •         操作简单、易懂、灵活
  •         安装方便、智能性高、误报率低。

随着人们安全意识的增强以及科学技术的快速发展,防盗报警器必将在更广阔的领域得到更深层次的应用。


单片机源程序如下:
  1. #include <reg52.h>                       //调用单片机头文件
  2. #define uchar unsigned char  //无符号字符型 宏定义              变量范围0~255
  3. #define uint  unsigned int              //无符号整型 宏定义              变量范围0~65535

  4. #define key_io P1
  5. uchar key_can;

  6. //   红外热释电平时为0  有输出为1

  7. sbit beep = P2^3;                 //蜂鸣器定义
  8. sbit red  = P2^2;                 //红色发光二极管定义
  9. sbit green = P2^1;                 //绿色发光二极管定义
  10. sbit yellow = P2^0;                 //黄色发光二极管定义
  11. sbit hw    = P1^3;                 //红外热释传感器定义
  12. bit flag_300ms = 0;

  13. /****************独立按键处理函数************************/               
  14. void key()
  15. {
  16.               static uchar key_new = 0,key_old = 0,key_value = 0;
  17.               if(key_new == 0)                            //按键松开
  18.               {
  19.                             if((key_io & 0x07) == 0x07)
  20.                                           key_value ++;
  21.                             else
  22.                                           key_value = 0;
  23.                             if(key_value >= 5)              //按键松开松手检测
  24.                             {
  25.                                           key_value = 0;
  26.                                           key_new = 1;              //按键松开后进入等待按键状态
  27.                             }
  28.               }
  29.               else
  30.               {
  31.                             if((key_io & 0x07) != 0x07)              //按键按下
  32.                                           key_value ++;
  33.                             else
  34.                                           key_value =0;
  35.                             if(key_value >= 5)              //按键按下消抖
  36.                             {
  37.                                           key_value = 0;
  38.                                           key_new = 0;                 //按键松开后进入等待松开按键状态
  39.                             }
  40.               }
  41.               key_can = 20;
  42.               if((key_new == 0) && (key_old == 1))
  43.               {
  44.                             switch(key_io & 0x07)
  45.                             {
  46.                                           case 0x06: key_can = 1; break;                //得到按键值
  47.                                           case 0x05: key_can = 2; break;                //得到按键值
  48.                                           case 0x03: key_can = 3; break;                //得到按键值
  49.                             }
  50.               }                                         
  51.               key_old = key_new;            
  52. }

  53. /*************定时器0初始化程序***************/
  54. void time_init()               
  55. {
  56.               EA   = 1;                              //开总中断
  57.               TMOD = 0X01;                //定时器0工作方式1
  58.               ET0  = 1;                              //开定时器0中断
  59.               TR0  = 1;                              //允许定时器0定时
  60. }

  61. uchar flag_alarm ;     //报警标志位
  62. uchar flag_bufang ;    //布防标志位
  63. uchar flag_bufang_en ; //布防标志位使能
  64. uint  flag_value;      //用做定时器的变量

  65. /******************红外报警处理**********************/               
  66. void hongwai_dis()
  67. {
  68.               if(flag_alarm == 1)                 //报警
  69.               {
  70.                             red = ~red;                               //红灯报警
  71.                             beep = ~beep;                 //蜂鸣器报警
  72.               }            
  73.               if(flag_bufang_en == 1) //准备开始布防
  74.               {
  75.                             green = ~green;                 //绿灯闪
  76.                                          
  77.               }
  78.               if(flag_bufang == 1)   //确认布防
  79.               {
  80.                             green = 0;         //如果延时布防成功 绿灯长亮
  81.                             if(hw == 1)                     //红外有输出
  82.                             {
  83.                                           flag_alarm = 1;            
  84.                             }
  85.               }

  86. }

  87. /******************对应不同按键处理**********************/               
  88. void key_with()
  89. {
  90.               if(key_can == 1)              //按键紧急报警
  91.               {
  92.                             flag_alarm = 1;  //报警标志位 ;                           
  93.               }
  94.               if(key_can == 2)     //布防按键
  95.               {
  96.                             flag_bufang_en = 1;                           
  97.               }
  98.               if(key_can == 3)              //取消报警  把变量清零
  99.               {
  100.                             flag_alarm = 0;  
  101.                             flag_bufang = 0;
  102.                             flag_bufang_en = 0;            
  103.                             flag_value = 0;            
  104.                             P2 = 0xff;     
  105.               }                                         
  106. }


  107. /******************主程序**********************/               
  108. void main()
  109. {
  110.               time_init();
  111.               while(1)
  112.               {
  113.                             key();                             
  114.                             yellow = ~hw;              //红外热释电指示灯 有输出就亮黄灯
  115.                             if(key_can < 10)
  116.                             {
  117.                                           key_with();              //按键设置函数
  118.                             }
  119.                             if(flag_300ms == 1)
  120.                             {
  121.                                           flag_300ms = 0;
  122.                                           hongwai_dis();                 //红外报警函数
  123.                             }            
  124.               }
  125. }

  126. /*************定时器0中断服务程序***************/
  127. void time0_int() interrupt 1
  128. {            
  129. ……………………

  130. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
课程设计.docx (1.13 MB, 下载次数: 117)
回复

使用道具 举报

ID:1 发表于 2018-4-5 04:09 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:549906 发表于 2019-5-30 23:40 来自手机 | 显示全部楼层
好资料
回复

使用道具 举报

ID:564484 发表于 2019-6-17 17:54 | 显示全部楼层

好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:565188 发表于 2019-6-18 00:07 来自手机 | 显示全部楼层
传感器接哪个引脚
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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