基于单片机的安保系统.docx

上传人:b****2 文档编号:24374028 上传时间:2023-05-26 格式:DOCX 页数:38 大小:2.54MB
下载 相关 举报
基于单片机的安保系统.docx_第1页
第1页 / 共38页
基于单片机的安保系统.docx_第2页
第2页 / 共38页
基于单片机的安保系统.docx_第3页
第3页 / 共38页
基于单片机的安保系统.docx_第4页
第4页 / 共38页
基于单片机的安保系统.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

基于单片机的安保系统.docx

《基于单片机的安保系统.docx》由会员分享,可在线阅读,更多相关《基于单片机的安保系统.docx(38页珍藏版)》请在冰豆网上搜索。

基于单片机的安保系统.docx

基于单片机的安保系统

1概述

1.1选题的目的和意义

21世纪是信息化的世纪,各种电信和互联网新技术,物联网工程推动了人类文明的巨大进步。

在科学技术得到显著增强的时候,人们对自己的生活提出了更高的要求。

电子化控制系统就在这种条件下孕育而生。

;也可以在下班途中,预先将家中的空调打开、让热水器提前烧好热水、电饭煲煮好香喷喷的米饭……。

2总体设计方案

2.1总体硬件设计

本设计通过数据采集模块,实时的采集环境当中三种参数:

温度值、湿度值、光照值。

将数据进行简单的编码后再通过无线模块将六种参数数据发送至接收模块。

接收模块通过无线模块接收六个参数的数据,为了达到上述功能,主要设计的硬件模块有:

单片机控制最小系统、温度、热释电模块、光照传感器模块、LCD1602显示模块、控制电路模块

STC89C52RC

DS18B20温度传感器

光照

烟雾

Lm

324

系统显示模块

控制电路模块

图1数据采集与控制模块总体框图

3系统硬件电路设计

3.1单片机及相关电路

3.1.1.单片机介绍

STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

具有以下标准功能:

8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。

另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

最高运作频率35Mhz,6T/12T可选。

本其原理图如图3所示:

 

图2STC89C52引脚图图3STC89C52实物图

STC89C52的主要性能特点如下:

●与MCS-51单片机产品兼容

●256字节内部RAM

●8KBFlashROM,可以檫除1000次以上,数据保存10年

●电源控制模式

●全静态操作:

0Hz~33Hz

●三级加密程序存储器

●32个可编程I/O口

●三个16位定时器/计数器

●看门狗定时器

●双数据指针

●全双工UART串行通道

●八个中断源

3.1.2.复位电路

复位是单片机的初始化操作。

其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。

89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。

当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。

单片机系统的复位方式有:

手动按钮复位和上电复位。

产生复位信号的电路逻辑如图4所示。

图4复位信号的电路逻辑图

整个复位电路包括芯片内、外两部分。

外部电路产生的复位信号(RST)送至施密特触发器,再由片内复位电路在每个机器周期的S5P2时刻对施密特触发器的输出进行采样,然后才得到内部复位操作所需要的信号。

复位操作有上电自动复位和按键手动复位两种方式。

STC89C52的上电复位电路如图5所示,只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。

对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1?

F。

上电复位的工作过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。

为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。

上电时,Vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为10MHz,起振时间为1ms;晶振频率为1MHz,起振时间则为10ms。

在图2的复位电路中,当Vcc掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。

另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。

如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序。

图5上电复位电路

按键手动复位有电平方式和脉冲方式两种。

其中,按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的,其电路如图6所示。

而按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的,其电路如图6所示。

图6按键电平复位图7按键脉冲复位电路图

3.2传感器的选用            

3.2.1.光敏电阻的的A/D转换

光敏传感器分以下几类:

1,光敏电阻型。

代表器件有LXD5506型硫化镉光敏电阻。

2,光敏二极管型(包括光敏三极管)。

品种很多应用最广泛,例如硅光敏二极管2CU2B。

