基于51单片机甲醛浓度检测设计

基于51单片机甲醛浓度检测设计

(仿真+程序+原理图+PCB+设计报告)

功能介绍

具体功能:

1.甲醛浓度数据经过单片机处理,由LCD1602实时显示。

2.可通过按键设置甲醛报警阈值,并在LCD1602显示。

3.当甲醛浓度超过报警阈值时,进行声光报警。

​演示视频:

基于51单片机甲醛浓度检测设计—串口通信

#include<reg52.h>				 //头文件#include<intrins.h>				 //头文件
#include"eeprom52.h"
#define uchar unsigned char		 //宏定义
#define uint unsigned int
#define LCD1602_dat P0sbit LCD1602_rs=P2^5;//IO 定义
sbit LCD1602_rw=P2^6;
sbit LCD1602_e=P2^7;
sbit beep=P2^0;	   //蜂鸣器IO
sbit led_1=P1^0;	 //指示灯IO
sbit led_2=P1^1;
sbit key_1=P1^2;	//按键控制IO
sbit key_2=P1^3;uint ch2o_H,ch2o;	 //甲醛上限变量,   甲醛浓度变量
uchar bz,ms,sec,UART_dat[10],zhi[2],i;	 //暂存数据切换变量, 50模式 变量,  串口暂存数据数组,甲醛浓度高、低位数组, 循环变量
bit beep1;/********************************************************************
* 名称 : delay()
* 功能 : 小延时。													 
* 输入 : 无
* 输出 : 无
***********************************************************************/void delay(uint T)					  //延时函数
{while(T--);
}/********************************************************************
* 名称 : LCD1602_write(uchar order,dat)
* 功能 : 1602写如数据函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void LCD1602_write(uchar order,dat)				  //1602 一个字节  处理
{LCD1602_e=0;LCD1602_rs=order;LCD1602_dat=dat;LCD1602_rw=0;LCD1602_e=1;delay(1);LCD1602_e=0;																								     
}
/********************************************************************
* 名称 : LCD1602_writebye(uchar *prointer)
* 功能 : 1602写入数据函数  指针式
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void LCD1602_writebyte(uchar *prointer)				   //1602 字符串    处理
{while(*prointer!='\0'){LCD1602_write(1,*prointer);prointer++;}
}
/********************************************************************
* 名称 : LCD1602_cls()
* 功能 : 初始化1602液晶 
* 输入 : 无
* 输出 : 无
***********************************************************************/
void LCD1602_cls()									 //1602 初始化
{LCD1602_write(0,0x01);     //1602 清屏 指令delay(1500);LCD1602_write(0,0x38);     // 功能设置 8位、5*7点阵delay(1500);LCD1602_write(0,0x0c);     //设置 光标   不显示开关、不显示光标、字符不闪烁LCD1602_write(0,0x06);LCD1602_write(0,0xd0);delay(1500);
}void show()			//显示数据
{LCD1602_write(0,0x80);LCD1602_writebyte("CH2O:");  	  //显示当前的甲醛浓度值LCD1602_write(1,0x30+ch2o/10000%10);LCD1602_writebyte(".");LCD1602_write(1,0x30+ch2o/1000%10);LCD1602_write(1,0x30+ch2o/100%10);LCD1602_write(1,0x30+ch2o/10%10);LCD1602_write(1,0x30+ch2o%10);LCD1602_writebyte("mg/m3");LCD1602_write(0,0xc0);LCD1602_writebyte("CH2O_H:");	  //显示甲醛上限值LCD1602_write(1,0x30+ch2o_H/100%10);LCD1602_writebyte(".");LCD1602_write(1,0x30+ch2o_H/10%10);LCD1602_write(1,0x30+ch2o_H%10);LCD1602_writebyte("mg/m3");	  //毫克每立方米
}void proc()   //超限处理
{if(ch2o/100>ch2o_H)  //如果当前甲醛浓度超出甲醛浓度上限{led_1=1;			   //对应指示灯点亮led_2=0;	beep1=1;			  //开启蜂鸣器报警}else	   //否则{led_1=0;	   //对应指示灯点亮led_2=1;beep1=0;	   //关闭蜂鸣器报警}
}void key()
{if(!key_1)   //判断按下{ms=sec=0;delay(888);   //按键延时去抖if(!key_1)  //判断按下{if(ch2o_H<700)ch2o_H++;ms=sec=0;	  //清楚按键按下计时  重新计时while(!key_1)	 //按键判断释放{show();proc();}SectorErase(0x2000);	 //保存上限值byte_write(0x2000,ch2o_H/256);byte_write(0x2001,ch2o_H%256);	}}if(!key_2)    //判断按下{ms=sec=0;delay(888);  //按键延时去抖if(!key_2)  //判断按下{if(ch2o_H>0) ch2o_H--;ms=sec=0;while(!key_2)	//按键判断释放{show();proc();}SectorErase(0x2000);	 //保存上限值byte_write(0x2000,ch2o_H/256);byte_write(0x2001,ch2o_H%256);}}}void main()
{uchar h,l;LCD1602_cls();	  //LCD 1602   调用初始化程序TMOD=0x21;	//配置定时TH0=0x4c;		//50ms  定时赋值TL0=0x00;ET0=1;TR0=1;TH1=0xfd;		//串口波特率定时初始TL1=0xfd;SCON=0x50;	//只发送EA=1;		//打开定时总中断ES=1;		//打开串口中断				TR1=1;h=byte_read(0x2000);l=byte_read(0x2001);   //读取保存的数据ch2o_H=h*256+l;if(ch2o_H>700)ch2o_H=80;while(1){show();		 //显示函数key();		 //按键处理程序proc();		 //超限处理程序}
}void UART_1() interrupt 1 
{TH0=0x4c;TL0=0x00;ms++;if(ms%2==0)   //长按按键计数处理{if(sec>1){if(!key_1)	//设置按键长按处理{if(ch2o_H<700)ch2o_H++;}if(!key_2){if(ch2o_H>0) ch2o_H--;}}}if(ms%10==0){if(beep1==1)	//蜂鸣器报警处理{beep=!beep;}else{beep=1;}}if(ms>19)	   //1s 定时{ms=0;sec++;}
} void UART_4() interrupt 4 //处理接收的串口数据
{if(RI){RI=0;   //RI 置0UART_dat[bz]=SBUF;	  //暂存串口数据switch(bz){case 0:if(UART_dat[bz]==0xFF){bz=1;}else{bz=0; }break;case 1:if(UART_dat[bz]==0x17){bz=2;}else{bz=0; }break;case 2:if(UART_dat[bz]==0x04){bz=3;}else{bz=0;  }break;case 3:if(UART_dat[bz]==0x00){bz=4; }else{bz=0; }break;case 4:bz=5;   break;case 5:bz=6; break;case 6:if(UART_dat[bz]==0x13){bz=7;   }else{bz=0; }break;case 7:if(UART_dat[bz]==0x88){bz=8;  }else{bz=0; }break;case 8:  //校验接收的数据  正确则处理接收的数据if((UART_dat[bz]+UART_dat[1]+UART_dat[2]+UART_dat[3]+UART_dat[4]+UART_dat[5]+UART_dat[6]+UART_dat[7])%256==0){ch2o=UART_dat[4]*256+UART_dat[5];ch2o=ch2o*13.392857;bz=0;}else{bz=0;   }break;}}
}               

硬件设计

使用元器件:

单片机:STC89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

10uf电解电容;30pf瓷片电容;

电源接口;轻触按键;

3mm 绿色led灯;3mm 红色led灯;

5V有源蜂鸣器;4针排针;

LCD1602液晶显示屏+16P插座;

甲醛传感器ZE08-CH2O;

10K排阻;8550三极管;

3K电阻;330欧电阻;

10K电阻;1K电阻;

自锁开关;11.0592M晶振;

STC89C52单片机+DIP40插座;

导线:若干;

流程图:

设计资料

01 仿真图

本设计使用proteus7.8和proteus8.9两个版本设计,向下兼容,无需担心!具体如图!

02 原理图

本系统原理图采用Altium Designer19设计,具体如图!

03 程序

本设计使用软件keil4和keil5两个版本编程设计,无需担心!具体如图!

04 设计报告

七千字设计报告,具体如下!

05 设计资料

        资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)、AD原理图、pcb电路图、开题报告、参考论文、流程图、任务书、视频讲解等。具体内容如下,全网最全! !

资料获取请观看前面演示视频!

点赞分享一起学习成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/787604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3568驱动指南|第十四篇 单总线-第158章DS18B20编写字符设备驱动框架

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

鸿蒙原生应用开发-网络管理HTTP数据请求

一、场景介绍 应用通过HTTP发起一个数据请求&#xff0c;支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 二、接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 涉及的接口如下表&#xff0c;具体的…

【pytest】fixture机制

目录 概念fixture 的主要特点测试场景1. 准备和清理测试数据2. 模拟外部依赖3. 共享资源&#xff08;如数据库连接&#xff09;4. 使用内置 fixture5. 自动使用 fixture 用途 概念 fixture机制是pytest测试框架中的一个核心概念&#xff0c;它提供了一种用于处理测试所需资源的…

vim中如何使用Vundle插件管理器?

本文结构&#xff1a; a、简介 b、安装 c、用法举例 a、Vundle是一个Vim插件管理器&#xff0c;它极大地简化了Vim插件的安装、更新和卸载过程。Vundle通过简化Vim插件的管理过程&#xff0c;帮助用户更高效地定制他们的Vim编辑环境。 b、安装Vundle Vundle的安装通常是通…

鸿蒙OS元服务开发:【WebGL网页图形库开发概述】

WebGL的全称为Web Graphic Library(网页图形库)&#xff0c;主要用于交互式渲染2D图形和3D图形。目前HarmonyOS中使用的WebGL是基于OpenGL裁剪的OpenGL ES&#xff0c;可以在HTML5的canvas元素对象中使用&#xff0c;无需使用插件&#xff0c;支持跨平台。WebGL程序是由JavaScr…

HBase报错:Master is initializing

现象&#xff1a;org.apache.hadoop.hbase.PleaseHoldException: Master is initializing 描述&#xff1a;在启动HBase之后进入bin/hbase shell 命令行进行一些操作&#xff0c;比如建表或者添加数据到表中出现这种报错org.apache.hadoop.hbase.PleaseHoldException: Master …

《信息技术服务 智能运维 第2部分:数据治理》国家标准2024年第一次线下编写会议成功召开

2024年3月13日~15日&#xff0c;由运维数据治理国标编制组主办的运维数据治理国家标准2024年第一次编写工作会议在上海成功召开。 本次会议由云智慧&#xff08;北京&#xff09;科技有限公司承办&#xff0c;来自南网数字集团信通公司、太保科技、平安银行、广发银行、广东农…

LeetCode:1997. 访问完所有房间的第一天(DP Java)

目录 1997. 访问完所有房间的第一天 题目描述&#xff1a; 实现代码与解析&#xff1a; DP 原理思路&#xff1a; 1997. 访问完所有房间的第一天 题目描述&#xff1a; 你需要访问 n 个房间&#xff0c;房间从 0 到 n - 1 编号。同时&#xff0c;每一天都有一个日期编号&…

hadoop3.0 非高可用安装

伪分布式集群&#xff0c;不依赖zookeeper的hadoop集群 只有namenode, 和datanode, 可以有两个namenode. 没有zookeeper, 没有zkfc, 没有journalnode. 只在学习的时候使用, 生存环境不适用 . 生产环境用的高可用集群见 https://blog.csdn.net/weijiqian/article/details/13715…

什么是AIGC,AIGC的应用领域有哪些,以及对AIGC的未来展望有什么值得关注的方向

AIGC:人工智能生成内容的深度解析 在数字技术的浪潮中,AIGC(ArtificialIntelligenceGeneratedContent,人工智能生成内容)逐渐崭露头角,成为继专业生产内容(PGC)和用户生产内容(UGC)之后的新型内容创作方式。它不仅改变了内容生产的传统模式,更在多个行业中展现出…

QA测试开发工程师面试题满分问答6: 如何判断接口功能正常?从QA的角度设计测试用例

判断接口功能是否正常的方法之一是设计并执行相关的测试用例。下面是从测试QA的角度设计接口测试用例的一些建议&#xff0c;包括功能、边界、异常、链路、上下游和并发等方面&#xff1a; 通过综合考虑这些测试维度&#xff0c;并设计相应的测试用例&#xff0c;可以更全面地评…

蓝桥杯第十五届抱佛脚(七)前缀和与差分

蓝桥杯第十五届抱佛脚&#xff08;七&#xff09;前缀和与差分 前缀和 前缀和算法是一种在数组处理中非常有效的技术&#xff0c;特别是当需要频繁查询某个固定区间内的元素和时。这种算法可以在 O(N) 的时间内预处理数组&#xff0c;并且能在 O(1) 的时间内回答区间和的查询…

CCF-B推荐会议 ICSME’24 4月11日截稿 速来参与

会议之眼 快讯 第40届ICSME 2024 (IEEE International Conference on Software Maintenance and Evolution)即IEEE软件维护与发展国际会议将于 2024 年 10月6日-11日在美国弗拉格斯塔夫阿兹举行&#xff01;ICSME是学术界、工业界和政府研究人员和从业者的首要国际论坛&#x…

阿里AI编码助手“通义灵码”安装及使用

1.介绍 “通义灵码”是一款基于阿里云通义代码大模型打造的智能编码助手&#xff0c;产品于2023年10月31日云栖大会上&#xff0c;正式对外发布。 核心使用场景&#xff1a;代码智能生成和研发智能问答。 主要功能点&#xff1a; &#xff08;1&#xff09;行级/函数级实时…

BPMN的发展及简介

背景 BPM“通过建模、自动化、管理和优化流程&#xff0c;打破跨部门跨系统业务过程依赖、打破信息孤岛&#xff0c;提高业务效率和效果”&#xff0c;通俗一点讲&#xff0c;就是工作流引擎。在进行流程设计时&#xff0c;需要将流程的元素进行定义&#xff0c;并按照一定的格…

PSDK 102S V3:航测领域的革新者

在航测领域&#xff0c;精确、高效的数据获取一直是行业追求的目标。PSDK 102S V3&#xff0c;作为SHAR三赛尔推出的一款高性能倾斜摄影相机&#xff0c;凭借其先进的技术和卓越的性能&#xff0c;正在成为航测领域的革新者。 自研三轴智能稳定云台&#xff1a;PSDK 102S V3配备…

Canal1.1.5整Springboot在MQ模式和TCP模式监听mysql

canal本实验使用的是1.1.5&#xff0c;自行决定版本&#xff1a;[https://github.com/alibaba/canal/releases] canal 涉及的几个角色 canal-admin&#xff1a;canal 后台管理系统&#xff0c;管理 canal 服务canal-deployer&#xff1a;即canal-server&#xff08;客户端&…

安装客户端pymilvus

pymilvus简介 PyMilvus 是 Milvus 的 Python SDK。 安装pymilvus 参考文档: https://milvus.io/api-reference/pymilvus/v2.3.x/About.md安装pymilvus需要先安装python环境&#xff0c;这里使用conda。 pip install pymilvusv2.3.7查看安装了哪些包: conda list -n py311…

专升本-大数据

大数据定义&#xff1a; 大数据指无法在可承受的时间范围内用常规软件工具进行捕捉&#xff0c;管理和处理的数据集合。是需要新处理模式才能具有更强的决策力&#xff0c;洞察发现力和流程优化能力的海量&#xff0c;高增长率和多样化的信息资产 大数据数据源的分类(3种)&am…

市场瞭望杂志市场瞭望杂志社市场瞭望编辑部2024年第2期目录

福山福水 拼经济&#xff0c;2024福建这样布局 林先昌 ;谢何平 ;余燕芳 ;陈强 ;王茜 ;刘星; 3-5 财经搜要 人民银行宣布“降准定向降息” 6《市场瞭望》投稿&#xff1a;cnqikantg126.com 两部门印发《意见》促进制造业中试创新发展 6 首部《中国企业信用年鉴》…