当前位置:文档之家› (完整word版)基于51单片机 烟雾传感器MQ-2 火灾报警器的设计

(完整word版)基于51单片机 烟雾传感器MQ-2 火灾报警器的设计

(完整word版)基于51单片机 烟雾传感器MQ-2 火灾报警器的设计
(完整word版)基于51单片机 烟雾传感器MQ-2 火灾报警器的设计

基于51单片机烟雾传感器MQ-2 火灾报警器的设计显示浓度

2012-02-16 16:54

单片机火灾报警系统设计

摘要:随着“信息时代”的到来,作为获取信息的手段——传感器技术得到了显著的进步,其应用领域越来越广泛,对其要求越来越高,需求越来越迫切。传感器技术已成为衡量一个国家科学技术发展水平的重要标志之一。因此,了解并掌握各类传感器的基本结构、工作原理及特性是非常重要的。

为了提高对传感器的认识和了解,尤其是对烟雾传感器的深入研究以及其用法与用途,基于实用、广泛和典型的原则而设计了本系统。本文利用单片机结合传感器技术而开发设计了这一烟雾监控系统。。

本论文以电阻式烟雾传感器和单片机技术为核心并与其他电子技术相结合,设计出一种技术水平较好的烟雾报警器。其中选用MQ-2型半导体可燃气体敏感元件烟雾传感器实现烟雾的检测,具有灵敏度高、响应快、抗干扰能力强等优点,而且价格低廉,使用寿命长。

以A T89S52单片机和MQ-2型半导体电阻式烟雾传感器为核心设计的烟雾报警器是一种结构简单、性能稳定、使用方便、价格低廉、智能化的烟雾报警器。具有一定的实用价值。

关键词:烟雾,报警器,A T89S52,传感器

#include //52系列头文件

#include

#include

#define uchar unsigned char //宏定义uchar #define uint unsigned int //宏定义uint long int a1,d0,d,e1,b,c,s,s1,nongdu;

sbit beep=P1^4; //定义蜂鸣器的io

uint temp,t,w; //定义整型的温度数据

uchar flag,a,flag1,num;

float f_temp; //定义浮点型的温度数据

uint low; //定义温度下限值是温度乘以10后的结果

uint high; //定义温度的上限值

sbit jdq=P1^0;

sbit ADCCLK=P1^5;//时钟

sbit ADCCS=P1^7;//片选端

sbit DI=P1^6;//起始信号输入与端口选择及数据输出端

uchar dat=0;//AD值

sbit DO=P1^6;//ADC0832数据输出

uchar CH=0;//通道变量

sbit k1=P3^3; //功能键控制io

sbit s2=P3^5; //增大按键io

sbit s3=P3^6; //减少键控制io

sbit s4=P3^7;

bit t1;

uchar flag1,flag2,flag3,flag4,s1num,qian,bai,shi,ge;

uchar code table[]=

{

0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90,

}; //共阳数码管段码表没有小数点0~9

void delay(uchar z) //延时函数

{

uchar a,b;

for(a=z;a>0;a--)

for(b=110;b>0;b--);

}

void init()

{

EA=1; //打开全局中断控制,再此条件下,由各个中段控制位确定相应中断的打开和关闭ET1=1; //打开定时器T1中段

TR1=1; //启动定时器T1

TMOD=0x10; //定时器1工作方式1

TH1=(65536-4000)/256; //给定时器高四位赋初值

TL1=(65536-4000)%256; //给定时器第四位赋初值

flag=0;

nongdu=3000;

}

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

AD转换函数

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

uint ADC0832()

{

uint i,test,adval;

adval=0;

test=0;

ADCCS=0; //选通ADC0832

_nop_(); //延时

ADCCLK=1;//第一个脉冲的上升沿

_nop_(); //延时

DI=1; //第一个脉冲下降沿之前ADC0832转换启动信号ADCCLK=0;//第一个脉冲的下降沿

_nop_(); //延时

ADCCLK=1;//第二个脉冲的上升沿

_nop_(); //延时

if(CH==0)//选通CH0通道

{

DI=1;//第二个脉冲下降之前送人通道选择第二位ADCCLK=0;//第二个下降沿

_nop_();

ADCCLK=1;//第三个脉冲上升沿

_nop_();

DI=0; //第三个脉冲下降沿之前送入通道选择第3位ADCCLK=0;//第三个脉冲的下降沿

_nop_();

ADCCLK=1;//开始第四个脉冲

_nop_();

}

else //选通CH1通道

{

DI=1; //第二个脉冲下降沿之前送通道选择的第一位ADCCLK=0; //第二个下降沿

_nop_();

ADCCLK=1; //第三个脉冲的上升沿

_nop_();

DI=1;//第三个脉冲的下降沿之前送通道通道选择的第二位ADCCLK=0;//第三个脉冲的下降沿

_nop_();

ADCCLK=1;//开始第四个脉冲

_nop_();

}

ADCCLK=0;//第四个脉冲的下降沿

DO=1;

for(i=0;i<8;i++)//读取前八位

{

_nop_();

adval<<=1;

ADCCLK=1;

_nop_();

ADCCLK=0;

if(DO)

adval|=0x01;

else

adval|=0x00;

}

for(i=0;i<8;i++)//读取后八位

{

test>>=1;

if(DO)

test|=0x80;

else

test|=0x00;

_nop_();

ADCCLK=1;

_nop_();

ADCCLK=0;

}

if(adval==test)//比较前8位与后8位的数值,如果不相同,舍去dat=test;

_nop_();

ADCCS=1;//释放ADC0832

DO=1;

ADCCLK=1;

return dat;

}

程序未完待续……

相关主题
文本预览
相关文档 最新文档