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

文章目录

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


一、功能简介

本项目使用Proteus8仿真STM32单片机控制器,使用按键、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设计,视频分享,技术交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/189052.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工业镜头接口类型

现有产品主要有以下接口 1、C:最常见的工业相机接口&#xff0c;受限于接口物理尺寸大小&#xff0c;最大靶面目前是4/3” 2、M42:M421.0,2k和4k线阵相机使用 3、M58S:M580.75,大靶面相机使用&#xff0c;可以转C(限于CH080相机&#xff0c;靶面4/3”)&#xff0c;可以转F,可以…

UML/SysML建模工具更新(2023.10)(1)StarUML、Software Ideas Modeler

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 工具最新版本&#xff1a;Software Ideas Modeler 14.02 更新时间&#xff1a;2023年10月9日 工具简介 轻量级建模工具&#xff0c;支持UML、BPMN、SysML。 平台&#xff1a;Windo…

springboot全局拦截sql异常

起因:非法用户可通过特定的输入(如输入内容超长)等操作,使后台逻辑发生错误,从而使后台sql语句暴露至前台,进而为sql攻击提供条件 处理流程:经查找com.mysql.cj.jdbc.exceptions的父类为SQLException,在全局异常处理类中增加如下配置,经测试不起作用 ExceptionHandler(SQLExce…

Go RabbitMQ简介 使用

RabbitMQ简介 RabbitMQ 是一个广泛使用的开源消息队列系统&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;标准&#xff0c;为分布式应用程序提供了强大的消息传递功能。RabbitMQ 是 Erlang 语言编写的&#xff0c;具有高度的可扩展性和可靠性&#xff0c;…

Redis(12)| 过期删除策略和内存淘汰策略

Redis 是可以对 key 设置过期时间的&#xff0c;因此需要有相应的机制将已过期的键值对删除&#xff0c;而做这个工作的就是过期键值删除策略。 如何设置过期时间 先说一下对 key 设置过期时间的命令。 设置 key 过期时间的命令一共有 4 个&#xff1a; expire key n&#x…

HTTP和HTTPS详解

一)什么是HTTP协议 1)HTTP协议是倾向于相遇业务层次上面的一种协议&#xff0c;传输层协议主要考虑的是端对端之间的一个传输过程&#xff0c;TCP重点进行关注的是可靠传输&#xff1b;咱们的HTTP/1&#xff0c;HTTP/2是基于TCP的&#xff0c;但是咱们的HTTP/3是基于UDP的&…

全域旅游“一机游”智慧旅游平台解决方案:PPT全文48页,附下载

关键词&#xff1a;智慧文旅解决方案&#xff0c;智慧旅游解决方案&#xff0c;智慧旅游平台建设方案&#xff0c;智慧文旅综合运营平台&#xff0c;智慧文旅建设方案 一、智慧文旅一机游定义 智慧文旅一机游是一种新型的旅游方式&#xff0c;它通过智能化的设备和系统&#…

web前端开发第一次Dreamweave课堂练习/html练习代码《社会主义核心价值观》

目标图片&#xff1a; 文字素材&#xff1a; 社会主义核心价值观 Socialist Core Values 富强、民主、文明、和谐是国家层面的价值目标。 自由、平等、公正、法治是社会层面的价值取向。 爱国、敬业、诚信、友善是公民个人层面的价值准则。 Core socialist values are the…

网页判断版本更新

一、需求解析 为什么我会想到这个技术呢&#xff0c;是因为我有一次发现&#xff0c;我司的用户在使用网页的时候&#xff0c;经常会出现一个页面放很久&#xff0c;下班也不关这个页面&#xff0c;这样就会导致页面的代码长时间处于不更新的状态。 在使用到一个功能出了bug&a…

文本处理大师:Linux中grep、sed和awk的绝佳教程

1 grep 搜索关键字 全局搜索正则表达式 1.1 基本格式 grep root passwd #过滤含有root关键字-e 多个过滤词 grep -e root -e bash pa grep -E "root|bin" pa # 等同于上面的命令-i 忽略大小写 -E 过滤 grep -E "\<root" passwd ##root字符之前不能有…

