当前位置: 首页 > 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…...

作业本耐用度差距巨大?深圳大明印刷厂拆解合规工艺,告别定制作业本掉页开裂通病

在校园日常教学中&#xff0c;很多学校都会遇到同一个难题&#xff1a;同一学期采购的作业本、定制作业本&#xff0c;品质差距悬殊&#xff0c;有的完好无损用到期末&#xff0c;有的短短几周就出现书脊开裂、页面脱落、边角破损、翻页卡顿等问题。不少人误以为是学生使用习惯…...

告别外部中断!用EnableInterrupt库轻松搞定Arduino Nano多通道PWM读取(附完整代码)

Arduino Nano多通道PWM读取实战&#xff1a;用EnableInterrupt突破硬件限制当你用Arduino Nano开发四轴飞行器或机器人项目时&#xff0c;是否遇到过这样的尴尬&#xff1a;遥控器的四个通道PWM信号需要同时读取&#xff0c;但Nano只有两个外部中断引脚&#xff1f;这个问题困扰…...

别只拿PotPlayer看片了!挖掘它的采集录制功能,做Switch游戏存档大师

别把PotPlayer当普通播放器&#xff01;解锁它的Switch游戏录制黑科技 你是否已经厌倦了在OBS、Bandicam等专业录制软件中反复调试参数的繁琐&#xff1f;是否想过那个每天用来看视频的PotPlayer&#xff0c;其实隐藏着令人惊喜的游戏录制能力&#xff1f;今天&#xff0c;我们…...

告别KITTI!用TartanAir数据集在Unreal Engine仿真环境里“虐”你的VSLAM算法(附保姆级下载与使用指南)

用TartanAir数据集在Unreal Engine中打造VSLAM算法的"极限考场"当你的视觉SLAM算法在KITTI数据集上跑出98%的准确率时&#xff0c;是否意味着它已经准备好应对真实世界的复杂场景&#xff1f;现实往往会给乐观的开发者当头一棒——实验室里的"优等生"在遇到…...

8款网盘直链下载助手:彻底告别限速烦恼,实现高速下载自由

8款网盘直链下载助手&#xff1a;彻底告别限速烦恼&#xff0c;实现高速下载自由 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移…...

3步开启Windows 11安卓应用新体验:WSA完整使用指南

3步开启Windows 11安卓应用新体验&#xff1a;WSA完整使用指南 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA Windows Subsystem for Android&#xff08;简…...

OpenCore Legacy Patcher完整指南:让老旧Mac焕发新生,运行最新macOS

OpenCore Legacy Patcher完整指南&#xff1a;让老旧Mac焕发新生&#xff0c;运行最新macOS 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台被苹…...

如何快速掌握ncmdumpGUI:Windows平台网易云音乐NCM文件转换完整教程

如何快速掌握ncmdumpGUI&#xff1a;Windows平台网易云音乐NCM文件转换完整教程 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经下载了网易云音乐的…...

服务器数据下载安全:实时加密与动态访问控制实战

1. 这不是又一个“加个密码”的方案&#xff0c;而是服务器数据流动的实时安检闸机IP-guard安全网关——这个名字在企业IT运维圈里&#xff0c;常被误读为“桌面端U盘管控工具”或“员工上网行为审计系统”。但真正用过它来守服务器的人&#xff0c;会立刻意识到&#xff1a;它…...

Midjourney V6锐化失控?3步诊断+5组--sref/--stylize协同参数公式,立竿见影修复模糊与锯齿

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney V6锐化失控的本质归因 Midjourney V6 引入的全新扩散架构与隐式细节增强机制&#xff0c;导致图像生成过程中高频纹理被过度强化&#xff0c;其根本原因并非参数误配&#xff0c;而是模型在…...