当前位置: 首页 > 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;这个专栏是为那些对…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...