Rt-Thread 移植6--多线程(KF32)

6.1 就绪列表 6.1.1 线程就绪优先级组 线程优先级表的索引对应的线程的优先级。 为了快速的找到线程在线程优先级表的插入和移出的位置&#xff0c;RT-Thread专门设计了一个线程就绪优先级组。线程就绪优先组是一个32位的整型数&#xff0c;每一个位对应一个优先级&#xff…

Nussbaumer Transform 以及 Amortized FHEW bootstrapping

参考文献&#xff1a; [Nuss80] Nussbaumer H. Fast polynomial transform methods for multidimensional DFTs[C]//ICASSP’80. IEEE International Conference on Acoustics, Speech, and Signal Processing. IEEE, 1980, 5: 235-237.[SV11] Smart N P, Vercauteren F. Full…

出口美国操作要点汇总│走美国海运拼箱的注意事项│箱讯科技

01服务标准 美国的货物需要细致的服务&#xff0c;货物到港后的服务也是非常重要的。如果在货物到港15天内&#xff0c;如果没有报关行进行(PROCEED)&#xff0c;货物就会进入了G.O.仓库&#xff0c;G.O.仓库的收费标准是非常高的。 02代理资格审核 美国航线除了各家船公司&a…

基于SSM的停车场管理系统设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。你想解决的问题&#xff0c;今天给大家介绍…

低代码平台,业务开发的“银弹”

目录 一、为什么需要低代码平台 二、低代码平台的搭建能力 三、低代码其他能力 四、写在最后 随着互联网和信息技术的快速发展&#xff0c;各行各业都在积极拥抱数字化转型。在这个过程中&#xff0c;软件开发成为企业实现数字化转型的关键环节。然而&#xff0c;传统的软件开发…

YOLOv4: Optimal Speed and Accuracy of Object Detection(2020.4)

文章目录 AbstractIntroductionRelated workObject detection modelsBag of freebiesBag of specials MethodologySelection of architectureSelection of BoF and BoSAdditional improvementsYOLOv4 ExperimentsResults表8列出了使用Maxwell GPU的帧率对比结果表9列出了使用Pa…

Jenkins 质量扫描

代码质量扫描工具&#xff08;SonarQube&#xff09; 质量评审 SonarQube有四个关键组件 ◼ SonarQube Server运行有三个组件 ◆ Web Server&#xff1a;UI ◆ Search Server&#xff1a;为UI提供搜索功能&#xff0c;基于ElasticSearch ◆ Compute Engine Server&#xff1a…

Git GUI、SSH协议和IDEA中的Git使用详解

目录 前言 一、Git GUI的使用 1. 什么是Git GUI 2. 常见的Git GUI工具 3.使用 4.使用Git GUI工具的优缺点 优点&#xff1a; 缺点&#xff1a; 二、SSH协议 1.什么是SSH协议 2.SSH的主要特点和作用 3.SSH密钥认证的原理和流程 4. SSH协议的使用 三、IEDA使用git …

webrtc推拉流 srs报错:DTLS_HANG DTLS: > Hang, done=0, version=-1, arq=0

执行了./objs/srs -c conf/rtc.conf 打开了srs的推拉流网页&#xff1a; 推流 拉流 srs报错如下&#xff1a; [2023-11-08 21:55:23.489][Warn][44992][8xvf4d62][104][DTLS_HANG] DTLS: Hang, done0, version-1, arq0 观看srs日志&#xff0c;在sdp offer&#xff0c;answer…

【postgresql】 代替mysql的if函数

在postgresql 中用 COALESCE 来代替mysql中的 if &#xff1b; COALEASE 函数的语法如下&#xff1a; COALESCE(expression_1, expression_2, expression_3, ...) COALESCE 函数接受多个参数&#xff0c;并且返回第一个非空的参数值&#xff1b; 如果所有参数都为空值&…