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

基于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(K1
0)
{
keyflag_1++; //键一按下,标志位加一
while(!K1);
}
}
if(keyflag_15){keyflag_1=0;write_cmd(0x0c);}
if(keyflag_1
1){write_cmd(0x8a);write_cmd(0x0d);} //温度1下限末位打开光标
if(keyflag_12){write_cmd(0x8f);write_cmd(0x0d);} //温度1上限末位打开光标
if(keyflag_1
3){write_cmd(0xca);write_cmd(0x0d);} //温度2下限末位打开光标
if(keyflag_14){write_cmd(0xcf);write_cmd(0x0d);} //温度2上限末位打开光标
if(keyflag_1!=0)
{
if(K2
0) //限值加键
{
delay(5); //按键消除抖动判断
if(K20)
{
while(!K2);
if(keyflag_1
1) //下限值加一
{
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_1
2) //上限值加一
{
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单片机&#xff0c;如需更换单片机请联系客服。 2、接收板LCD1602液晶实时显示当前检测的2点温度值以及对应的上下限报警值。发射板由DS18B20采集温度值&#xff0c;通过无线模块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控件的设置 过滤加载的文件类型 填写格式为&#xff1a;Hex file |.hex 其中Hex file为自定义name&#xff0c;.hex为你想识别的文件类型 系统变量和环境变量 系统变量&#xff1a;在canoe的Environmen…...

关于es中索引,倒排索引的理解

下面是我查询进行理解的东西 也就是说我们ES中的索引就相当于我们mysql中的数据库表&#xff0c;索引库就相当于我们的数据库&#xff0c;我们按照mapping规则会根据相应的字段&#xff08;index为true默认&#xff09;来创建倒排索引&#xff0c;这个倒排索引就相当于我们索引…...

k8s service (二)

K8s service (二) Endpoint Endpoint是kubernetes中的一个资源对象&#xff0c;存储在etcd中&#xff0c;用来记录一个service对应的所有pod访问地址&#xff0c;它是根据service匹配文件中selector描述产生的。 一个Service由一组Pod组成&#xff0c;这些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企业级应用开发学习记录&#xff08;第二天&#xff09;Mybatis的深入学习&#xff08;增删改查的操作&#xff09; 上一篇我们的项目搭建好了&#xff0c;也写了简答的Junit测试类进行测试&#xff0c;可以正确映射…...

学习笔记:Opencv实现限制对比度得自适应直方图均衡CLAHE

2023.8.19 为了完成深度学习的进阶&#xff0c;得学习学习传统算法拓展知识面&#xff0c;记录自己的学习心得 CLAHE百科&#xff1a; 一种限制对比度自适应直方图均衡化方法&#xff0c;采用了限制直方图分布的方法和加速的插值方法 clahe&#xff08;限制对比度自适应直方图…...

R语言处理缺失数据(1)-mice

#清空 rm(listls()) gc()###生成模拟数据### #生成100个随机数 library(magrittr) set.seed(1) asd<-rnorm(100, mean 60, sd 10) %>% round #平均60&#xff0c;标准差10 #将10个数随机替换为NA NA_positions <- sample(1:100, 10) asd[NA_positions] <- NA #转…...

SpringBoot自动配置原理

Spring Boot 的自动配置可以根据添加的jar依赖&#xff0c;自动配置 Spring Boot 应用程序。例如&#xff0c;我们想要使用Redis&#xff0c;直接在POM文件中增加spring-boot-starter-data-redis依赖&#xff0c;然后我们配置下连接信息就可以使用了。 那么Spring Boot 是如何…...

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 五)

管理应用拥有的状态概述 LocalStorage&#xff1a;页面级UI状态存储 LocalStorage是页面级的UI状态存储&#xff0c;通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility内&#xff0c;页面间共享状态。 本文仅介绍LocalStora…...

Java基础篇——反射枚举

反射&枚举 课程目标 1. 【理解】类加载器 2. 【理解】什么是反射 3. 【掌握】获取Class对象的三种方式 4. 【掌握】反射获取构造方法并创建对象 5. 【掌握】反射获取成员变量并使用 6. 【掌握】反射获取成员方法并使用 7. 【掌握】反射综合案例 8. 【理解】枚举B友:http…...

每日一学——案例难点Windows配置

在Windows上配置DNS服务器有几个步骤&#xff1a; 步骤1&#xff1a;打开网络连接设置 在任务栏上右键单击网络图标&#xff0c;并选择“打开网络和Internet设置”。 在新窗口中&#xff0c;选择“更改适配器选项”。 在打开的窗口中&#xff0c;找到正在使用的网络适配器&a…...

2023.8 - java - 运算符

Java 运算符 算术运算符关系运算符位运算符逻辑运算符赋值运算符其他运算符 算术运算符 算术运算符用在数学表达式中&#xff0c;它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。 表格中的实例假设整数变量A的值为10&#xff0c;变量B的值为20&#xff1a; …...

推荐三款Scrum敏捷项目管理工具/敏捷管理实践

免费版敏捷工具推荐&#xff1a; Leangoo领歌 Leangoo领歌是ScrumCN&#xff08;scrum.cn&#xff09;旗下的一款永久免费的专业敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、缺陷管理、统计度量等。包括小…...

WARNING: undefined behavior - version of Delve is too old for Go version

在更新了 go 版本后&#xff0c;使用 goland 进行调试会报错 WARNING: undefined behavior - version of Delve is too old for Go version 1.20.5 (maximum supported version 1.19)这是因为 go 的版本升级后&#xff0c;相对 dlv 的版本就低了。 所以解决办法就是升级对应的…...

https非对称加密算法

非对称加密算法原理 在客户端公开公钥&#xff0c;服务端保存私钥 1.客户端第一次请求先请求443端口&#xff0c;从443端口下载公钥。 2.客户端将数据进行公钥算法进行加密&#xff0c;将秘文发送到服务端 服务端收到秘文后&#xff0c;通过私钥算法进行解密得到明文数据。…...

“深入探索JVM:Java虚拟机背后的奥秘“

标题&#xff1a;深入探索JVM&#xff1a;Java虚拟机背后的奥秘 摘要&#xff1a;本文将深入探索Java虚拟机&#xff08;JVM&#xff09;的内部工作原理和关键组成部分&#xff0c;揭示JVM背后的奥秘。通过对类加载机制、内存管理、垃圾回收、即时编译等方面的详细介绍&#x…...

树莓派系统入门教程(三)—— 使用Windows上的VSCode远程连接树莓派进行Python开发

树莓派系统入门教程&#xff08;三&#xff09;—— 使用Windows上的VSCode远程连接树莓派进行Python开发 1. 安装VSCode和SSH扩展2. SSH连接配置3. 连接到树莓派4. 运行Python程序5. 建议和注意事项 很多开发者更喜欢在大屏幕和强大的开发环境中编写代码&#xff0c;但同时他们…...

如何使用HTML5新增的标签来优化SEO?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用HTML5新增的标签来优化SEO&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案

一、延迟敏感行业面临的DDoS攻击新挑战 2025年&#xff0c;金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征&#xff1a; AI驱动的自适应攻击&#xff1a;攻击流量模拟真实用户行为&#xff0c;差异率低至0.5%&#xff0c;传统规则引…...