3,光伏电池型。

2DU3。

4,热效应红外光型。

本次选用光敏电阻,光敏电阻器是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器;入射光强,电阻减小,入射光弱,电阻增大。

光敏电阻如图10所示。

图8光敏电阻

光敏电阻器一般用于光的测量、光的控制和光电转换(将光的变化转换为电的变化)。

光敏电阻器的阻值随入射光线(可见光)的强弱变化而变化,在黑暗条件下,它的阻值(暗阻)可达1~10M欧,在强光条件(100LX)下,它阻值(亮阻)仅有几百至数千欧姆。

我们在实际测量中,先将光敏电阻用黑色胶布粘贴遮光,然后测量其两端电压,在15k欧姆左右,然后去除黑色胶布,用强光照射测量其两端电压,在400欧姆左右。

其变化值很大,所以我采用连接4.7k的比较电阻接入然后将中间比较点输入ADC0809的IN0输入口,来测量电压的变化。

光敏电阻比较图如14所示。

图9光敏电阻电压比较图

光敏电阻通过AD转换的原理是,当光照很强的情况下。

光敏电阻的阻值比较小,在400欧姆左右,那么通过计算IN0口的输入电压大约是4.6v左右。

而当遮光的情况下。

光敏电阻的阻值很大。

大约15k左右。

通过计算计算IN0口的输入电压大约是左右1.2v左右,我经过实际测量和得到参数是强光情况下电压4.2v,而在遮光情况下,电压时1.3v。

所以我们的电压变化范围是1.3v到4.2v,电压差是2.9v。

由于ADC0832输出,所以我们将2.9v的电压差分成255份,这样便可以算出光线强度的数据。

3.2.2.DS18B20

DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。

主要根据应用场合的不同而改变其外观。

封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。

耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

 

图12DS18B20温度传感器

1:

技术性能描述

①、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

  ②、测温范围-55℃~+125℃,固有测温分辨率0.5℃。

  ③、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。

  ④、工作电源:

3~5V/DC

  ⑤、在使用中不需要任何外围元件

  ⑥、测量结果以9~12位数字量方式串行传送

  ⑦、不锈钢保护管直径Φ6

⑧、适用于DN15~25,DN40~DN250各种介质工业管道和狭小空间设备测温

  ⑨、标准安装螺纹M10X1,M12X1.5,G1/2”任选

⑩、PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。

3.2.3.ADC0832转换器

ADC0832是一个单片集成、单独供电、低功耗、8-bitCMOS数据获取器件。

PCF8591具有4个模拟输入、1个模拟输出和1个串行I²C总线接口。

ADC0832的地址引脚A0,A1可用于硬件地址编程,允许在同个I²C总线上接入ADC0832器件,而无需额外的硬件。

在ADC0832器件上输入输出的地址、控制和数据信号都是通过双线双向I²C总线以串行的方式进行传输。

ADC0832的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。

ADC0832的最大转化速率由I²C总线的最大速率决定。

ADC0832电路图7所示。

 

图13ADC0832电路图

3.2.4.ADC0832功能特性

·8位分辨率;

·双通道A/D转换;

  ·输入输出电平与TTL/CMOS相兼容;

  ·工作频率为250KHZ,转换时间为32μS;

  ·一般功耗仅为15mW;

  ·8P、14P—DIP(双列直插)、PICC多种封装;

  ·商用级芯片温宽为0°Cto+70°C:

  ·CS_片选使能,低电平芯片使能。

  ·CH0模拟输入通道0,或作为IN+/-使用。

  ·CH1模拟输入通道1,或作为IN+/-使用。

  ·GND芯片参考0电位(地)。

  ·DI数据信号输入,选择通道控制。

  ·DO数据信号输出,转换数据输出。

·CLK芯片时钟输入。

 

图14ADC0832引脚

4系统软件设计

4.1程序总体思路

