原创 家庭防盗报警器(51)

2014-3-11 14:26 1615 16 17 分类: MCU/ 嵌入式

附件中有完整的报告,好像不能显示图片。。。

 

唐 山 学 院

测控系统原理课程设计

 

 

 

 

题    目     家庭防盗报警器设计    

系   (部)         XXXXXXXXXX       

班    级        XXXXXXXXXXXX       

姓    名          XXXXXXX          

学    号        XXXXXXXXXX         

指导教师        刘XXX    张XX     

 

2014 年 2月  24日至  3月 7 日 共  2 周

 

2014年 3 月 7 日  

 

 

 

 

 

课程设计成绩评定表

出勤

情况

出勤天数 

 

缺勤天数

 

出勤情况及设计过程表现(20分)

 

课设答辩(20分)

 

设计成果(60分)

 

总成绩(100分)

 

提问

(答辩)

问题

情况

1、 在protel中找不到自己用到的元件的库怎么办?答:对应原理图可以在原理图的library中画,PCB对应自己选用元件的尺寸画PCB的library。

2、 程序中如果产生喇叭鸣响就不能检测按键怎么办?答:中断实现喇叭鸣响。

 

 

 

 

                 指导教师签名:

                                  年    月    日

 

 

测控系统原理 课程设计任务书

一. 设计题目、内容及要求

运用所学单片机、模拟和数字电路、以及测控系统原理与设计等方面的知识,设计出一个家庭防盗防火报警器,能对门窗未关闭进行报警、对室内烟火信号进行报警,可通过定时开关灯模拟主人在家,完成门窗开关信号、烟火信号的检测电路、显示及键盘接口电路等部分的软、硬件设计。

家庭防盗防火报警器要求如下:

1)2路门开报警;4路窗开报警;

2)手工解除报警;

3)能显示是哪一路报警;

4)手工打开和解除警戒;

5)每天晚上定时开灯,模拟主人在家,灯最大负载400W,定时时间可人工设置。

 

二. 要求的设计成果(课程设计说明书、图纸等)

1)硬件部分包括前置信号处理单元(放大电路,调制解调电路、滤波电路等)、 A/D转换、微处理器(MCU)、键盘、显示等;

2)软件部分包括键盘扫描、A/D转换、数字滤波、标度变换、显示等;

3)用PROTEUS软件仿真实现;

4)用Protel画出系统的硬件电路图;

5)撰写设计说明书一份(不少于2000字),阐述系统的工作原理和软、硬件设计方法,重点阐述系统组成框图、硬件原理设计和软件程序流程图。说明书应包括封面、任务书、目录、摘要、正文、参考文献(资料)等内容,以及硬件电路图和软件程序框图等材料。

三. 进程安排

 

序号         课程设计各阶段名称           日期、周次

1           资料查阅                     2014年2月24日,1周

总体设计,硬件设计           2014年2月25,26日,1周

2           绘制电路图                   2014年2月27,28日,1周

3           绘制软件程序流程图,编写软件 2014年3月3,4日,2周

4           软、硬件仿真调试             2014年3月5日,2周

5           撰写设计说明书               2014年3月6,7日,2周

 

四. 主要参考资料

1.王福瑞等.《单片微机测控系统设计大全》.北京航空航天大学出版社,1999

2.《现代测控技术与系统》 韩九强 清华大学出版社 2007.9

3.《智能仪器》 程德福,林君主编 机械工业出版社 2005年2月

4.《测控仪器设计》浦昭邦,王宝光主编 机械工业出版社 2001

5.基于AT89C51单片机的数字电压表的设计,黄亮,电子制作,2006.10 ,25-27

6.Keil C51帮助文档

指导教师(签名):

教研室主任(签名):

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

摘 要

本系统采用了自制的红外发射和接收电路,它的制作简单、成本低、安装比较方便。采用红外发射二极管发射红外信号,通过红外接收头接收红外信号。这种防盗器安装隐蔽,不易被盗贼发现。

本设计包括硬件和软件设计两个部分。硬件部分包括单片机控制电路、LCD显示电路、按键控制电路、红外探头电路、驱动执行报警电路、LED显示电路等部分组成。处理器采用52系列单片机AT89C52,整个系统是在系统软件控制下工作的。

 

关键词:单片机;红外传感器;LCD显示;报警电路

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

目录

一、需求分析与设计思路 1

二、总体方案设计 1

1)软件与硬件分工说明 1

2) 硬件总体框图; 1

3) 软件结构图 2

三、 详细设计 2

1)用Proteus系统仿真 2

2)元件清单及元件选择及参数选择的依据 3

