- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于labview的烟雾报警系统
实现功能:通过上位机实时监测气体浓度,并与上位机设定的报警阀值比较,若超过气体浓度报警值,则上下位机同时报警。 实时改变气体报警值,通过上位机传给下位机判断。
电路原理图:参见ADC0809datasheet和MQ-2气体传感器模块参数。传感器根据气体浓度输出0~5V模拟电压输入到0809的模拟输入端。
调式:通过串口调试助手检测数据传送的正确性。
程序:
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit CLK=P3^3 ;
sbit ST=P2^0; //启动转换输入信号
sbit OE=P2^1;
sbit EOC=P3^2;
uchar DATA; //存放A/D转换数据
sbit Beep=P2^7;
uchar aa;
void delayxms(uint x) //延时
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void delayxus(uint x) //延时xus
{
uint i;
for(i=x;i>0;i--)
_nop_();
}
void init(void)
{
TMOD=0x22; //定时器0自动重装8位,用于产生CLK,定时器1设置串口参数
TH0=237; //50kHZ
TL0=237;
TL1=0xf3;
TH1=0xf3;//2400bps
TR1=1;
TR0=1;
SM0=0;
SM1=1;
EA=1;
ET0=1;
ES=1;
REN=1;
ST=0;
OE=0;
}
void ADC0809()
{
ST=0;
OE=0;
//LE=1;P0=0x00;LE=0;
delayxus(2);
ST=1;
delayxus(10);
ST=0;
delayxus(200);
while(EOC==0);
OE=1;
DATA=P1;//DATA为AD转换后的数据
delayxus(20);
OE=0;
}
[p]
void main()
{
Beep=1;
init();
while(1)
{
ADC0809();
if(aa==49)Beep=0;
else Beep=1;
delayxms(200);
}
}
void serial() interrupt 4
{ uint r;
RI=0;
r=SBUF;
aa=r;
if(r==48||r==49)
{
while(!TI);
TI=0;
}
}
void T0_time() interrupt 1
{
}