我这个设计的思路是:

分别编写数据采集模块和数据接收模块的程序。

数据采集模块主要是采集温度、湿度、光照、的数值,将采集到的数据通过LCD1602显示出来。

同时在单片机中进行数据的处理,然后达到控制继电器的目的。

初始化

LCD显示数据错误

LCD显示采集数据

数据处理

启动继电器

程序开始

转换数据

读取传感器采集的数据

判读是否采集到数据

不启动继电器

判断继电器是否启动

4.2总体程序流程图设计

 

 

 

图15总体流程图

 

5硬件与软件的测试

5.1硬件测试

5.1.1.电路板初步测试

电路板通过热转印制作好以后,首先将电路板打磨干净,利用我们的万用表检测所有的连线,看看是否有跨接在一起的,以便及时出路。

然后当焊接好电路板过孔后,再次利用万用表检测电路板上下过孔是否连接正常。

最后进行元件的焊接。

等到整个板子都做好以后。

利用万用表检测电路板正负连线是否跨接。

如果一切正常。

然后需要进行硬件电路连线的测试。

线路检测根据电路图用万用表检测PCB板线路是否有短路和断路现象。

根据电路图检查有极性元件是否反接,元件参数是否合适,再检测元件引脚与对应的线路是否接通,防止虚焊。

5.1.2.LCD1602液晶屏模块测试

利用万用表测量LCD1602液晶屏幕的第1脚是否和电路负极相连,2脚是否和电源正极相连。

一切正常后,再测试LCD1602其它8个数据脚和其对应的单片机脚是否连接正常。

如果一切正常,当其他模块测试完毕后便可上电测试模块软件了。

5

.1.3.电路图及原理图

图16原理图

图17Pcb封装图

5.2软件测试

5.2.1.软件初步测试

软件的测试要对每个硬件模块进行软件调试。

调试模块时,一定要符合现场环境,即入口条件和出口条件。

调试的手段可采用单步运行的方式和断点运行的方式,通过检查系统单片机的现场、I/O口的状态,检测程序执行结果是否符合设计要求。

5.2.2.程序如下:

主函数部分

#include

#include

#include"lcd.h"

#include"temp.h"

sbitbee=P3^6;

sbitdat=P3^0;

sbitout=P1^0;

sbitRX=P2^1;

sbitTX=P2^0;

sbitbee1=P3^5;

uinttemp;

uintmax;

uintdist;

bitflag=0;

uchardisdat[4]={0,0,0,0,};

 

/*******************************************************************************

*函数名:

LcdDisplay()

*函数功能:

LCD显示读取到的温度

*******************************************************************************/

voidLcdDisplay(inttemp)//lcd显示

{

inta=0,b=0,c=0;

unsignedchardatas[]={0,0,0,0,0};//定义数组

floattp;

if(temp<0)//当温度值为负数

{

LcdWriteCom(0x80);//写地址80表示初始地址

LcdWriteData('-');//显示负

//因为读取的温度是实际温度的补码,所以减1,再取反求出原码

temp=temp-1;

temp=~temp;

tp=temp;

temp=tp*0.0625*100+0.5;

//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就

//算由?

.5,还是在小数点后面。

}

else

{

LcdWriteCom(0x80);//写地址80表示初始地址

LcdWriteData('+');//显示正

tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量

//如果温度是正的那么,那么正数的原码就是补码它本身

temp=tp*0.0625*100+0.5;

//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就

//算加上0.5,还是在小数点后面。

}

datas[0]=temp/10000;

datas[1]=temp%10000/1000;

datas[2]=temp%1000/100;

datas[3]=temp%100/10;

datas[4]=temp%10;

max=datas[0]*100+datas[1]*10+datas[2];

LcdWriteCom(0x81);//写地址80表示初始地址

LcdWriteData('0'+datas[0]);//百位

LcdWriteCom(0x82);//写地址80表示初始地址

LcdWriteData('0'+datas[1]);//十位

LcdWriteCom(0x83);//写地址80表示初始地址

LcdWriteData('0'+datas[2]);//个位

LcdWriteCom(0x84);//写地址80表示初始地址

LcdWriteData('.');//显示‘.’

LcdWriteCom(0x85);//写地址80表示初始地址

LcdWriteData('0'+datas[3]);//显示小数点

LcdWriteCom(0x86);//写地址80表示初始地址

LcdWriteData('0'+datas[4]);//显示小数点

}