3)protel硬件电路图 4

4) 软件流程图 7

5)程序清单 9

四、使用说明 19

1)性能和功能介绍 19

2)各操作开关、按钮、指示灯、显示器等的作用介绍 19

3)使用操作步骤 19

4)故障处理 20

 

 

 

 

 

一、需求分析与设计思路

随着社会的不断进步和科学技术、经济的不断发展,人们生活水平得到很大的提高,对私有财产的保护意识在不断的增强,因而对防盗措施提出了新的要求。本设计就是为了满足现代住宅防盗的需要而设计的家庭式电子防盗系统。

就目前市面上装备主要有压力触发式防盗报警器、开关电子防盗报警器和压力遮光触发式防盗报警器等各种报警器,但这几种比较常见的报警器都存在一些缺点。而本设计中所使用的红外线是不可见光,有很强的隐蔽性和保密性,因此在防盗、警戒等安保装置中得到了广泛的应用。当检测到人通过时会产生一个低电平跳变,通过单片机检测到该信号,并做出一定的处理。

(1)该设计包括硬件和软件设计两个部分。模块划分为LCD显示、单片机最小系统、键盘控制、红外线发射接收模块、主人是否在家的定时模块、报警等模块的模拟电路及其子函数。

(2)本红外线防盗报警系统的模拟仿真内容有通过按键来模拟红外模块检测到信号,当信号产生以后进行自动报警,并且报警指示灯亮,LCD显示部分显示报警产生位置。按下警戒开关后,表示警戒的喇叭响,同时,警戒指示灯亮,LCD显示警戒进行中。当警戒解除再次按下按键解除警戒时,LCD显示警戒解除,指示灯熄灭,喇叭停止鸣叫。按下解除报警开关时,报警解除,报警指示灯熄灭,LCD显示安全。(此过程主人在不在家都工作)。

二、总体方案设计

1)软件与硬件分工说明

 硬件部分主要用于LCD显示、喇叭鸣响、指示灯指示、定时灯指示、按键信号的采集、控制信号采集,软件部分主要用于LCD数据写入、按键按下监控、喇叭鸣响频率、定时灯定时时间控制、以及协调硬件之间的配合。

2)硬件总体框图;

系统组成框图2—1

3)软件结构图

    

三、详细设计

1)用Proteus系统仿真

模块划分为LCD显示、单片机最小系统、键盘控制、红外线发射接收模块、主人是否在家的定时模块、报警等模块的模拟电路及其子函数。

就此设计的核心模块来说,单片机就是设计的中心单元,所以此系统也是单片机应用系统的一种应用。单片机应用系统也是有硬件和软件组成。硬件包括单片机、输入/输出设备、以及外围应用电路等组成的系统,软件是各种工作程序的总称。单片机应用系统的研制过程包括总体设计、硬件设计、软件设计等几个阶段。

从设计的要求来分析该设计须包含如下结构:红外发射接收电路、报警电路、表示主人是否在家的灯泡电路、单片机、复位电路及显示部分组成。

 处理器采用52系列单片机AT89C52。整个系统是在系统软件控制下工作的。设置在监测点上的红外发射电路发射红外信号后,接收电路接收电信号,当有人进入遮挡后产生电信号,经信号调理电路送至单片机。在单片机内,经软件查询、识别判决等环节实时发出入侵报警状态控制信号,并显示入侵位置,指示灯指示报警。人工按下警戒开关,进行警戒,警戒喇叭响起。警戒解除后,按下警戒开关,解除警戒。系统回到初始状态。

Proteus程序运行图

2)元件清单及元件选择及参数选择的依据

  LCD1602——用于显示家庭防盗系统的运行情况,结构简单,价格低廉,可以满足显示要求。

  AT89C52单片机——处理各种电信号,价格便宜,结构简单,满足系统要求。

  2个sounder——用于报警和警戒,声音大,易吸引人的注意力。

  发光二极管2个——指示是否显示报警和警戒。

  1个二极管——用于电流反向保护。

  9个按键——6个用于模拟红外传感器模块,2个用于控制关闭报警和打开、关闭警戒,1个用于复位系统。

  三极管——用于驱动定时灯。

  1个继电器——用于小电流控制大电流。

  400W灯泡——用于指示主人是否在家。

  电阻,电容若干,1个晶振。

3)protel硬件电路图

1、总图内容:

2、课设内容:

 

3、红外发射接收内容:

 

4、红外传感器模块

本设计采用红外发射管发射红外信号,接收管接收到红外信号被遮挡后产生低电平触发报警处理。其工作电路原理及设计电路如图4所示, D11发射红外信号Q14接收红外信号,当信号被人遮挡后OUT1输出低电平,进入单片机从而检测出有人入侵。

