基于51单片机无线温度报警控制器 NRF24L01 多路温度报警系统设计
一、系统方案
 1、本设计默认采用STC89C52单片机,如需更换单片机请联系客服。
 2、接收板LCD1602液晶实时显示当前检测的2点温度值以及对应的上下限报警值。发射板由DS18B20采集温度值,通过无线模块NRF24L01传给接收板。
 3、按键可以设置温度上下限值,超过阈值系统进行报警。
 4、带有继电器控制系统,当任一温度值超过上限,开启继电器1,模拟系统降温。当任一温度值低于下限,开启继电器2,模拟系统升温。
 
 二、硬件设计
 原理图如下:
 
三、单片机软件设计
 1、首先是系统初始化
 uchar RxBuf[20]={0};
 init_1602(); //1602液晶初始化函数
 init_NRF24L01();
 write_str("Start receiving ");
2、液晶显示程序
/延时函数,延时一毫秒****/
void delay(uint z)
 {
 uint x,y;
 for(x=112;x>0;x–)
 for(y=z;y>0;y–);
 }
/1602显示操作设置**/
void write_cmd(char cmd) //写指令函数
 {
 lcdrs=0;
 P0=cmd;
 delay(1);
 lcden=1;
 delay(1);
 lcden=0;
 }
void write_data(uchar dat) //写数据函数
 {
 lcdrs=1;
 P0=dat ;
 delay(1);
 lcden=1;
 delay(1);
 lcden=0;
 }
void write_str(uchar *str)//写字符串函数
 {
 while(*str!=‘\0’)
 {
 write_data(*str++);
 delay(1);
 }
 }
