基于单片机火灾烟雾及温度报警系列设计实例
可调节报警烟雾等级
/***********读数模转换数据********************************************************/
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软件预览
烟雾传感器的电路部分设计在扩展链接中。
烟雾传感器模块
相关问答
基于STC89C52 单片机 的 烟雾报警器 的相关问题?烟雾器MQ2?AD转...[最佳回答]1、spi是一个通信协议,spi器件其实就是一个电平转换器不是单片机2、按键去抖就是按键加延时3、ad是电压信号采集4、最小系统是单片机能运作起来...
现在进行 单片机 开发和学习的前途怎么样?单片机的应用在生活中已经非常普遍了,从数字闹钟到电动牙刷和电动剃须刀;从车内应用门锁、停车传感器、ABS,到行车途中交通控制、雷达测速以及交通流量监视器...
大仙们还有谁知道!!可燃气体 报警器 和有毒气体 报警器 有什么区别?重庆有燃气报警器经销商的,只是这里无法把联系方式告诉他你。防治燃气发生爆炸请加装燃气报警器,您可以百度搜寻:永康牌燃气报警器廖先生“咨询。...
日和学好c语言 单片机 ?你好,看你的标题应该是如何学好单片机.首先要有一个良好的心态,即是我要学习。第二就是你要对微电路感兴趣。为什么这样就可以时间控制什么的。有了这些条件...
玩树莓派能学到什么?...我们首先打开终端,输入如下指令$gpioreadall可以得到树莓派的IO口定义,基本的SPI,串口,CAN,I2C通信都是应有尽有。我们可以借此和很多外设,传感器连接做...
智能家居包括哪些东西? - 小红薯3697D633 的回答 - 懂得首先我们来了解智能家居是什么概念,欧派克这样理解:对智能家居产品来说,最重要的是以实用为核心,摒弃掉那些华而不实,只能充作摆设的功能,产品以实...
工业自动化与智能机器人专业哪个就业好?目前没有智能机器人专业。按照教育批准的机器人相关的专业,有三个,这三个专业又各有侧重点。自动化专业:电气自动化,属于基础工控专业自动化专业,也就是...接...
国内外对巡线小车的研究现状[回答]其中光敏电阻经常用于温度控制,红外对射式传感器经常用于车内烟雾检测,光电码盘经常用于测试车速和方位,激光测试技术可以对诸如燃油喷雾的特性、汽...
求助油烟机触摸按键开关的工作原理模式控制采用带记忆功能的单片机,可根据用户习惯记忆常用模式;手电结构上的防反...1)、吸油烟机排出的气体不该排到用于排出燃烧煤气或别的的烟雾运用的烟道内。...
如何更好地将智能家居与室内空间设计相融合?感谢悟空的邀请!智能家居设计是以室内设计为平台,通过移动通信与网络技术的载体,结合室内空间设计的理念和策略,构建高效的室内设施与人们的日常事物的管理,...