红外传感器原理图

 

 

5、时钟电路的设计

18和19分别为单片机的XTAL1和XTAL2,XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。

因为一个机器周期含有6个状态周期,而每个状态周期为2个振荡周期,所以一个机器周期共有12个振荡周期,如果外接石英晶体振荡器的振荡频率为12MHZ,一个振荡周期为1/12us,故而一个机器周期为1us[5]。如图6所示为时钟电路。

时钟电路图

 

6、复位电路的设计

复位方法一般有上电自动复位和外部按键手动复位,单片机在时钟电路工作以后, 在RESET端持续给出2个机器周期的高电平时就可以完成复位操作[6]。例如使用晶振频率为12MHz时,则复位信号持续时间应不小于2us[7]。本设计采用的是外部手动按键复位电路。如图7示为复位电路。

复位电路图

 

7、 警戒、报警电路及指示电路的设计

指示灯LED0和LED1分别接在P0.0和P1.7口,LS1和LS2分别接在P1.5和P1.6口,用来报警和警戒。LED灯分别指示报警和警戒的情况。

 

发光二极管警戒、报警电路和指示电路图

8、 LCD显示电路设计

LCD1602的16个引脚接到对应的16个引脚上。

LCD显示电路图

9、按键控制电路

按键分别接在P0.1和P0.2口,用来控制警戒和解除报警。

按键控制电路图

10、定时灯指示主人是否在家电路设计

 R10左侧接入P0.3通过单片机来控制灯的亮灭,继电器驱动灯泡。

 

定时灯电路图

 

 

4)软件流程图

主函数程序框图

按键扫描程序框图

 

按键处理程序框图

 

中断程序框图

 

 

5)程序清单       

程序分为三个文件,主要为main.c包含主函数和中断函数LCD1602.C包含1602的驱动函数,QITA.C包含按键检测,按键处理,单片机初始化和铃声函数,以及两个头文件lcd1602.h和qita.h用来对应文件的函数声明。一下是各个文件内容。

Main.c:

#include "qita.h"

uchar code Prompt0[]= "zhu:chuang 1    men an quan     ";

uchar code Prompt1[]= "zhu:chuang 2    men an quan     ";

uchar code Prompt2[]= "zhu:chuang 3    men an quan     ";

uchar code Prompt3[]= "zhu:chuang 4    men an quan     ";

uchar code Prompt4[]= "zhu:men 1       chuang an quan  ";

uchar code Prompt5[]= "zhu:men 2       chuang an quan  ";

uchar code Prompt6[]= "men an quan     chuang an quan  ";

uchar code Prompt7[]= "jing bao        jie chu !~  ^_^ ";

uchar code Prompt8[]= "jing jie jin    xing zhong..... ";

uchar code Prompt9[]= "jing jie        jie chu.....    ";

uchar code Prompt11[]="cheng xu chu    xian cuo wu.....";

uint JIE=0,ala1=0,ala2=0;

uint JISHI=0;

void main()

{  

int t;

Initialize_LCD();

Init_IO();

ShowString(0,0,Prompt6);

ShowString(0,1,Prompt6+16);

while(1)

{

t=key_scan();

  if(t!=0)

{

key_deal(t);

}

}

}

void Timer0() interrupt 1

{

  TH0 = 0XF5;

TL0 = 0X05;

JISHI++;

if(JISHI>=200)

{

ZHU_REN=~ZHU_REN;

JISHI=0;

}

}

void Timer1() interrupt 3

{

TH1 = 0X15;

TL1 = 0X05;

if(ala1==1)

{

Alarm1();

}else

{

B_BAO_JING=1;

}

if(ala2==1)

{

Alarm2();

}else

{

B_JING_JIE=1;

}

}

QITA.C:

#include"qita.h"

extern uchar code Prompt0[],Prompt1[],Prompt2[],Prompt3[],Prompt4[];

extern uchar code Prompt5[],Prompt6[],Prompt7[],Prompt8[],Prompt9[];

extern uchar code Prompt11[];

extern uint JIE,JISHI,ala1,ala2;

 

//输入状况扫描

int key_scan(void)

