当前位置:文档之家› 烟雾报警器课程设计报告总结报告

烟雾报警器课程设计报告总结报告

课程设计总结报告课程名称电子技术课程设计设计题目基于89C52的室内火、气安全监测装置专业电子信息工程班级姓名学号指导教师报告成绩信息与工程学院二〇一三年十二月十九日目录前言 (3)第一章项目任务 (3)1.1 设计任务 (3)1.2 设计要求 (4)第二章方案设计与硬件选择 (4)2.1 单片机89C52 (4)2.2 温度传感器模块 DS18B20 (5)2.3 烟雾报警器电路MQ2 (5)2.4 信号调理及放大整形模块, LM358芯片 (7)2.5 显示模块LED (7)2.6 报警电路 (7)2.7 按键分析 (6)2.8 复位电路 (6)第三章流程图设计 (8)3.1 电路系统模块 (8)3.2 主程序流程图 (8)3.3 温度报警子程序 (9)3.4 烟雾报警子程序图 (9)3.5 对18B20写程序流程图 (10)3.6 对18B20读8为数据流程图 (12)3.7 温度值转换流程图 (13)3.8 18B20读取温度流程图 (14)第四章电路实验与调试 (15)4.1 焊接 (16)4.2 软件设计 (14)4.3 调试与处理出现问题 (19)第五章设计总结 (19)附录 (21)前言随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够独立工作的温度检测与显示系统应用于诸多领域。

传统的温度检测以热敏电阻为温度敏感元件。

热敏电阻的成本低,需要外加信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。

与传统的温度计相比,这次设计的是基于DS18B20的数字温度计,它具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。

第一章项目任务1.1 设计任务使用温度传感器和烟雾传感器把环境温度和烟雾的浓度情况检测出来,再采用单片机进行温度的显示和烟雾显示,可设置温度报警和烟雾报警。

要求进行硬件、软件系统设计。

要求:位温度的显示;设置报警温度;烟雾报警1.2 设计要求(1) 能检测火灾事故,并报警(2) 能检测烟雾,有毒气体泄漏事故,并报警(3)能实时显示室内温度值,并通过键盘设置温度报警上下限值第二章方案设计与硬件选择2.1单片机89C52AT89C52是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。

2.2温度传感器模块 DS18B202.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 烟雾报警器电路MQ2MQ2烟雾传感器,有只针状管脚,其中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.8 18B20读取温度流程图第四章电路实验与调试4.1 焊接4.2 软件设计#include <reg52.h>#include "18b20.h"#include <intrins.h>#define uint unsigned int//宏定义#define uchar unsigned char//宏定义#define date P1 //数码管段选uint temp,alarm_temp;//定义温度,设定温度bit key_lock,chang_flag;bit zerotemp_flag; //负温度标志位uchar code LED[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //三位共阳极数码管0~9的断码//数码管位定义sbit ge = P1^2;//个位sbit shi = P1^1;//十位sbit bai = P1^0;//百位sbit bell = P2^7;//蜂鸣器定义sbit MQ = P1^5;//MQ-2定义sbit DQ = P1^4;//18B20定义//按键定义sbit key0 = P2^0;sbit key1 = P2^1;sbit key2 = P2^2;sbit key3 = P2^3;void delay_ms(uint xms){//延时子程序uint i,j;for(i=xms;i>0;i--)//i=xms即延时约xms;for(j=110;j>0;j--);}void delay_us(uint z){//微妙级延时while(z--)_nop_();}void display(uint x){//数码管显示子程序//取一温度值xuint temp1;temp1 = x;temp1 = temp1%1000;//使温度值不超过三位有效数//动态显示//显示个位ge = 0;//开显示date = LED[temp1%10];//将temp1的个位显示出来delay_ms(2);//延时2msge = 1;//关显示//显示十位shi = 0;//开显示date = LED[temp1%100/10]&0x7f; //将temp1的十位显示出来,并显示小数点dp位delay_ms(2);//延时2msshi = 1;//关显示//显示百位bai = 0;//开显示date = LED[temp1/100];//将temp1的百位显示出来delay_ms(2);//延时2msbai = 1; //关显示}void alarm(void){//报警子程序if((temp>alarm_temp)|(MQ == 0))//如果温度大于设定值或MQ2=0{bell = 0;//蜂鸣器响}elsebell = 1;//蜂鸣器不响}/*****************18B20程序******************/void fuwei(void){//18B20复位DQ = 0;delay_us(50); //600usDQ = 1;delay_us(5); //70us}uchar read_18B20(void){//从18B20读取8位数据uchar i,dat; //从最低位开始接收for(i = 0;i<8;i++){dat>>=1; //数据右移一位DQ = 0;_nop_(); //延时1usDQ = 1; //释放总线_nop_(); //延时2us后在读取,不然读取值会紊乱,很关键!!! _nop_();if(DQ)dat|=0x80; //如果接收到的是1,则最高位置为1delay_us(2); //延时40us}return dat;}void write_18B20(uchar dat){//对18B20写8位数据uchar i;for(i = 0;i<8;i++){DQ = 0;_nop_();//延时10usDQ = (bit)(dat&0x01); //从最低位开始发送dat>>=1; //右移一位delay_us(1); //延时40usDQ = 1; //释放总线}}void changetemp(void){//温度值转换uint Temp_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; //保存一位小数}void read_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(); //复位}int main(void){//主程序alarm_temp = 220;//设定温度初始值read_temp();//18b20测温delay_ms(500);//延迟500mswhile(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,则减一后变为990alarm_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电路少接一个电阻。

相关主题