加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

基于51单片机的二氧化碳(CO2)气体浓度监测报警系统

08/22 13:31
2754
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
    • 基于51单片机的二氧化碳(CO2)气体浓度监测报警系统( proteus仿真+程序+演示视频)
  • 相关文件
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

基于51单片机的二氧化碳(CO2)气体浓度监测报警系统( proteus仿真+程序+演示视频)

仿真图proteus 8.9

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:C0073

主要功能:

结合实际情况,基于51单片机设计一个二氧化碳(CO2)监测报警系。该系统应满足的功能要求为:

二氧化碳传感器,运行状态LED显示、独立键盘、蜂鸣器报警。

演示视频:


C0073 51单片机二氧化碳(CO2)气体浓度监测报警系统

具体功能:

①二氧化碳传感器测得二氧化碳数据后经过单片机处理,由LCD1602实时显示,第一行显示测得的浓度值,第二行显示报警阈值;

②可通过按键设置二氧化碳报警阈值,开始之后预设值闪烁,按键+预设值+10,按键减按下预设值-10;

③测得的二氧化碳浓度在正常范围时,绿灯亮,超过报警阈值时,红灯亮,蜂鸣器响,开始声光报警。

以下为本设计展示图:

仿真(提供源文件)

主图

img

开始仿真

img

开始仿真显示检测值C02为1260ppm,初始化报警值为1500ppm。

img

img

按下调整按键后,系统暂停工作,报警值十位数闪烁,按下报警上限+按键,报警值+10,按下按下报警上限-按键,报警值-10。设置完成后,再按一下调整按键,确定调整的报警值,系统正常工作。

img

在仿真中,可以通过箭头调整CO2气体传感器数值,图示设置为2050ppm,超出了设置的报警值1480,超出上限开始报警,蜂鸣器持续短鸣,红灯闪烁。

程序(提供源文件源码):

img

img

AD转换子程序

/****************************************************************************
函数功能:AD转换子程序
入口参数:CH
出口参数:dat
****************************************************************************/
unsigned char adc0832(unsigned char CH)
{
	unsigned char i,test,adval;
	adval = 0x00;
	test = 0x00;
	Clk = 0;       //初始化
	DATI = 1;
	_nop_();
	CS = 0;
	_nop_();
	Clk = 1;
	_nop_();
	
	
	if ( CH == 0x00 )      //通道选择
	{
		Clk = 0;
		DATI = 1;      //通道0的第一位
		_nop_();
		Clk = 1;
		_nop_();
		Clk = 0;
		DATI = 0;      //通道0的第二位
		_nop_();
		Clk = 1;
		_nop_();
	} 
	else
	{
		Clk = 0;
		DATI = 1;      //通道1的第一位
		_nop_();
		Clk = 1;
		_nop_();
		Clk = 0;
		DATI = 1;      //通道1的第二位
		_nop_();
		Clk = 1;
		_nop_();
	}
	
	Clk = 0;
	DATI = 1;
	for( i = 0;i < 8;i++ )      //读取前8位的值
	{
		_nop_();
		adval <<= 1;
		Clk = 1;
		_nop_();
		Clk = 0;
		if (DATO)
		adval |= 0x01;
		else
		adval |= 0x00;
	}
	for (i = 0; i < 8; i++)      //读取后8位的值
	{
		test >>= 1;
		if (DATO)
		test |= 0x80;
		else 
		test |= 0x00;
		_nop_();
		Clk = 1;
		_nop_();
		Clk = 0;
	}
	if (adval == test)      //比较前8位与后8位的值,如果不相同舍去。若一直出现显示为零,请将该行去掉
	dat = test;
	nop_();
	CS = 1;        //释放ADC0832
	DATO = 1;
	Clk = 1;
	return dat;
}

获取的值需要进行校准

void AlcoholCalibration(void)     //CO2浓度初始化校准函数
{
	sum = 0;
	for(m=0;m<50;m++)			//读50次AD值
	{
		sum = adc0832(0)+sum;		//读到的AD值,将读到的数据累加到sum
	}
	temp=sum/50;				//跳出上面的for循环后,将累加的总数除以50得到平均值temp
	K_ZERO = 500 * temp / 256;        //8位ADC,首先得到电压值,单位10毫伏
	Display_1602(0,WARNING);	 //显示AD数值和报警值
}

主函数

void main()				//主函数
{
	Init1602();						 //初始化液晶函数
	init();							 //初始化定时器
	while(1)						 //进入循环
	{
		for(m=0;m<50;m++)			//读50次AD值
		sum = adc0832(0)+sum;		//读到的AD值,将读到的数据累加到sum
		temp=sum/50;				//跳出上面的for循环后,将累加的总数除以50得到平均值temp
		if (temp > K_ZERO) 
				temp = temp - K_ZERO;              //首先减去零点漂移,一般是130mV
		else
				temp= 0; 
		sum=0; 						//平均值计算完成后,将总数清零
		if(set==0)					 //set为0,说明现在不是设置状态
		Display_1602(temp,WARNING);	 //显示AD数值和报警值
		if(temp<WARNING&&set==0)	 //AD数值小于报警值
		{
			flag=0;					 //关闭报警
		}
		else if(temp>WARNING&&set==0)//AD值大于报警值
		{
			flag=1;					 //打开报警
		}
		Key();						 //调用按键函数
	}
}

资料清单(提供资料清单所有文件):

资料下载链接
搜索设计编号:C0073
img

  • 设计资料获取联系方式.doc

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
NC7SZ04P5X 1 Fairchild Semiconductor Corporation Inverter, LVC/LCX/Z Series, 1-Func, 1-Input, CMOS, PDSO5, 1.25 MM, EIAJ, SC-88A, SC-70, 5 PIN
$0.32 查看
PE4312C-Z 1 Peregrine Semiconductor Corp SPECIALTY TELECOM CIRCUIT, QCC20, QFN-20

ECAD模型

下载ECAD模型
$9.21 查看
KSZ9893RNXI 1 Microchip Technology Inc Ethernet Transceiver

ECAD模型

下载ECAD模型
$10.79 查看

相关推荐

电子产业图谱