《宿舍智能防盗系统 计算机论文.docx》由会员分享,可在线阅读,更多相关《宿舍智能防盗系统 计算机论文.docx(46页珍藏版)》请在三一文库上搜索。
1、摘要本系统根据大赛设计要求以STC89C52单片机为控制核心,自行设计了一套宿舍智能防盗防火报警系统。该系统分为烟雾检测和声光报警模块、人体检测和声光报警模块、宿舍人员进出及人数记录和无人提示锁门模块、密码解警模块和附加的时钟及外扩EEPROM模块。实现了当有火灾或者盗窃现象时启动报警、输入密码开门、输入密码解警、记录宿舍人员进出状况及无人启动报警提示锁门、记录宿舍安防记录模块等功能,同时在系统中额外加了时钟显示功能和保存密码功能,使系统更加多元化和智能化。一、 系统方案论证及系统硬件设计根据题目的基本要求,设计任务主要完成实现人体检测与声光报警功能;实现烟雾检测与声光报警功能;用键盘输入密码
2、完成报警系统的解警等工作状况;实现异地监控;能反映宿舍内人员的进出情况及人数的记录;宿舍无人时提示锁门。为完成相应功能,该系统有五大模块组成,即人体监测与声光报警模块、烟雾监测与声光报警模块、宿舍人员进出及人数记录和无人提示锁门模块、密码解警模块、宿舍安防记录模块,方案结构图如下所示:宿舍人员进出及人数记录和无人提示锁门模块烟雾监测与声光报警模块人体监测与声光报警模块MCU安防记录模块密码解警模块1. MCU选取方案在该系统的五个模块中都存在MCU的选取问题,MCU的性能和成本直接决定着整个系统的性能和成本。MCU的主要是对烟雾报警器及红外报警器的实时监控、对宿舍安防情况进行记录、对宿舍人员进
3、出次数的记录和无人提示锁门及输入特定密码时达到解警的目的。因此可以有以下中MCU的选取方案。方案一:选用ARM芯片。ARM芯片是32位的处理器,运算速度快,并行端口多,可以实现复杂的功能,但是对于该系统来说,所需要的端口并不多,电路结构也不是很复杂,若使用ARM系列芯片定会增加电路的复杂程度及软件实现的复杂程度,而且这个系统选用ARM有点大材小用,且ARM系列芯片的价格也会使系统成本大幅度提升,故放弃此方案。方案二:选用FPGA(现场可编程门阵列)作为系统的控制器。FPGA作为新一代的可编程器件使得其应用较为灵活,功能从简单到复杂都可以实现,但是在该系统中,若使用FPGA则会提高系统的成本,同
4、时由于增加的FPGA,也会给电路的维修工作带来不可必要的麻烦。方案三:选用宏晶公司的STC89C52单片机,STC89C52单片机是8位的单片机,有32个I/0构成,对于该系统来说端口足够使用,价格便宜,功耗低,且易于控制,因此将STC89C52作为MCU的最终选取方案。2烟雾检测与声光报警模块该模块要实现的功能是当发生火灾时,烟雾会使烟雾传感器感应,使用比较器对传感器输出进行转换,使之通过比较器输出时为高低电平并输入给单片机的I/O口,通过单片机对输入口的电平采集来控制发生声光报警现象。经过我们的论证,出于在不影响整体功能的情况下尽量使系统结构简单,故传感器我们选用MQ-2,声光报警我们选用
5、发光二极管和喇叭组成。MQ-2气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。MQ-2/MQ-2S气体传感器对液化气、丙烷、氢气的灵敏度高,对天然气和其它可燃蒸汽的检测也很理想。这种传感器可检测多种可燃性气体,是一款适合多种应用的低成本传感器。MQ-2的外形:我们所使用的MQ-2的电路图如下:电源正10K烟雾报警器负A H AB H B地负输出正地10K地声光报警模块我们使用的电路图如下:单片机I/O口报警时启动声光报警
6、器,LCD会显示:3人体监测与声光报警模块该模块要是实现的功能是当监测到人进入宿舍时,会启动声光报警功能,直到有人输入密码后解除报警。监测人进入宿舍选用热释电人体红外开关。该电路的设计思路如下图示:MCU放大电路红外开关报警!我们所使用的红外开关电路图如下所示:热释电人体红外开关简介如下:热释电红外开关时BISS0001配以热释电红外传感器和少量外接元器件构成的被动式开关。它可用于我们的报警系统。热释电红外传感器是一种新型敏感元件、它是由高热电系数材料,配以滤光镜片和阻抗匹配用场效应管组成。它能以非接触方式监测出来自人体发出的红外辐射将其转换为电信号输出,并可抑制人体辐射波长以外的外干扰辐射,
7、如阳光、灯光及其反射光。BISS0001是一款具有较高性能的传感信号处理集成电路。它的主要功能有:1)CMOS数模混合专用集成电路;2)具有独立的高输入阻抗运算放大器,可与多种传感器匹配,进行信号与处理;3)双向鉴幅器,可有效抑制干扰;4)内设延迟时间定时器和封锁时间定时器;5)结构新颖,稳定可靠,调解范围宽;6)内置参考电压;7)工作电压范围2V6V;8)采用16脚DIP和SOP封装;9)PPLICATION APPLICATION APPLICATION APPLICATION产品应用;10)用于多种传感器和延时控制器。声光报警电路选用与烟雾监测与声光报警模块同一个电路图(具体电路见烟雾检
8、测与声光报警模块的声光报警模块)。4宿舍人员进出及人数记录和无人提示锁门模块(仿真已实现,但是实物未来得及做)该模块要实现当有人进入或有人出宿舍时,要对宿舍进出状况进行记录,并在无人的情况下(即进出次数相同时),提示锁门。监测人进或出时我们选用2对红外对管,当无人时红外对管输出处于高电平,当有人通过时红外对管输出低电平,单片机采集信号,当进出宿舍次数相等时,启动声光报警电路提示锁门, LCD也会显示please close door!由于数码管显示较为明显,我们为达到论文较为清晰的目的,第一次模拟时采用了数码管模拟,并用开关代替光电开关。模拟效果图如下:当无人时数码管为0,声光报警,如下所示:
9、当用LCD代替数码管时,LCD显示如下:注:当1人进入时数码管数字加1,1人出去时数码管数字减1(如何实现见软件部分)。A、B模拟两对红外对管,分别在进门的两侧,A代表门外侧的一对,B代表门内侧的一对,人进门时是先进入外侧然后才能通过内侧的红外对管,软件编程即根据这一思想(如下面)。软件程序如下:#include#define uint unsigned int#define uchar unsigned charuchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79
10、,0x71;sbit tip=P17; sbit A=P33;sbit BB=P35;uchar count;void delay()uint x,y;for(x=100;x0;x-)for(y=100;y0;y-);void init()count=0;P2=tablecount; tip=0;void main()init();while(1)P2=tablecount;if(!A)&BB)while(!A)&BB);if(!A)&(!BB)while(!A)&(!BB);if(A&(!BB)while(A&(!BB);if(A&BB)count+;else if(!BB)&A)while
11、(!BB)&A);if(!BB)&(!A)while(!BB)&(!A);if(BB&(!A)while(BB&(!A);if(BB&A)count-;P2=tablecount;if(count=0) tip=1; elsetip=0; 5密码解警模块该模块要实现的功能是当发生声光报警时,无论是烟雾检测报警还是人体检测报警或是提示锁门报警,只有在输入密码的条件下才会取消报警。该模块的实现有两种方式,即采用双列直插的DIP开关、4x4矩阵键盘。采用双列直插的DIP开关比较简单,只需对1-8对各个按键进行编号,但是但是所设密码易于破解。而4x4矩阵键盘实现时电路的复杂程度会提高,但是密码不易破解
12、,安全性高,处于这个角度的考虑,我们选用4x4的矩阵键盘实现解警功能。4x4矩阵键盘的硬件设计如下图示:键盘说明:A:解警键,当按下A键时,输入密码即可解警。LCD显示如右图:B:设置时间,按下B键可以修改时间,如图示:可以设置年的十位和个位,月和具体时间。C:用于修改密码,当按下C键时,修改原始密码。LCD显示如图:输入完旧密码时,LCD会显示:输入一次密码后,LCD会显示:输入两次密码后,设置新密码成功。新密码会存入AT24C02中,下次再次使用时,为新设的密码。D:解锁开门键,当输入密码时就会打开门,LCD会显示:E:用于显示宿舍安防记录的按键,当按下E时LCD会显示:再次按下就会显示宿
13、舍安防记录类型,按任意键返回。1,2,3,4,5,6,7,8,9键均为数字键。6宿舍安防记录模块利用外扩的EEPROM记录下宿舍的安防情况,通过键盘查找最近的安防记录,并将其显示在LCD上。如按下E键LCD会显示:再按下E键会显示最近的记录,如:继续按E键,会继续显示,会显示30次的安防记录。按任意键返回。TYPE与报警类别的对应关系如下:“1”:报火警(烟雾报警)“2”:有人强制进门(人体热释电报警)“3”:提示锁门“4”:解警开门7其他模块1)为了丰富该系统的功能,我们在尽可能实现题目要求的基础上增加了实时时钟模块,利用DS1302这款芯片实现了实时时钟的设计,并将时间显示在LCD上,当对
14、系统无任何操作时LCD显示时间,如下图示:DS1302简介如下:DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。DS1302封装图如下示:2)为了保存新设的密码,我们在电路中增加
15、了AT24C02的外扩的串行EEPROM。AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个16字节页写缓冲器。该器件通过IC总线接口进行操作,有一个专门的写保护功能。管脚图封装如下:AT24C02支持IC,总线数据传送协议IC,总线协议规定任何将数据传送到总线的器件作为发送器。任何从总线接收数据的器件为接收器。数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,通过器件地址输入端A0、A1和
16、A2可以实现将最多8个AT24C02器件连接到总线上。当修改密码时,将新修改的密码读入AT24C02中,上电后再将密码从AT24C02中读出,可以达到保存密码的目的。假设修改后的密码为123456,则proteus仿真存入AT24C02的密码如下图:3)进门时必须输入密码才能打开门进入宿舍。当有人不输入密码强制开门时,LCD会显示报警如下图:当有人不输入密码又不从宿舍门进入时,LCD也会显示报警如下图:4)增加了解开键盘按键和门按键,当门键按下时为关门,不按下为开门,键盘键按下为解开键盘,可以对键盘进行操作。二、 系统软件设计该系统采用C语言进行软件设计,C语言以其结构化和能产生高效代码满足了
17、单片机应用系统日趋复杂的要求,并便于多人以软件工程的形式进行协同开发。采用C51程序设计语言,编程者只需了解变量和常量的存储类型与89C51单片机存储空间的对应关系,而不必深入了解单片机的硬件和接口,C51编译器会自动完成变量的存储单元的分配。1. 软件总体框架开始存入AT24C02设置新密码解警报警强行进入宿舍恢复最初状态自动解警关门提示关门并报警门关且无人等待开门门关且无人解锁开门解警报警起火显示时钟扫描状态2人体监测与烟雾监测报警两模块软件设计流程图是否解警启动声光报警是否火灾发生或盗窃现象扫描状态开始NYN Y3宿舍人员进出及人数记录和无人提示锁门模块软件流程图设计开始宿舍内人数是否为
18、零有无人员进入启动声光报警送入LCD显示扫描状态NYN4宿舍安防记录模块软件流程图设计开始 扫描状态是否有报警NY保存安防记录三、系统各模块调试1人体监测与声光报警模块调试在红外传感器走动观察是否引起声光报警,输入解警密码,观察是否解警。2. 烟雾检测与声光报警模块调试用烟雾收集瓶收集烟雾,然后将其放置烟雾传感器旁,观察声光报警器是否报警,输入解警密码,观察是否解警调试。3. 宿舍人员进出及人数记录和无人提示锁门模块用挡光物体挡住红外对管来回移动观察LCD上人数的加减,当人数显示为0时,观察声光报警器是否报警,LCD上是否有提示锁门显示。4密码解警模块调试根据系统方案论证及系统硬件设计中的第五
19、模块的对键盘的描述,对键盘进行操作,并观察当输入密码解警时,密码解警是否工作。5 宿舍安防记录模块调试系统使系统产生报警,解开键盘后按下E键,观察是否记录了安防情况。6其他模块调试打开电源,观察LCD是否显示时间,证实DS1302是否工作。修改密码后关闭电源,然后重新打开,输入已修改的密码解警,检验被改后的密码是否已经存入AT24C02。四、总结 本系统主要采用AT89C52单片机来实现,完成了题目的一些基本要求,并且还增加了一些附加功能,证实了方案的可行性和实用性,同时,也证实了AT89C52单片机功能的优越性。但是还是有很多地方有待改进,比如说4x4矩阵键盘过于复杂,给我们编程带来不少麻烦
20、。从选题到确定题目方案,我们团队都经历了很多讨论,这次比赛不仅锻炼了我们的动手能力,而且增强了我们的团队合作意识。在比赛过程中,我们遇到了很多困难,也曾想过放弃,但是最终还是坚持了,这次比赛培养了我们面对挫折勇于克服的意志品质和吃苦耐劳的精神。我们也深深体会到了理论结合实际的重要性,并让我们感到自己知识的匮乏,激发起我们对知识的渴望。五、参考文献1单片机应用系统设计基础基于C51的proteus仿真/张齐,朱宁西编著.2版.北京:电子工业出版社,2009.12单片机C语言应用100例/王东锋,王会良,董冠强编著.北京:电子工业出版社,2009.3(百例成才系列丛书) 3单片机原理及应用教程/刘
21、瑞新等编著.北京:机械工业出版社,2005六、附件1附件一:程序源代码(有详细的注释) #include #include#include #define busy 0x80#define uchar unsigned char #define unit unsigned int#define UNLOCK_WARNING 10 /解警 A#define SET_TIME 11 / 设时 B#define SET_PASSWORD 12 / 设密码 C#define UNLOCK_OPEN_DOOR 13 / 解锁开门 D#define GET_RECORD 14 /E#define CLOS
22、E_DOOR_WARNING 1 /关门报警#define FIRE_WARNING 2 /起火报警sbit LCM_RW=P34; /定义LCD引脚sbit LCM_RS=P35;sbit LCM_E=P33;sbit DOOR=P00; / 记录门的状态sbit FIRE=P01; /是否起火sbit MAN=P02; / 是否有人luchar COUNT=0; /记录人数的变量sbit INPUT=P03; /键盘开关uchar OPEN_DOOR_PERMIT=0; /开门永许标志uchar UNLOCK_DOOR=0; /sbit SPEAKER=P32; / 声光报警sbit LE
23、D=P04;uchar warn_mark; /报警标志uchar record_mark;unsigned char new_password16=000000;/unsigned char new_password26=000000;unsigned char password6=0x00,0x00,0x00,0x00,0x00,0x00;unsigned char temp_password6= 000000;typedef struct /获取并记录时间的结构体 char year;char month;char day; char hour; char minute; char se
24、cond; char week; time;unsigned char code int_asc16=0123456789ABCDEF; /显示码表unsigned char Line116=2010/12/25; /显示缓存第一行unsigned char Line216=22:50:46; /显示缓存的第二行#defineOP_READ0xa1/ 器件地址以及读取操作,0xa1即为1010 0001B#defineOP_WRITE 0xa0/ 器件地址以及写入操作,0xa1即为1010 0000Bsbit SDA=P37; /将串行数据总线SDA位定义在为P3.4引脚sbit SCL=P3
25、6; /将串行时钟总线SDA位定义在为P3.3引脚/*函数功能:延时1ms(3j+2)*i=(333+2)10=1010(微秒),可以认为是1毫秒*/void delay1ms() unsigned char i,j; for(i=0;i10;i+) for(j=0;j33;j+) ; /*函数功能:延时若干毫秒入口参数:n*/ void delaynms(unsigned char n) unsigned char i;for(i=0;in;i+) delay1ms(); /*函数功能:开始数据传送*/void start()/ 开始位SDA = 1; /SDA初始化为高电平“1”SCL =
26、 1; /开始数据传送时,要求SCL为高电平“1”_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SDA = 0; /SDA的下降沿被认为是开始信号_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SCL = 0; /SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)/*函数功能:结束数据传送*/void stop()/ 停止位SDA = 0; /SDA初始化为低电平“0”_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SCL = 1; /
27、结束数据传送时,要求SCL为高电平“1”_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SDA = 1; /SDA的上升沿被认为是结束信号/*函数功能:从AT24Cxx读取数据出口参数:x*/unsigned char ReadData()/ 从AT24Cxx移入数据到MCUunsigned char i;unsigned char x; /储存从AT24Cxx中读出的数据for(i = 0; i 8; i+)SCL = 1; /SCL置为高电平x=1; /将x中的各二进位向左移一位x|=(unsi
28、gned char)SDA; /将SDA上的数据通过按位“或“运算存入x中SCL = 0; /在SCL的下降沿读出数据return(x); /将读取的数据返回/*函数功能:向AT24Cxx的当前地址写入数据入口参数:y (储存待写入的数据)*/在调用此数据写入函数前需首先调用开始函数start(),所以SCL=0bit WriteCurrent(unsigned char y)unsigned char i;bit ack_bit; /储存应答位for(i = 0; i 8; i+)/ 循环移入8个位 SDA = (bit)(y&0x80); /通过按位“与”运算将最高位数据送到S /因为传送
29、时高位在前,低位在后_nop_(); /等待一个机器周期 SCL = 1; /在SCL的上升沿将数据写入AT24Cxx _nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 SCL = 0; /将SCL重新置为低电平,以在SC线形成传送数据所需的个脉冲y = 1; /将y中的各二进位向左移一位SDA = 1; / 发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线, /以让SDA线转由接收设备(AT24Cxx)控制_nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 SCL = 1; /根据上述规定,SCL应为高电平_nop_();
30、/等待一个机器周期 _nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 ack_bit = SDA; /接受设备(AT24Cxx)向SDA送低电平,表示已经接收到一个字节 /若送高电平,表示没有接收到,传送异常SCL = 0; /SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)return ack_bit;/ 返回AT24Cxx应答位/*函数功能:向AT24Cxx中的指定地址写入数据入口参数:add (储存指定的地址);dat(储存待写入的数据)*/void WriteSet(unsigned char add, u
31、nsigned char dat)/ 在指定地址addr处写入数据WriteCurrentstart(); /开始数据传递WriteCurrent(OP_WRITE); /选择要操作的AT24Cxx芯片,并告知要对其写入数据WriteCurrent(add); /写入指定地址WriteCurrent(dat); /向当前地址(上面指定的地址)写入数据stop(); /停止数据传递delaynms(4); /1个字节的写入周期为1ms, 最好延时1ms以上/*函数功能:从AT24Cxx中的当前地址读取数据出口参数:x (储存读出的数据) */unsigned char ReadCurrent()
32、unsigned char x;start(); /开始数据传递WriteCurrent(OP_READ); /选择要操作的AT24Cxx芯片,并告知要读其数据x=ReadData(); /将读取的数据存入xstop(); /停止数据传递return x; /返回读取的数据/*函数功能:从AT24Cxx中的指定地址读取数据入口参数:set_add出口参数:x */unsigned char ReadSet(unsigned char set_add)/ 在指定地址读取start(); /开始数据传递WriteCurrent(OP_WRITE); /选择要操作的AT24Cxx芯片,并告知要对其写
33、入数据WriteCurrent(set_add); /写入指定地址return(ReadCurrent(); /从指定地址读出数据并返回void write_password()/存密码unsigned char i;for(i=0;i6;i+)WriteSet(i,passwordi);void read_password()/读出密码unsigned char i;for(i=0;i6;i+)passwordi=ReadSet(i);/*键盘扫描程序*/ /0 1 2 3 4 5 6 7 8 9 A B C D E Fcode char code key_code=0x7E,0x7D,0x
34、7B,0x77,0xBD,0xBB,0xB7,0xDD,0xDB,0xD7,0xBE,0xDE,0xEE,0xED,0xEB,0xE7;code char code ksp=0x7F,0xBF,0xDF,0xEF; void delay() unsigned char i,j;for(i=0;i50;i+) for(j=0;j100;j+); char keypad_scan()/扫描行 char key,i; if(INPUT) P2=0xF0; while(P2!=0xF0); /有按键按下 do if(!INPUT)break; i=0; for(i=0;i4;i+)P2=kspi;if
35、(P2!=kspi)delay();key=P2;if(key!=kspi)return(key); while(1); uchar gotkey()/获取按键的值,扫描列 char temp ,i;temp=keypad_scan(); for(i=0;i15;i+) if(temp=key_codei)return(i); return(16); /*以下是DS1302芯片的操作程序*/sbit Data=P05; /位定义1302芯片的接口,数据输出端定义在P1.1引脚sbit SCLK=P06; /位定义1302芯片的接口,时钟输出端口定义在P1.1引脚sbit RST=P07; /位定义1302芯片的接口,复位端口定义在P1.1引脚/*函数功能:延时若干微秒入口参数:n*/ void delaynus(unsigned char n) unsigned char i; for(i=0;in;i+);/*函数功能:向1302写一个字节数据入口参数:x*/ void Write1302(unsigned char dat) unsigned char i; SCLK=0; /拉低SCLK,为脉冲上升沿写入数据做好准备 delaynus(2); /稍微等待,使硬件做好准备 f
链接地址:https://www.31doc.com/p-3925050.html