void init_1602() //1602液晶显示器的初始化设置
 {
 lcdrw=0;
 lcden=0;
 write_cmd(0x38); //显示模式设置 
 write_cmd(0x0c); //显示开关,光标关闭
 write_cmd(0x06); //显示光标移动设置
 write_cmd(0x01); //清除屏幕
 write_cmd(0x80); //数据指针移到第一行第一个位置
 }
 3、按键程序
 void keyscan() //按键扫描
 {
 if(K10) 
 {
 delay(5); //按键消除抖动判断
 if(K10)
 {
 keyflag_1++; //键一按下,标志位加一
 while(!K1);
 } 
 }
 if(keyflag_15){keyflag_1=0;write_cmd(0x0c);}
 if(keyflag_11){write_cmd(0x8a);write_cmd(0x0d);} //温度1下限末位打开光标
 if(keyflag_12){write_cmd(0x8f);write_cmd(0x0d);} //温度1上限末位打开光标
 if(keyflag_13){write_cmd(0xca);write_cmd(0x0d);} //温度2下限末位打开光标
 if(keyflag_14){write_cmd(0xcf);write_cmd(0x0d);} //温度2上限末位打开光标
 if(keyflag_1!=0)
 { 
 if(K20) //限值加键
 { 
 delay(5); //按键消除抖动判断
 if(K20)
 {
 while(!K2); 
 if(keyflag_11) //下限值加一
 {
 tem_l1++;
 if(tem_l1100)tem_l1=0;
 write_cmd(0x89);
 write_data(tem_l1/10+48);
 write_data(tem_l1%10+48);
 }
 if(keyflag_12) //上限值加一
 {
 tem_h1++;
 if(tem_h1==100)tem_h1=0;
 write_cmd(0x8e);
 write_data(tem_h1/10+48);
 write_data(tem_h1%10+48); 
 }
			if(keyflag_1==3)		//下限值加一{tem_l2++;if(tem_l2==100)tem_l2=0;write_cmd(0xc9);write_data(tem_l2/10+48);write_data(tem_l2%10+48);}if(keyflag_1==4){tem_h2++;if(tem_h2==100)tem_h2=0;             write_cmd(0xce);write_data(tem_h2/10+48);write_data(tem_h2%10+48);						 }}} if(K3==0)		  ///限值减键{delay(5);    //按键消除抖动判断if(K3==0){while(!K3);if(keyflag_1==1)			//下限值减一{tem_l1--;if(tem_l1==0)tem_l1=99;write_cmd(0x89);write_data(tem_l1/10+48);write_data(tem_l1%10+48);}if(keyflag_1==2)			  //上限值减一{tem_h1--;if(tem_h1==0)tem_h1=99;             write_cmd(0x8e);write_data(tem_h1/10+48);write_data(tem_h1%10+48);						 }if(keyflag_1==3)			//下限值减一{tem_l2--;if(tem_l2==0)tem_l2=99;write_cmd(0xc9);write_data(tem_l2/10+48);write_data(tem_l2%10+48);}if(keyflag_1==4)			  //上限值减一{tem_h2--;if(tem_h2==0)tem_h2=99;             write_cmd(0xce);write_data(tem_h2/10+48);write_data(tem_h2%10+48);						 }}} 										
}	
}
4、核心算法程序
 void baojing() //报警判断函数
 {
 if(wendu1<=(tem_h110)&&wendu1>=(tem_l110)&&wendu2<=(tem_h210)&&wendu2>=(tem_l210)) //两个温度为正常值
 {D1=D2=D3=D4=1;BELL=1;} //灯全灭 蜂鸣器不响
if(wendu1>(tem_h1*10))   //温度1大于设定上限值{D1=0;BELL=0;} //D1灯亮  蜂鸣器响  
else {D1=1;}	    
if(wendu1<(tem_l1*10))   //温度1低于下限值{D2=0;BELL=0;} //D2灯亮  蜂鸣器响 
else {D2=1;}	  if(wendu2>(tem_h2*10))   //温度2大于设定上限值{D3=0;BELL=0;} //D3灯亮  蜂鸣器响 
else {D3=1;}		     
if(wendu2<(tem_l2*10))   //温度2低于下限值{D4=0;BELL=0;} //D4灯亮  蜂鸣器响 
else {D4=1;}	
if((wendu1>(tem_h110))||(wendu2>(tem_h210)))
 jdq1=0;
 else
 jdq1=1;
 if((wendu1<(tem_l110))||(wendu2<(tem_l210)))
 jdq2=0;
 else
 jdq2=1;
}
 四、proteus仿真设计
 Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
 
相关文章:
 
基于51单片机无线温度报警控制器 NRF24L01 多路温度报警系统设计
一、系统方案 1、本设计默认采用STC89C52单片机,如需更换单片机请联系客服。 2、接收板LCD1602液晶实时显示当前检测的2点温度值以及对应的上下限报警值。发射板由DS18B20采集温度值,通过无线模块NRF24L01传给接收板。 3、按键可以设置温度上下限值&…...
Spring Data JPA的@Entity注解
一、示例说明 rules\CouponTypeConverter.java Converter public class CouponTypeConverterimplements AttributeConverter<CouponType, String> {Overridepublic String convertToDatabaseColumn(CouponType couponCategory) {return couponCategory.getCode();}Overr…...
 
CANoe panel中,Path Dialog如何保存选择的文件路径
这里写目录标题 Path Dialog控件的设置系统变量和环境变量 Path Dialog控件的设置 过滤加载的文件类型 填写格式为:Hex file |.hex 其中Hex file为自定义name,.hex为你想识别的文件类型 系统变量和环境变量 系统变量:在canoe的Environmen…...
 
关于es中索引,倒排索引的理解
下面是我查询进行理解的东西 也就是说我们ES中的索引就相当于我们mysql中的数据库表,索引库就相当于我们的数据库,我们按照mapping规则会根据相应的字段(index为true默认)来创建倒排索引,这个倒排索引就相当于我们索引…...
 
k8s service (二)
K8s service (二) Endpoint Endpoint是kubernetes中的一个资源对象,存储在etcd中,用来记录一个service对应的所有pod访问地址,它是根据service匹配文件中selector描述产生的。 一个Service由一组Pod组成,这些Pod通过Endpoints…...
 
桌面软件开发框架 Electron、Qt、WPF 和 WinForms 怎么选?
一、Electron Electron 是一个基于 Web 技术的跨平台桌面应用程序开发框架。它使用 HTML、CSS 和 JavaScript 来构建应用程序界面,并借助 Chromium 渲染引擎提供强大的页面渲染能力。Electron 的主要特点包括: 跨平台:Electron 可以在 Windows、macOS 和 Linux 等多个主流操…...
 
SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第二天)Mybatis的深入学习
SSM框架的学习与应用(Spring Spring MVC MyBatis)-Java EE企业级应用开发学习记录(第二天)Mybatis的深入学习(增删改查的操作) 上一篇我们的项目搭建好了,也写了简答的Junit测试类进行测试,可以正确映射…...
 
学习笔记:Opencv实现限制对比度得自适应直方图均衡CLAHE
2023.8.19 为了完成深度学习的进阶,得学习学习传统算法拓展知识面,记录自己的学习心得 CLAHE百科: 一种限制对比度自适应直方图均衡化方法,采用了限制直方图分布的方法和加速的插值方法 clahe(限制对比度自适应直方图…...
 
R语言处理缺失数据(1)-mice
#清空 rm(listls()) gc()###生成模拟数据### #生成100个随机数 library(magrittr) set.seed(1) asd<-rnorm(100, mean 60, sd 10) %>% round #平均60,标准差10 #将10个数随机替换为NA NA_positions <- sample(1:100, 10) asd[NA_positions] <- NA #转…...
 
SpringBoot自动配置原理
Spring Boot 的自动配置可以根据添加的jar依赖,自动配置 Spring Boot 应用程序。例如,我们想要使用Redis,直接在POM文件中增加spring-boot-starter-data-redis依赖,然后我们配置下连接信息就可以使用了。 那么Spring Boot 是如何…...
 
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 五)
管理应用拥有的状态概述 LocalStorage:页面级UI状态存储 LocalStorage是页面级的UI状态存储,通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility内,页面间共享状态。 本文仅介绍LocalStora…...
Java基础篇——反射枚举
反射&枚举 课程目标 1. 【理解】类加载器 2. 【理解】什么是反射 3. 【掌握】获取Class对象的三种方式 4. 【掌握】反射获取构造方法并创建对象 5. 【掌握】反射获取成员变量并使用 6. 【掌握】反射获取成员方法并使用 7. 【掌握】反射综合案例 8. 【理解】枚举B友:http…...
每日一学——案例难点Windows配置
在Windows上配置DNS服务器有几个步骤: 步骤1:打开网络连接设置 在任务栏上右键单击网络图标,并选择“打开网络和Internet设置”。 在新窗口中,选择“更改适配器选项”。 在打开的窗口中,找到正在使用的网络适配器&a…...
2023.8 - java - 运算符
Java 运算符 算术运算符关系运算符位运算符逻辑运算符赋值运算符其他运算符 算术运算符 算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。 表格中的实例假设整数变量A的值为10,变量B的值为20: …...
推荐三款Scrum敏捷项目管理工具/敏捷管理实践
免费版敏捷工具推荐: Leangoo领歌 Leangoo领歌是ScrumCN(scrum.cn)旗下的一款永久免费的专业敏捷开发管理工具,提供端到端敏捷研发管理解决方案,涵盖敏捷需求管理、任务协同、进展跟踪、缺陷管理、统计度量等。包括小…...
WARNING: undefined behavior - version of Delve is too old for Go version
在更新了 go 版本后,使用 goland 进行调试会报错 WARNING: undefined behavior - version of Delve is too old for Go version 1.20.5 (maximum supported version 1.19)这是因为 go 的版本升级后,相对 dlv 的版本就低了。 所以解决办法就是升级对应的…...
 
https非对称加密算法
非对称加密算法原理 在客户端公开公钥,服务端保存私钥 1.客户端第一次请求先请求443端口,从443端口下载公钥。 2.客户端将数据进行公钥算法进行加密,将秘文发送到服务端 服务端收到秘文后,通过私钥算法进行解密得到明文数据。…...
“深入探索JVM:Java虚拟机背后的奥秘“
标题:深入探索JVM:Java虚拟机背后的奥秘 摘要:本文将深入探索Java虚拟机(JVM)的内部工作原理和关键组成部分,揭示JVM背后的奥秘。通过对类加载机制、内存管理、垃圾回收、即时编译等方面的详细介绍&#x…...
树莓派系统入门教程(三)—— 使用Windows上的VSCode远程连接树莓派进行Python开发
树莓派系统入门教程(三)—— 使用Windows上的VSCode远程连接树莓派进行Python开发 1. 安装VSCode和SSH扩展2. SSH连接配置3. 连接到树莓派4. 运行Python程序5. 建议和注意事项 很多开发者更喜欢在大屏幕和强大的开发环境中编写代码,但同时他们…...
 
如何使用HTML5新增的标签来优化SEO?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用HTML5新增的标签来优化SEO?⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
 
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
 
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
 
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