/*******************************************************************************

*函数名:

Conut

*函数功能:

超声波测量距离

*******************************************************************************/

voidConut()

{

unsignedlongS=0;

unsignedinttime=0;

time=TH0*256+TL0;

TH0=0;

TL0=0;

S=(time*1.7)/100;

//S=time/58;//算出来是CM

if((S>=700)||flag==1)//超出测量范围显示“-”

{

flag=0;

}

else

{

disdat[0]=S%1000/100;

disdat[1]=S%1000%100/10;

disdat[2]=S%1000%10%10;

dist=disdat[1]*10+disdat[2];

LcdWriteCom(0x80+0x40);//写地址80表示初始地址

LcdWriteData('0'+disdat[0]);//百位

LcdWriteCom(0x80+0x41);//写地址80表示初始地址

LcdWriteData('0'+disdat[1]);//十位

LcdWriteCom(0x80+0x42);//写地址80表示初始地址

LcdWriteData('0'+disdat[2]);//个位

LcdWriteCom(0x80+0x43);//写地址80表示初始地址

LcdWriteData('.');//显示小数点‘.’

LcdWriteCom(0x80+0x44);//写地址80表示初始地址

LcdWriteData('0'+disdat[3]);//个位

LcdWriteCom(0x80+0x45);//写地址80表示初始地址

LcdWriteData('c');//显示单位

LcdWriteData('m');

}

}

/*******************************************************************************

*函数名:

中断

*函数功能:

超过测量距离中断

*******************************************************************************/

voidzd0()interrupt1//T0中断用来计数器溢出,超过测距范围

{

flag=1;//中断溢出标志

}

/*******************************************************************************

*函数名:

StartModule

*函数功能:

启动模块

******************************************************************************/

voidStartModule()//启动模块

{

TX=1;//启动一次模块

_nop_();_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();

TX=0;

}

/*******************************************************************************

*函数名:

control

*函数功能:

控制

*输入:

*输出:

*******************************************************************************/

voidMainDelayms(uintxms)//延时

{

uchari;

for(;xms>0;xms--)

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

}

 

voidbeef()//叫声

{

bee=0;

MainDelayms(2000);

bee=1;

MainDelayms(2000);

}

voidControl()//控制

{

if(max>=30)

{

beef();

}

elsebee=1;

}

voidControl2()

{

if(dist>=3)

{

beef();

}

elsebee1=1;

}

/*******************************************************************************

*函数名:

main

*函数功能:

主函数

*******************************************************************************/

voidmain()

{

bee=1;

LcdInit();//初始化LCD1602

LcdWriteCom(0x87);//写地址80表示初始地址

LcdWriteData('C');

while

(1)

{

LcdDisplay(Ds18b20ReadTemp());

Control();

Control2();

//MainDelayms(2000);//1s钟刷一次

if(dat)

{out=0;

LcdWriteCom(0x89);//写地址80表示初始地址

LcdWriteData('w');

LcdWriteData('a');

LcdWriteData('r');

LcdWriteData('n');

LcdWriteData('i');

LcdWriteData('n');

LcdWriteData('g');

;

}

else

{

out=1;

LcdWriteCom(0x89);//写地址80表示初始地址

LcdWriteData('');

LcdWriteData('');

LcdWriteData('');

LcdWriteData('');

LcdWriteData('');

LcdWriteData('

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 国外设计风格

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1