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

【Proteus仿真】【51单片机】多路温度控制系统

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

本项目使用Proteus8仿真51单片机控制器,使用按键、LED、蜂鸣器、LCD1602、DS18B20温度传感器、HC05蓝牙模块等。

主要功能:
系统运行后,默认LCD1602显示前4路采集的温度,可通过K4键切换显示后4路温度;
可通过K3键进入阈值设置模式,K1和K2键调节阈值,K4键确认并返回显示界面。将采集的8路温度数据通过蓝牙传输到APP显示;当8路温度有超过阈值或低于阈值,则蜂鸣器报警,且APP显示第几路温度高或低。


二、软件设计

/*
作者:嗨小易(QQ:3443792007)*///系统数据显示
void sys_data_show(void)
{u8 buf[5];static u8 i=0;while(1){//正常模式显示if(sys_ctrl.mode==0){//页面1if(sys_ctrl.page==0){//温度1显示buf[0]=sys_ctrl.temp[0]/100+0x30;buf[1]=sys_ctrl.temp[0]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[0]%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,0,buf);//温度2显示buf[0]=sys_ctrl.temp[1]/100+0x30;buf[1]=sys_ctrl.temp[1]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[1]%100%10+0x30;buf[4]='\0';lcd1602_show_string(11,0,buf);//温度3显示buf[0]=sys_ctrl.temp[2]/100+0x30;buf[1]=sys_ctrl.temp[2]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[2]%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,1,buf);//温度4显示buf[0]=sys_ctrl.temp[3]/100+0x30;buf[1]=sys_ctrl.temp[3]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[3]%100%10+0x30;buf[4]='\0';lcd1602_show_string(11,1,buf);	}//页面2else{//温度5显示buf[0]=sys_ctrl.temp[4]/100+0x30;buf[1]=sys_ctrl.temp[4]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[4]%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,0,buf);//温度6显示buf[0]=sys_ctrl.temp[5]/100+0x30;buf[1]=sys_ctrl.temp[5]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[5]%100%10+0x30;buf[4]='\0';lcd1602_show_string(11,0,buf);//温度7显示buf[0]=sys_ctrl.temp[6]/100+0x30;buf[1]=sys_ctrl.temp[6]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[6]%100%10+0x30;buf[4]='\0';lcd1602_show_string(3,1,buf);//温度8显示buf[0]=sys_ctrl.temp[7]/100+0x30;buf[1]=sys_ctrl.temp[7]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[7]%100%10+0x30;buf[4]='\0';lcd1602_show_string(11,1,buf);}//串口传输温度数据i++;if(i%1==0){//温度1显示buf[0]=sys_ctrl.temp[0]/100+0x30;buf[1]=sys_ctrl.temp[0]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[0]%100%10+0x30;buf[4]='\0';UART_SendString("\r\nTP1:");UART_SendString(buf);UART_SendString("C    ");//温度2显示buf[0]=sys_ctrl.temp[1]/100+0x30;buf[1]=sys_ctrl.temp[1]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[1]%100%10+0x30;buf[4]='\0';UART_SendString("TP2:");UART_SendString(buf);UART_SendString("C    ");//温度3显示buf[0]=sys_ctrl.temp[2]/100+0x30;buf[1]=sys_ctrl.temp[2]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[2]%100%10+0x30;buf[4]='\0';UART_SendString("TP3:");UART_SendString(buf);UART_SendString("C    ");//温度4显示buf[0]=sys_ctrl.temp[3]/100+0x30;buf[1]=sys_ctrl.temp[3]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[3]%100%10+0x30;buf[4]='\0';UART_SendString("TP4:");UART_SendString(buf);UART_SendString("C\r\n");//温度5显示buf[0]=sys_ctrl.temp[4]/100+0x30;buf[1]=sys_ctrl.temp[4]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[4]%100%10+0x30;buf[4]='\0';UART_SendString("TP5:");UART_SendString(buf);UART_SendString("C    ");//温度6显示buf[0]=sys_ctrl.temp[5]/100+0x30;buf[1]=sys_ctrl.temp[5]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[5]%100%10+0x30;buf[4]='\0';UART_SendString("TP6:");UART_SendString(buf);UART_SendString("C    ");//温度7显示buf[0]=sys_ctrl.temp[6]/100+0x30;buf[1]=sys_ctrl.temp[6]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[6]%100%10+0x30;buf[4]='\0';UART_SendString("TP7:");UART_SendString(buf);UART_SendString("C    ");//温度8显示buf[0]=sys_ctrl.temp[7]/100+0x30;buf[1]=sys_ctrl.temp[7]%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp[7]%100%10+0x30;buf[4]='\0';UART_SendString("TP8:");UART_SendString(buf);UART_SendString("C\r\n");	}}//阈值设置显示else{//温度下限显示lcd1602_show_nums(4,1,sys_ctrl.templ,2,0);//温度上限显示lcd1602_show_nums(13,1,sys_ctrl.temph,2,0);//阈值设定,数据位置闪烁switch(sys_ctrl.mode){case 1://温度下限lcd1602_show_string(4,1,"  ");delay_ms(100);lcd1602_show_nums(4,1,sys_ctrl.templ,2,0);break;case 2://温度上限lcd1602_show_string(13,1,"  ");delay_ms(100);lcd1602_show_nums(13,1,sys_ctrl.temph,2,0);break;	}}break;			}
}//系统数据设置
void sys_data_set(void)
{u8 key=0;static u8 oneflag=0;key=KEY_Scan(1);//设置if(key==KEY3_PRESS){sys_ctrl.mode++;if(sys_ctrl.mode>2)sys_ctrl.mode=1;if(oneflag==0){oneflag=1;_parm_set_show();//参数设置界面显示}}	//正常模式if(sys_ctrl.mode==0){//翻页if(key==KEY4_PRESS){sys_ctrl.page=!sys_ctrl.page;if(sys_ctrl.page==1)sys_open_show2();//页面2else sys_open_show1();//页面1		}}//阈值设置模式else{//加if(key==KEY1_PRESS){switch(sys_ctrl.mode){case 1://温度下限 sys_ctrl.templ++;if(sys_ctrl.templ>99)sys_ctrl.templ=0;break;case 2://温度上限 sys_ctrl.temph++;if(sys_ctrl.temph>99)sys_ctrl.temph=0;break;	}}//减else if(key==KEY2_PRESS){switch(sys_ctrl.mode){case 1://温度下限 sys_ctrl.templ--;if(sys_ctrl.templ<0)sys_ctrl.templ=99;break;case 2://温度上限 sys_ctrl.temph--;if(sys_ctrl.temph<0)sys_ctrl.temph=99;break;	}}//确定else if(key==KEY4_PRESS){sys_ctrl.mode=0;oneflag=0;if(sys_ctrl.page==1)sys_open_show2();//页面2else sys_open_show1();//页面1}}
}//系统功能控制
void sys_fun_ctrl(void)
{u8 i=0;//正常工作模式下if(sys_ctrl.mode==0){//温度高于上限,或者温度低于下限,蜂鸣器报警for(i=0;i<8;i++){if(sys_ctrl.temp[i]>sys_ctrl.temph*10 || sys_ctrl.temp[i]<sys_ctrl.templ*10){beep_alarm(10,1000);if(sys_ctrl.temp[i]>sys_ctrl.temph*10){//第几个温度过高UART_SendString("\r\n第");UART_SendData(i+0x31);UART_SendString("个温度高\r\n");}else if(sys_ctrl.temp[i]<sys_ctrl.templ*10){//第几个温度过低UART_SendString("\r\n第");UART_SendData(i+0x31);UART_SendString("个温度低\r\n");}}	}			}	
}

三、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联系作者

视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

相关文章:

【Proteus仿真】【51单片机】多路温度控制系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用按键、LED、蜂鸣器、LCD1602、DS18B20温度传感器、HC05蓝牙模块等。 主要功能&#xff1a; 系统运行后&#xff0c;默认LCD1602显示前4路采集的温…...

一些可以参考的文档集合15

之前的文章集合: 一些可以参考文章集合1_xuejianxinokok的博客-CSDN博客 一些可以参考文章集合2_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合3_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合4_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合5…...

k8s的service自动发现服务:实战版

Service服务发现的必要性: 对于kubernetes整个集群来说&#xff0c;Pod的地址也可变的&#xff0c;也就是说如果一个Pod因为某些原因退出了&#xff0c;而由于其设置了副本数replicas大于1&#xff0c;那么该Pod就会在集群的任意节点重新启动&#xff0c;这个重新启动的Pod的I…...

项目笔记记录

一、node下载版本报错&#xff1a;npm install --legacy-peer-deps 二、Scheduled: 任务自动化调度 Scheduled 标记要调度的方法的注解&#xff0c;必须指定 cron&#xff0c;fixedDelay或fixedRate属性之一 fixedDelay&#xff1a;固定延迟 延迟执行任务&#xff0c;任务在…...

【leetcode】1137. 第 N 个泰波那契数

题目 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 示例 1&#xff1a; 输入&#xff1a;n 4 输出&#xff1a;4 解释&#xff1a; T_3 0 1 1 2 …...

【解决】conda-script.py: error: argument COMMAND: invalid choice: ‘activate‘

运行conda activate base报错&#xff1a; 试了网上找到的解决方法都不行&#xff1a; 最后切换了一下terminal&#xff1a; 从powershell改回cmd&#xff08;不知道为什么一开始手贱换成powershell&#xff09; 就可以了...

Linux 性能调优之硬件资源监控

写在前面 考试整理相关笔记博文内容涉及 Linux 硬件资源监控常见的命名介绍&#xff0c;涉及硬件基本信息查看查看硬件错误信息查看虚拟环境和云环境资源理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#x…...

Windows系统隐藏窗口启动控制台程序

背景 上线项目有时候需要一些控制台应用作为辅助服务来协助UI应用满足实际需求&#xff0c;这时候如果一运行UI就冒出一系列的黑框&#xff0c;这将会导致客户被下的不起&#xff0c;生怕中了什么不知名病毒 方案 可以使用vbs来启动&#xff0c;这个是window系统自带的&#…...

FreeSWITCH fail2ban.lua

--[[ 部署:在vars.xml里面增加配置项目&#xff1a;<X-PRE-PROCESS cmd"set" data"api_on_startupluarun fail2ban.lua"/>或者在 lua.conf.xml 里面增加下面这个配置项目&#xff1a;<param name"startup-script" value"fail2ban.…...

Qt HTTP下载数据

添加头文件&#xff1a; #include <QNetworkAccessManager> #include <QNetworkReply> #include <QUrl> #include <QDesktopServices> 创建对象&#xff1a; QNetworkAccessManager networkManager;//网络管理QNetworkReply *reply; …...

8. 深度学习——NLP

机器学习面试题汇总与解析——NLP 本章讲解知识点 什么是 NLP循环神经网络(RNN)RNN 变体Attention 机制RNN 反向传播推导LSTM 与 GRUTransformerBertGPT分词算法分类CBOW 模型与 Skip-Gram 模型本专栏适合于Python已经入门的学生或人士,有一定的编程基础。本专栏适合于算法…...

部署 KVM 虚拟化平台

虚拟化技术的演变过程分为软件模拟、虚拟化层翻译、容器虚拟化三个阶段 1 软件模拟的技术方式 软件模拟是通过软件完全模拟CPU、网卡、芯片组、磁盘等计算机硬件&#xff0c;因为是软件模拟&#xff0c;所以理论上可以模拟任何硬件&#xff0c;甚至不存在的硬件。但是由于是软…...

Juniper PPPOE双线路冗余RPM配置

------------------ 浮动静态路由 set routing-options static route 0.0.0.0/0 next-hop pp0.0 qualified-next-hop pp0.1 preference 10 ----------------- RPM测试的内容,包括从哪个接口发起测试,测试ping等等 #指定探针类型用ICMP请求 #探测的目标地址 #探测间隔 #探测阈…...

原生JS实现视频截图

视频截图效果预览 利用Canvas进行截图 要用原生js实现视频截图&#xff0c;可以利用canvas的绘图功能 ctx.drawImage&#xff0c;只需要获取到视频标签&#xff0c;就可以通过drawImage把视频当前帧图像绘制在canvas画布上。 const video document.querySelector(video) con…...

前端Rust二进制/wasm全平台构建流程简述

前言 开门见山&#xff0c;现代前端 Rust 构建基本分三大类&#xff0c;即 构建 .wasm 、构建 .node 二进制 、构建 swc 插件。 入门详见 《 前端Rust开发WebAssembly与Swc插件快速入门 》 。 对于单独开发某一类的流程&#xff0c;在上述参考文章中已有介绍&#xff0c;但对于…...

加解密算法相关技术详解

文章目录 简介工作机制加解密对称密钥算法非对称密钥算法 数字信封数字签名数字证书技术对比 推荐阅读 简介 随着网络技术的飞速发展&#xff0c;网络安全问题日益重要&#xff0c;加解密技术是网络安全技术中的核心技术&#xff0c;是最常用的安全保密手段。 加密&#xff1…...

Clickhouse学习笔记(13)—— Materialize MySQL引擎

该引擎用于监听 binlog 事件&#xff0c;类似于canal、Maxwell等组件 ClickHouse 20.8.2.3 版本新增加了 MaterializeMySQL 的 database 引擎&#xff0c;该 database 能映射到 MySQL中的某个database &#xff0c;并自动在ClickHouse中创建对应ReplacingMergeTree。 ClickHous…...

《QT从基础到进阶·二十四》按钮组QButtonGroup,单选框QRadioButton和多选框QCheckBox

1、按钮组QButtonGroup 如果有多个单选按钮&#xff0c;可以统一放进一个按钮组。 图中有三个单选按钮放进了一个QGroupBox,并且设置了水平布局&#xff0c;现在要将这三个单选按钮放进一个按钮组&#xff0c;之前的想法是先把三个按钮加入按钮组&#xff0c;再把按钮组放进QG…...

Ansible--playbook剧本

目录 一、playbook&#xff1a; playbook的组成&#xff1a; palybook的编写注意事项 二、playbook的编写格式&#xff08;示例&#xff09; 2.1 编写yaml文件 2.2 定义、引用变量 2.3 指定远程主机sudo切换用户 2.4 when条件判断 2.5 迭代 2.6 Templates 模块 2.7 tags 模…...

MacOS下VMware Fusion配置静态IP

前言 在虚拟机安装系统后&#xff0c;默认是通过DHCP动态分配的IP&#xff0c;这会导致每次重启虚拟机ip都可能会改变&#xff0c;使用起来会有很多不便。 配置静态IP 查看主机网关地址 cat /Library/Preferences/VMware\ Fusion/vmnet8/nat.conf 查看主机DNS&#xff0c;m…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...