标题:
一个燃气炉安全保护装置的程序
[打印本页]
作者:
Sky_Eagle
时间:
2013-6-29 13:20
标题:
一个燃气炉安全保护装置的程序
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
/********IO引脚定义***********************************************************/
sbit Flame=P1^5; //火焰检测
sbit Buzzer=P1^2; //蜂鸣控制
sbit Ignition=P1^7; //点火控制
sbit xf=P1^6; //吸阀控制
sbit msxz=P3^5; //工作模式选择
/********延时函数***********************************************************/
void delay(uint z)
{
uint x;
uchar y;
for(x=z;x>0;x--)
for(y=2000;y>0;y--);
}
/********子函数***********************************************************/
void didi() //开机蜂鸣
{
Buzzer=0;
delay(800);
Buzzer=1;
}
void didi10() //报警蜂鸣
{
Buzzer=0;
delay(800);
Buzzer=1;
delay(800);
Buzzer=0;
delay(800);
Buzzer=1;
delay(800);
Buzzer=0;
delay(800);
Buzzer=1;
delay(800);
Buzzer=0;
delay(800);
Buzzer=1;
delay(800);
}
void zh1() //开启点火,关闭自吸阀
{
Ignition=0;
xf=1;
}
void ms1() //模式1子程序
{
if(Flame==1) //检测火焰
delay(500); //延时一下,防止干扰
if(Flame==1) //确实有火焰,不是干扰
{
Ignition=1; //关闭点火
xf=0; //自吸阀开启
EX0=1; //开启外部中断0
}
else
zh1(); //没有火焰,执行子程序zh1()
}
void ms2() //模式2子程序
{
// dh=0;
if(Flame==1) //检测火焰
delay(500);
if(Flame==1) //再次检测
{
Ignition=1; //有火焰关闭点火
xf=0; //打开自吸阀
EX1=1; //开启中断1
}
else //无火焰,继续点火
Ignition=0;
}
/***********主函数开始********************************************************/
void main() //程序开始
{
didi(); //开机蜂鸣
EA=1; //开启总中断
EX0=0; //外部中断0关闭
EX1=0; //外部中断1关闭
IT0=0; //低电平触发中断0
IT1=0; //低电平触发中断1
Flame=0; //初始化火焰检测接口
xf=1; //关闭自吸阀
Ignition=0; //开始点火
while(1)
{
if(msxz==1) //选择工作模式
delay(500);
if(msxz==1) //高电平时调用模式1程序
{
ms1();
}
else //低电平时调用模式2程序
ms2();
}
}
/***********中断0程序********************************************************/
void ex0_int() interrupt 0
{
xf=1; //关闭自吸阀
if(Flame==0) //检测火种是否已经熄灭
delay(100); //延时一下
if(Flame==0) //再次判断
{
didi10(); //火种灭了,报警4声
EX0=0; //退出中断0,程序从头开始
}
}
/***********中断1程序********************************************************/
void ex1_int() interrupt 2
{
if(Flame==0) //检测火种是否熄灭
delay(100); //停一下
if(Flame==0) //再次判断
{
Ignition=0; //火种灭了,点火
delay(10000);//延时4s-5s
Ignition=1; //关闭点火
if(Flame==0)//检测火种是否点燃
delay(100);
if(Flame==0)//再次判断
{
Ignition=1; //火种未点燃,关闭点火
xf=1;//关闭自吸阀
didi10(); //蜂鸣报警
EX1=0;//退出中断1,程序从头开始
}
else //火种已经点燃
xf=0;
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1