基于单片机火灾烟雾及温度报警系列设计实例
可调节报警烟雾等级
/***********读数模转换数据********************************************************/
unsigned char ad0832read(bit SGL,bit ODD)
{
unsigned char i=0,value=0,value1=0;
SCL=0;
DO=1;
CS=0;//开始
SCL=1;//第一个上升沿
SCL=0;
DO=SGL;//SGL
SCL=1; //第二个上升沿
SCL=0;
DO=ODD;
SCL=1; //第三个上升沿
SCL=0; //第三个下降沿
DO=1;
for(i=0;i<8;i++)
{
SCL=1;
SCL=0; //开始从第四个下降沿接收数据
value<<=1;
if(DO)
value++;
}
for(i=0;i<8;i++)
{//接收校验数据
value1>>=1;
if(DO)
value1+=0x80;
SCL=1;
SCL=0;
}
CS=1;
SCL=1;
if(value==value1)//与校验数据比较,正确就返回数据,否则返回0
return value;
return 0;
}
科技制作 基于430单片机的烟雾探测器程序示例
这个程序使用了IO口中断和AD采集中断,具有采集烟雾浓度,超过浓度阈值报警等功能;
程序预览
下面是程序示例:
/**********************************************************
作者:狐狸哟X
时间:2018.11.23
功能:基于430单片机的MQ-2烟雾探测器模块应用
***********************************************************/
#include "msp430g2553.h"
#include <intrinsics.h> //延时函数包含的头文件
#define CPU_F ((double)8000000) //配合下面的两条延时函数
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define uchar unsigned char
#define uint unsigned int
static uint Smoke_Deep=0; //烟雾浓度初始值为0
static uint Red_Alert=0; //设定默认允许启动蜂鸣器
/******************************************************************************
名 称:main
功 能:主函数
输入值:无
输出值:无
返回值:无
******************************************************************************/
void main(void)
{
WDTCTL = WDTPW+WDTHOLD; //关闭看门狗定时器
if (CALBC1_8MHZ==0xFF)
{
while(1);
}
DCOCTL = 0;
BCSCTL1 = CALBC1_8MHZ;
DCOCTL = CALDCO_8MHZ; //配置DCO产生8MHz的频率
P1DIR&=~BIT6; //P1.6为输入模式
P1IES&=~BIT6; //P1.6为上升沿中断
P1IE|=BIT6; //P1.6中断使能
P1IFG=0; //清中断标志位
ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; //打开10位ADC,允许中断
ADC10CTL1 = INCH_0; // 选择 A0为输入通道
ADC10AE0 |= BIT0; // 选择P1.0口作为采集口
ADC10CTL0 |= ENC + ADC10SC; // 打开AD采样和转换开关
_EINT(); //打开总中断
LPM3; //进入低功耗模式3
}
/******************************************************************************
名 称:ADC10_ISR
功 能:AD采集中断函数
输入值:无
输出值:无
返回值:无
******************************************************************************/
#pragma vector=ADC10_VECTOR //AD采集中断
__interrupt void ADC10_ISR(void)
{
uchar i;
Smoke_Deep=ADC10MEM; //获得烟雾浓度
/********在这里添加驱动显示屏的程序,显示烟雾浓度,可以不加*******/
if(!Red_Alert) //判断是否允许发出警报
{
if(Smoke_Deep>想要的预定值) //如果烟雾浓度大于预定值
{
P1DIR|=BIT5; //P1.5为输出模式
for(i=0;i<20;i++)
{
P1OUT|=BIT5; //驱动蜂鸣器
delay_ms(300); //延时300毫秒
P1OUT&=~BIT5; //暂停蜂鸣器
delay_ms(200); //延时200毫秒
}
}
}
delay_ms(500); //延时0.5秒
ADC10CTL0 |= ENC + ADC10SC; // 再次打开AD采样和转换开关
}
/******************************************************************************
名 称:Key_interrput
功 能:IO口中断函数
输入值:无
输出值:无
返回值:无
******************************************************************************/
#pragma vector = PORT1_VECTOR //IO口中断
__interrupt void Key_interrput(void)
{
if(P1IFG&BIT6) //确认中断源来源是P1.6
{
delay_ms(2); //延时2毫秒,消抖
if(P1IFG&BIT6) //确认中断源来源是P1.6
{
P1IFG=0; //清中断标志位
Red_Alert=~Red_Alert;//取反
}
}
}
说明:P1.5口用于驱动蜂鸣器,P1.6口用于控制蜂鸣器工作的使能,P1.0口为模拟信号采集通道。
使用软件:IAR 7.11.2
IAR软件预览
烟雾传感器的电路部分设计在扩展链接中。
烟雾传感器模块
相关问答
mq2 单片机 程序怎么写?MQ2是烟雾浓度传感器,将其模拟输出AO接入到一个AD转换器(比如ADC0832)上,再读取转换结果就可以了。程序的编写就是读取ADC的值。单片机(Single-ChipMicroco...
我想问一下烟感器装修的时候弄丢了怎么办呢_齐家装修问答该检测仪采用单片机控制,可以智能判断火灾时烟雾报警器。报警和光电感烟装置及其生产技术,稳定性好,外形美观,安装简单,无需调试,可广泛用于宾馆、...
大仙们还有谁知道!!可燃气体 报警器 和有毒气体 报警器 有什么区别?重庆有燃气报警器经销商的,只是这里无法把联系方式告诉他你。防治燃气发生爆炸请加装燃气报警器,您可以百度搜寻:永康牌燃气报警器廖先生“咨询。...
如何评价电影《黑寡妇》?你好非常开心能回答您的问题,那今天我们来聊《黑寡妇》众所周知,漫威的预告片如今都叫“预告骗”,自从预告分析这个类型节目兴起以后,漫威宇宙的预告片,甚...接...
商务谈判者应具有的什么能力商务谈判的要素I“会听”要尽量鼓励对方多说,向对方说:“yes”,“pleasegoon”,并提问题请对方回答,使对方多谈他们的情况。II巧提问题用开...
机房温度 报警器 价格多少?_土巴兔装修问答基于单片机语音数字联网火灾报警器设计摘要:使用AT89C51单片机,选用集成温度传感器AD590和气体传感器TGS202作为敏感元件,利用多传感器信息融合技...
《重生》胡一彪是谁派来的,来西关支队的目的是什么?他到底正派还是反派?“这是关宏峰,还是关宏宇,这是潘粤明,还是潘粤暗?”随着潘粤明在《白夜追凶》中演绎的经典角色在网剧《重生》中再度登场,弹幕里的不少观众产生了一种“串...“...
物联网专业怎么样?找到职业新方向,从全面了解IoT开始全文共4726字,预计学习时长10分钟物联网(IoT)正以前所未有的速度蓬勃发展,并将长期为各行各业带来新的机遇,助力成功。...这...
怎样储存巢础?感谢提问:怎样储存巢础?我是山娃养蜂,很高兴回答这个问题,首先要把巢础与巢脾区分开,两者是不一样的,巢础是由加工厂根据巢脾的构造用蜡加工而成,巢脾的形...二...
智能家居包括哪些东西? - 小红薯3697D633 的回答 - 懂得首先我们来了解智能家居是什么概念,欧派克这样理解:对智能家居产品来说,最重要的是以实用为核心,摒弃掉那些华而不实,只能充作摆设的功能,产品以实...