{

if((CHUANG1&CHUANG2&CHUANG3&CHUANG4)==0)

{

Delayms(10);

if((CHUANG1&CHUANG2&CHUANG3&CHUANG4)==0)

{

 

if(CHUANG1==0){while((CHUANG1)==0);return 1;}

if(CHUANG2==0){while((CHUANG2)==0);return 2;}

if(CHUANG3==0){while((CHUANG3)==0);return 3;}

if(CHUANG4==0){while((CHUANG4)==0);return 4;}

}

}

if((MEN1&MEN2)==0)

{

Delayms(10);

if((MEN1&MEN2)==0)

{

if(MEN1==0){while((MEN1)==0);return 5;}

if(MEN2==0){while((MEN2)==0);return 6;}

}

}

if((JIE_BAO&JING_JIE)==0)

{

Delayms(10);

if((JIE_BAO&JING_JIE)==0)

{

if(JIE_BAO==0){while((JIE_BAO)==0);return 7;}

if(JING_JIE==0)

{

while((JING_JIE)==0);

JIE=!JIE;

return 8;

}

}

}

return 0;

}

//输入处理

void key_deal(int i)

{

 switch(i)

 {

  case 1:

ShowString(0,0,Prompt0);

ShowString(0,1,Prompt0+16);

ala1=1; ZHI_SHI1=0; break;

case 2:

ShowString(0,0,Prompt1);

ShowString(0,1,Prompt1+16);

ala1=1; ZHI_SHI1=0; break;    

case 3:

ShowString(0,0,Prompt2);

ShowString(0,1,Prompt2+16);

ala1=1; ZHI_SHI1=0; break;

case 4:

ShowString(0,0,Prompt3);

ShowString(0,1,Prompt3+16);

ala1=1; ZHI_SHI1=0; break;

case 5:

ShowString(0,0,Prompt4);

ShowString(0,1,Prompt4+16);

ala1=1; ZHI_SHI1=0; break;

case 6:

ShowString(0,0,Prompt5);

ShowString(0,1,Prompt5+16);

ala1=1; ZHI_SHI1=0; break;

case 7:

ala1=0;

ZHI_SHI1=1;

ShowString(0,0,Prompt7);

ShowString(0,1,Prompt7+16);

Delayms(1000);

ShowString(0,0,Prompt6);

ShowString(0,1,Prompt6+16); break;

case 8:

jing_jie(); break;

default:

ShowString(0,0,Prompt11);

ShowString(0,1,Prompt11+16); break;

 }

}

void jing_jie(void)

{

if(JIE!=0)

{

ala2=1;

ZHI_SHI2=0;

ShowString(0,0,Prompt8);

ShowString(0,1,Prompt8+16);

}

if(JIE==0)

{

ala2=0;

ZHI_SHI2=1;

ShowString(0,0,Prompt9);

ShowString(0,1,Prompt9+16);

if(ala1==0)

{

ShowString(0,0,Prompt6);

ShowString(0,1,Prompt6+16);

}

}

}

void Init_IO(void)

{

B_BAO_JING=1;

B_JING_JIE=1;

ZHU_REN=1;

ZHI_SHI2=1;

ZHI_SHI1=1;

TMOD = 0x11;

TH0  = 0XF5;

TL0  = 0X05;

TH1  = 0X35;

TL1  = 0X05;

IE   = 0x8A;

TR0  = 1;

TR1  = 1;

}

void Alarm(uchar t)

{

  uchar i,j;

for(i=0;i<20;i++)

{

  B_BAO_JING = ~B_BAO_JING;

for(j=0;j;j++);<>

}

}

void Alarm_jie(uchar t)

{

  uchar i,j;

for(i=0;i<20;i++)

{

  B_JING_JIE = ~B_JING_JIE;

for(j=0;j;j++);<>

}

}

void Alarm1(void) //bao jing

{  

Alarm(90);

Alarm(120);

}

void Alarm2(void)

{

Alarm_jie(80);

Alarm_jie(50);

}

LCD1602.C:

#include "LCD1602.h"

void Delayms(uint ms)

{

  uchar i;

while(ms--)

{

  for(i=0;i<120;i++);

}

}

 

uchar Busy_Check()

{

  uchar LCD_Status;

RS = 0;

RW = 1;

EN = 1;

Delayms(1);

    LCD_Status = LCD_DATA;

EN = 0;

return LCD_Status;

}

void Write_LCD_Command(uchar cmd)

{

  while((Busy_Check()&0x80)==0x80);

RS = 0;

RW = 0;

EN = 0;

LCD_DATA = cmd;

EN = 1;

Delayms(1);

EN = 0;

}

void Write_LCD_Data(uchar dat)

{

  while((Busy_Check()&0x80)==0x80);

RS = 1;

RW = 0;

EN = 0;

LCD_DATA = dat;

EN = 1;

Delayms(1);

EN = 0;

}

void Initialize_LCD()

