烟雾报警器课程设计总结报告讲述讲解doc.docx
《烟雾报警器课程设计总结报告讲述讲解doc.docx》由会员分享,可在线阅读,更多相关《烟雾报警器课程设计总结报告讲述讲解doc.docx(20页珍藏版)》请在冰豆网上搜索。
烟雾报警器课程设计总结报告讲述讲解doc
课程设计总结报告
课程名称电子技术课程设计
设计题目基于89C52的室内火、气安全监测装置
专业电子信息工程
班级
姓名
学号
指导教师
报告成绩
信息与工程学院
二〇一三年十二月十九日
前言
随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够独立工作的温度检测与显示系统应用于诸多领域。
传统的温度检测以热敏电阻为温度敏感元件。
热敏电阻的成本低,需要外加信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。
与传统的温度计相比,这次设计的是基于DS18B20的数字温度计,它具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。
第一章项目任务
1.1设计任务
使用温度传感器和烟雾传感器把环境温度和烟雾的浓度情况检测出来,再采用单片机进行温度的显示和烟雾显示,可设置温度报警和烟雾报警。
要求进行硬件、软件系统设计。
要求:
位温度的显示;设置报警温度;烟雾报警
1.2设计要求
(1) 能检测火灾事故,并报警
(2) 能检测烟雾,有毒气体泄漏事故,并报警
(3)能实时显示室内温度值,并通过键盘设置温度报警上下限值
第二章方案设计与硬件选择
2.1单片机89C52
AT89C52是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
2.2温度传感器模块DS18B20
2.2.1 数字温度传感器DS18B20,具有独特的单总线接口方式,需一根总线就能实现控制模块与DS18B20之间的半双工通信。
DS18B20是集传感元件和转换电路于一体的小芯片上。
另外,DS18B20也支持"一线总线"接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内。
现场温度直接以"一线总线"的数字方式传输,大大提高了系统的抗干扰性。
2.2.2工作原理
DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可擦除的EERAM。
高速暂存RAM的结构为8字节的存储器,结构如图1所示。
第3和第4字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。
第5个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。
DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。
该字节各位的定义热图二所示。
低5位一直为1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
在DS18B20出厂时该位被设置为0,用户不要改动,R1和R0决定温度转换得精度位数,即用来设置分辨率,定义方法见表1。
图一
图二
2.2.3供电方式
采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电
2.3 烟雾报警器电路MQ2
MQ2烟雾传感器,有只针状管脚,其中4个用于信号取出,2个用于提供加热电流。
当烟雾扩散时,烟雾传感器感应到烟雾时,继电器打到NO,风扇开始工作,马达转动,风扇产生吸力将烟雾吸入到装有活性炭和负离子的过滤外壳中,排清新干净的气体
2.4 信号调理及放大整形模块, LM358芯片
LM358 内部包括有两个独立的、高增益、内部频率补偿的双运算放大器。
当P1.5为0时报警。
2.5 显示模块LED
采用LED数码管显示
2.6 报警电路
用蜂鸣器作报警提示音,加发光二极管,声光结合充分突出了紧急提示信号的特点。
2.7按键分析
四个按键的功能分别为:
第一个按键是结束选择,按一下表示显示管进行显示当时温度;第二个键是减键,对设定的温度进行减一;第三个键是加键;第四个键是进入键,按一下表示进入设置温度模式。
2.8复位电路
原理:
VCC上电时,C3充电,在10K电阻上出现电压,使得单片机复位;几个毫秒后,C充满,10k电阻上电流降为0,电压也为0,使得单片机复位。
工作期间,按下S4,C放电,在10K电阻上出现电压,使得单片机复位。
S松手,C又充电,几个毫秒后,单片机进入工作状态。
第三章流程图设计
3.1电路系统模块
3.2主程序流程图
3.3温度报警子程序
3.4烟雾报警子程序图
3.5对18B20写程序流程图
3.6对18B20读8为数据流程图
3.7温度值转换流程图
3.818B20读取温度流程图
第四章电路实验与调试
4.1焊接
4.2软件设计
#include
#include"18b20.h"
#include
#defineuintunsignedint//宏定义
#defineucharunsignedchar//宏定义
#definedateP1//数码管段选
uinttemp,alarm_temp;//定义温度,设定温度
bitkey_lock,chang_flag;
bitzerotemp_flag;//负温度标志位
ucharcodeLED[]={0xC0,0xF9,0xA4,
0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//三位共阳极数码管0~9的断码
//数码管位定义
sbitge=P1^2;//个位
sbitshi=P1^1;//十位
sbitbai=P1^0;//百位
sbitbell=P2^7;//蜂鸣器定义
sbitMQ=P1^5;//MQ-2定义
sbitDQ=P1^4;//18B20定义
//按键定义
sbitkey0=P2^0;
sbitkey1=P2^1;
sbitkey2=P2^2;
sbitkey3=P2^3;
voiddelay_ms(uintxms)
{//延时子程序
uinti,j;
for(i=xms;i>0;i--)//i=xms即延时约xms;
for(j=110;j>0;j--);
}
voiddelay_us(uintz)
{//微妙级延时
while(z--)
_nop_();
}
voiddisplay(uintx)
{//数码管显示子程序
//取一温度值x
uinttemp1;
temp1=x;
temp1=temp1%1000;//使温度值不超过三位有效数
//动态显示
//显示个位
ge=0;//开显示
date=LED[temp1%10];//将temp1的个位显示出来
delay_ms
(2);//延时2ms
ge=1;//关显示
//显示十位
shi=0;//开显示
date=LED[temp1%100/10]&0x7f;//将temp1的十位显示出来,并显示小数点dp位
delay_ms
(2);//延时2ms
shi=1;//关显示
//显示百位
bai=0;//开显示
date=LED[temp1/100];//将temp1的百位显示出来
delay_ms
(2);//延时2ms
bai=1;//关显示
}
voidalarm(void)
{//报警子程序
if((temp>alarm_temp)|(MQ==0))//如果温度大于设定值或MQ2=0
{
bell=0;//蜂鸣器响
}
else
bell=1;//蜂鸣器不响
}
/*****************18B20程序******************/
voidfuwei(void)
{//18B20复位
DQ=0;
delay_us(50);//600us
DQ=1;
delay_us(5);//70us
}
ucharread_18B20(void)
{//从18B20读取8位数据
uchari,dat;//从最低位开始接收
for(i=0;i<8;i++)
{
dat>>=1;//数据右移一位
DQ=0;
_nop_();//延时1us
DQ=1;//释放总线
_nop_();//延时2us后在读取,不然读取值会紊乱,很关键!
!
!
_nop_();
if(DQ)
dat|=0x80;//如果接收到的是1,则最高位置为1
delay_us
(2);//延时40us
}
returndat;
}
voidwrite_18B20(uchardat)
{//对18B20写8位数据
uchari;
for(i=0;i<8;i++)
{
DQ=0;
_nop_();//延时10us
DQ=(bit)(dat&0x01);//从最低位开始发送
dat>>=1;//右移一位
delay_us
(1);//延时40us
DQ=1;//释放总线
}
}
voidchangetemp(void)
{//温度值转换
uintTemp_L,Temp_H;
Temp_L=read_18B20();//读取低八位
Temp_H=read_18B20();//读取高八位,当温度为负数时temp(7~4)为1,反之为0
if(((bit)(Temp_H&0x80)))
{
zerotemp_flag=1;//温度为负数标志位
//负温度计算
Temp_H&=0x0f;
temp=(Temp_H<<8|Temp_L)*0.625;
}
temp=(Temp_H<<8|Temp_L)*0.625;//保存一位小数
}
voidread_temp(void)
{//从18B20读取温度
fuwei();//复位
delay_us(10);//延时
write_18B20(0xcc);//跳过读取序列号
write_18B20(0x44);//开始转换温度
fuwei();//复位
delay_us(10);//延时
write_18B20(0xcc);//跳过读取序列号
write_18B20(0xbe);//读暂存指令
changetemp();//读取转换温度
fuwei();//复位
}
intmain(void)
{//主程序
alarm_temp=220;//设定温度初始值
read_temp();//18b20测温
delay_ms(500);//延迟500ms
while
(1)
{
read_temp();//18b20测温
display(temp);//显示测到的温度
alarm();//报警
if(!
key0)//如果key0=0,则进入温度修改状态
{
delay_ms
(2);//延迟2ms,消抖
if(!
key0)//如果key0=0,则确定键按下,显示温度
chang_flag=1;
}
while(chang_flag)
{
if(key1&key2)
key_lock=1;//如果key1&key2=1,则无效
if(!
key1)
{
delay_ms
(2);//延迟2ms,消抖
if(!
key1)
{
if(key_lock)
{
alarm_temp+=10;//alarm_temp+10=alarm_temp(温度加1)
if(alarm_temp>990)//如果数码管前两位大于99,则清零
alarm_temp=0;
key_lock=0;
}
}
}
if(!
key2)
{
delay_ms
(2);//延迟2ms,消抖
if(!
key2)
{
if(key_lock)
{
alarm_temp-=10;//alarm_temp+10=alarm_temp(温度减1)
if(alarm_temp>1000)//如果三位数码管都是0,则减一后变为990
alarm_temp=990;
key_lock=0;
}
}
}
if(!
key3)
{
delay_ms
(2);//延迟2ms,消抖
if(!
key3)
{
if(key_lock)
{
chang_flag=0;
key_lock=0;
}
}
}
display(alarm_temp);//显示设定温度
}
}
}
4.3调试与处理出现问题
1.温度显示不正确,发现DS18B20电路少接一个电阻。
2.程序无法上电,发现复位程序出现虚焊。
第五章设计总结
在二周的电子课程设计中,这次的实验不仅加强了硬件的使用能力,还加强了软件设计能力。
在这之中有效的巩固了本学期所学的专业知识,加强了电子实物制作的动手能力。
在这次的实验设计中我们首先要做了就是画硬件图,在脑海里形成一个总的构思,包括主程序流程图,按键处理流程图,更新当前时间流程图,更新显缓存流程图等,这是比较难的,开始我们毫无思路,在老师的精心指导下最终成功的画出。
焊接是比较简单的,一般一个下午就可以完成,最重要的是焊接中很容易出现的虚焊问题必须认真对待。
最后是程序设计与调试,程序的话应该说是上学期学过的东西运用运用而已,但是总是有些被遗忘了,在编程的时候会遇到或多或少的问题,最后也是通过参考别人的程序才成功。
经过这次设计,我认识到自己还有很多的不足,只有将课本上的理论知识结合实践不断练习,不断总结提炼,反复思考实践中的经验教训,才能更好的,将课本知识化为自己的知识。
希望在以后的学习中能更加努力,学习好这门专业。
(附录一)主电路图
(附录二)课程设计元器件清单表
器件名称
型号
数量
单片机
STC89C52
1
温度传感器
DS18B20
1
运算放大器
LM358
1
烟雾传感器
MQ2
1
底座
DIP40,DIP8
各一个
数码管
共阳三连体
三极管
8550
3
晶振
12MHZ
电容
33PF
4
22UF
2
电阻
10K
10
1K
10
4.7K
10
470
10
电位器
103,102
3
按键
20*30CM
5
蜂鸣器
1
发光二极管
1
排针
万能板