当前位置: 首页 > news >正文

基于单片机甲醛浓度检测报警系统Proteus仿真(含全部资料)

  全套资料包含:Proteus仿真源文件+keil C语言源程序+AD原理图+流程图+元器件清单+说明书等

资料下载:

通过网盘分享的文件:资料分享
链接: 百度网盘 请输入提取码 提取码: tgnu


目录

资料下载:

Proteus仿真功能

项目文件资料:

一、Proteus仿真源文件

二、AD原理图文件

二、报告说明书

三、系统流程图

四、Keil c语言程序源代码


项目功能:

基于51单片机的甲醛浓度检测报警系统
由STC89C52单片机+ZE08-CH2O甲醛传感器+LCD1602液晶显示屏+按键+蜂鸣器+指示灯+电源构成
具体功能:1、甲醛传感器测得甲醛数据后经过单片机处理,由LCD1602实时显示;
②可通过按键设置甲醛报警阈值;
③测得的甲醛浓度超过报警阈值时,开始声光报警。


项目文件:

一、Proteus仿真源文件

​​

二、AD原理图文件

二、报告说明书

三、系统流程图

​​

四、器件清单

元件标号元件名称数量
C110uf电解电容1
C2, C330pf瓷片电容2
J1电源接口1
K1, K2, K3轻触按键3
L13mm 绿色led灯1
L23mm  红色led1
LS15V有源蜂鸣器1
P1LCD1602液晶显示屏+16P插座1
P2甲醛传感器ZE08-CH2O1
P34针排针1
PR110K排阻1
Q28550三极管1
R23K电阻1
R3330欧电阻1
R610K电阻1
R7, R101K电阻2
SW1自锁开关1
U1STC89C52单片机+DIP40插座1
Y211.0592M晶振1

五、Keil c语言程序源代码(部分)

/*
基于51单片机的甲醛浓度检测报警
设计人:讷言敏行
设计时间:2020.4.20
*/
#include<reg52.h>				 //头文件
#include<intrins.h>				 //头文件
#include"eeprom52.h"
#define uchar unsigned char		 //宏定义
#define uint unsigned int
#define LCD1602_dat P0
sbit 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
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_writebyte("mg/m3");	  //毫克每立方米
}void proc()   //超限处理
{if(ch2o/100>=ch2o_H)  //如果当前甲醛浓度超出甲醛浓度上限{led_1=1;		   //对应指示灯点亮led_2=0;beep1=0;		  //开启蜂鸣器报警}else	   //否则{led_1=0;	   //对应指示灯点亮led_2=1;beep1=1;	   //关闭蜂鸣器报警}
}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)}}
}               

六、全套资料包含

​​

七:项目资源获取

需要完整的资料可以点击下面的名片关注,回复“资料”!

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

http://www.xdnf.cn/news/1404757.html

相关文章:

  • 存储的未来之战:RustFS如何用ZK框架重构分布式协调?
  • L10 Function Calling与智能Agent开发
  • IC验证 AXI 项目(二)——断言
  • LeetCode - 21. 合并两个有序链表
  • 【前端教程】JavaScript 基础实战案例(5-10)
  • UE5多人MOBA+GAS 56、WSL + Docker 编排 Linux 服务器与 Windows 客户端
  • Linux基础1
  • AI融合高等教育:从通识到专业 - 学科+AI人才培养白皮书(上)
  • Linux查看Java进程PID、端口号和内存占用脚本
  • 【多项式】快速莫比乌斯变换(FMT)
  • ⭐CVPR2025 自动驾驶半监督 LiDAR 分割新范式:HiLoTs 框架深度解析
  • Python 数据分析:计算,分组统计2,df.groupby()和grouped.agg()。听故事学知识点怎么这么容易?
  • 告别图片处理焦虑:用imgix实现智能、实时且高效的视觉媒体交付(含案例、截图)
  • 一键掌控三线资源:极简 Shell 脚本实现 CPU·磁盘·内存可视化巡检
  • SRE命令行兵器谱之二:lsof - 解密“端口被占用”与“文件句柄泄漏”的终极侦探
  • MySQL-事务(下)-MySQL事务隔离级别与MVCC
  • 2021-11-10 C++不变初心数
  • ans1语法的一个例子nt5inf.cat
  • 详解Vue2、Vue3与React的Diff算法
  • TuringComplete游戏攻略(2.2存储器)
  • spark.sparkContext.broadcast() 与 org.apache.spark.sql.functions.broadcast 的区别
  • Docker实战避坑指南:从入门到精通
  • 神经网络激活函数:从ReLU到前沿SwiGLU
  • 分分合合,门模块方案又兴起了
  • 用更少的数据识别更多情绪:低资源语言中的语音情绪识别新方法
  • Vue生命周期、工程化开发和脚手架、组件化开发
  • hubert模型代码分析
  • 聚中原·贸全国·达世界,2026郑州台球展8月15至17举办
  • 深入解析Nginx常见模块1
  • 世界模型的典型框架与分类