{

  Write_LCD_Command(0x38);

Delayms(1);

Write_LCD_Command(0x01);

Delayms(1);

Write_LCD_Command(0x06);

Delayms(1);

Write_LCD_Command(0x0c);

Delayms(1);

}

void ShowString(uchar x,uchar y,uchar *str)

{

  uchar i = 0;

if(y == 0)

Write_LCD_Command(0x80 | x);

if(y == 1)

Write_LCD_Command(0xc0 | x);

for(i=0;i<16;i++)

{

  Write_LCD_Data(str);

}

}

QITA.H:

#include"LCD1602.h"

int key_scan(void);

void key_deal(int i);

void jing_jie(void);

void Init_IO(void);

void Alarm(uchar t);

void Alarm1(void);

void Alarm_jie(uchar t);

void Alarm2(void);

LCD1602.H:

#include 

#include 

#define uchar unsigned char

#define uint unsigned int

#define LCD_DATA P2

sbit RS = P1^0;

sbit RW = P1^1;

sbit EN = P1^2;

sbit MEN1 = P1^3;

sbit MEN2 = P1^4; //ru  门口是否有人经过

sbit B_BAO_JING = P1^5; //chu 报警

sbit B_JING_JIE = P1^6; //chu 警戒

sbit ZHI_SHI2 = P0^0; //chu 指示是否警戒

sbit ZHI_SHI1 = P1^7; //chu 指示是否报警

sbit JIE_BAO = P0^1; //ru  解除警报

sbit JING_JIE = P0^2; //ru,开和关警戒

sbit ZHU_REN =P0^3; //chu,表示主人

sbit CHUANG1 = P0^4;

sbit CHUANG2 = P0^5;

sbit CHUANG3 = P0^6;

sbit CHUANG4 = P0^7;  //ru窗口是否有人经过

void Delayms(uint ms);

uchar Busy_Check();

void Write_LCD_Command(uchar cmd);

void Write_LCD_Data(uchar dat);

void Initialize_LCD();

void ShowString(uchar x,uchar y,uchar *str);

四、使用说明

1)性能和功能介绍

   此次设计的家庭防盗报警器,是基于at89c52单片机设计的家庭防盗报警系统。利用6路红外传感器采集信号,2个喇叭分别报警和警戒,2个指示灯分别指示报警和警戒情况,一个定时灯模拟显示主人是否在家,LCD显示系统工作状态。

2)各操作开关、按钮、指示灯、显示器等的作用介绍

P04-P07和P13、P14分别接红外模块,P01和P02分别接解除报警和打开、解除警戒,P00和P17指示灯指示警戒和报警,P16和P15分别接警戒和报警喇叭,P2口接LCD1602的数据口,RS、RW、E分别接P10、P11、P12,模拟家中主人的定时灯引脚接P03。

3)使用操作步骤

按下模拟红外模块的开关,系统检测到入侵,报警指示灯亮,报警喇叭响;按下警戒开关,警戒喇叭模拟警戒,警戒指示灯亮;再次按下警戒开关,关闭警戒,警戒指示灯灭;按下解除报警开关,解除报警;LCD实时显示系统工作状态。

4)故障处理

由于本系统是电子式的,所以不会产生机械损坏。一般损坏方式为电路损坏,需用万用表逐点测试,借助程序调试,排除故障。

 

 

文章评论1条评论)

登录后参与讨论

leawise_816723039 2014-5-8 13:20

疯狂地学习中!

用户450531 2014-5-4 11:38

现在都已经研二快结束了。。。无奈还是菜鸟。。。

用户1754706 2014-5-2 00:54

博主现在大几了?

小梅哥 2014-4-30 20:28

这个好。谢谢

用户403664 2014-3-12 11:22

图片都挂了亲,可以用浏览器IE ,高级编辑器一键导过来
相关推荐阅读
用户1727821 2014-01-25 17:57
正点原子大哥的学习资料对应100引脚STM32(深圳育松)的兼容改进 二
这是看了正点原子大哥的博客中的学习资料改进的,我已经测试了能用。和实验1一类,附件只允许加5个,所以后面的在相同的博文里有。实验10还没有验证。...
用户1727821 2014-01-25 17:51
正点原子大哥的学习资料对应100引脚STM32(深圳育松)的兼容改进
这是看了正点原子大哥的博客中的学习资料改进的,我已经测试了能用。和实验1一类,附件只允许加5个,所以后面的在相同的博文里有。...
用户1727821 2014-01-14 12:14
买的深圳育松的板子才150一个 实验1 跑马灯实验
实验1 跑马灯实验...
我要评论
1
16
关闭 站长推荐上一条 /2 下一条