基于51单片机的报警器(模拟量,4路,ADC0832)原理图、流程图、物料清单、仿真图、源代码
课程设计 基于51单片机的报警器(模拟量,4路,ADC0832)原理图 PCB 仿真 源代码及proteus 软件
面向污水处理厂的气体检测电子鼻系统硬件部分主要由以下的部分组成:硫化氢传感器、氨气传感器、甲烷传感器、一氧化碳传感器、A/D转换模块、按键模块、电源供电模块、STC89C51单片机最小系统、液晶显示模块、声光报警电路。由传感器采集到的硫化氢、氨气、甲院、一氧化碳数值传送给单片机,在单片机的处理下,将最后的具体数值通过液晶屏显示出来。并设置上限,越限时要发出报警。
#include "reg51.h"
#include "lcd1602.h"
#include "ADC0832.h"
#define uchar unsigned char
#define uint unsigned int
sbit beep=P2^3;//蜂鸣器
//按钮
sbit k2=P2^6;
sbit k3=P2^7;
sbit k4=P1^6;
sbit k5=P1^7;
//LED
sbit led5=P3^4;
sbit led6=P3^5;
sbit led7=P3^6;
sbit led8=P3^7;
uchar time=0,mode=0;//系统变量
uchar hs=0,hs_lim=10;//硫化氢
uchar nh3=0,nh3_lim=15;//氨气
uchar ch4=0,ch4_lim=8;//甲烷
uchar co=0,co_lim=12;//一氧化碳
uchar disp[]="00C";
void main()//主函数
{
init_1602();//初始化LCD
TMOD|=0X01;
TH0=0X3C;
TL0=0XB0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
while(1)
{
if(!k2)//设置
{
if(mode<4)
mode++;
else
mode=0;
write_com(1);
while(!k2);
}
if(!k3)//加
{
switch(mode)
{
case 1:
if(hs_lim<99)
hs_lim++;
break;
case 2:
if(nh3_lim<99)
nh3_lim++;
break;
case 3:
if(ch4_lim<99)
ch4_lim++;
break;
case 4:
if(co_lim<99)
co_lim++;
}
while(!k3);
}
if(!k4)//减
{
switch(mode)
{
case 1:
if(hs_lim>0)
hs_lim--;
break;
case 2:
if(nh3_lim>0)
nh3_lim--;
break;
case 3:
if(ch4_lim>0)
ch4_lim--;
break;
case 4:
if(co_lim>0)
co_lim--;
}
while(!k4);
}
if(!k5)//OK
{
mode=0;
write_com(1);
while(!k5);
}
}
}
//定时器中断
void Timer0() interrupt 1
{
uint i;
if(time<10)//0.5s
time++;
else
{
time=0;
i=ADC0832(0,0);//测量硫化氢
hs=i*99/255;
i=ADC0832(0,1);//测量氨气
nh3=i*99/255;
i=ADC0832(0,2);//测量甲烷
ch4=i*99/255;
i=ADC0832(0,3);//测量一氧化碳
co=i*99/255;
//报警控制
if(hs>hs_lim)
led5=0;
else
led5=1;
if(nh3>nh3_lim)
led6=0;
else
led6=1;
if(ch4>ch4_lim)
led7=0;
else
led7=1;
if(co>co_lim)
led8=0;
else
led8=1;
//蜂鸣器响
if(P3!=0xff)
beep=0;
else
beep=1;
//显示
write_com(0x0c);
if(mode==0)//正常模式
{
disp[0]=hs/10+0x30;//硫化氢
disp[1]=hs%10+0x30;
disp[2]='%';
write_string(1,0,"H2S:");
write_string(1,4,disp);
disp[0]=nh3/10+0x30;//氨气
disp[1]=nh3%10+0x30;
disp[2]='%';
write_string(1,8,"NH3:");
write_string(1,12,disp);
disp[0]=ch4/10+0x30;//甲烷
disp[1]=ch4%10+0x30;
disp[2]='%';
write_string(2,0,"CH4:");
write_string(2,4,disp);
disp[0]=co/10+0x30;//一氧化碳
disp[1]=co%10+0x30;
disp[2]='%';
write_string(2,8,"CO:");
write_string(2,11,disp);
}
if(mode==1)//设置硫化氢
{
write_string(1,0,"H2S Set:");
disp[0]=hs_lim/10+0x30;
disp[1]=hs_lim%10+0x30;
disp[2]='%';
write_string(2,6,disp);
}
if(mode==2)//设置氨气
{
write_string(1,0,"NH3 Set:");
disp[0]=nh3_lim/10+0x30;
disp[1]=nh3_lim%10+0x30;
disp[2]='%';
write_string(2,6,disp);
}
if(mode==3)//设置甲烷
{
write_string(1,0,"CH4 Set:");
disp[0]=ch4_lim/10+0x30;
disp[1]=ch4_lim%10+0x30;
disp[2]='%';
write_string(2,6,disp);
}
if(mode==4)//设置一氧化碳
{
write_string(1,0,"CO Set:");
disp[0]=co_lim/10+0x30;
disp[1]=co_lim%10+0x30;
disp[2]='%';
write_string(2,6,disp);
}
}
TH0=0X3C;
TL0=0XB0;
}