基于51单片机的报警器(模拟量,4路,ADC0832)

基于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;
}
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cqtianxingkeji

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值