【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设计,视频分享,技术交流。

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

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

相关文章

同城跑腿服务预约小程序的作用如何

无论是互联网服务化加快还是前几年疫情冲击&#xff0c;在同城生活服务场景中出现了很多商机&#xff0c;如外卖跑腿、校园跑腿、代买代送等&#xff0c;无论公司还是个人都借势不断提升自己品牌的影响力&#xff0c;并且依赖朋友圈不断提升生意营收。 同城跑腿品牌不少&#…

yolo系列报错(持续补充ing)

文章目录 export GIT_PYTHON_REFRESHquiet解决 没有pt权重文件解决 python文件路径报错解决 读取文件列名报错解决 导入不同文件夹出错解决 megengine没有安装解决然后你发现它竟然还没有用 export GIT_PYTHON_REFRESHquiet 设置环境变量 GIT_PYTHON_REFRESH &#xff0c;这个…

【AI】自回归 (AR) 模型使预测和深度学习变得简单

自回归 (AR) 模型是统计和时间序列模型&#xff0c;用于根据数据点的先前值进行分析和预测。这些模型广泛应用于各个领域&#xff0c;包括经济、金融、信号处理和自然语言处理。 自回归模型假设给定时间变量的值与其过去的值线性相关&#xff0c;这使得它们可用于建模和预测时…

详解数据仓库之拉链表(原理、设计以及在Hive中的实现)

最近发现一本好书&#xff0c;读完感觉讲的非常好&#xff0c;首先安利给大家&#xff0c;国内第一本系统讲解数据血缘的书&#xff01;点赞&#xff01;近几天也会安排朋友圈点赞赠书活动(ง•̀_•́)ง 0x00 前言 本文将会谈一谈在数据仓库中拉链表相关的内容&#xff0c;包…

C#时间类的使用方法

在C#编程中&#xff0c;日期和时间的处理是常见的任务之一。C#提供了多个类来处理日期、时间和时区的操作&#xff0c;包括DateTime、TimeSpan和DateTimeOffset。 目录 1. DateTime类1.1 创建DateTime对象1.2 获取日期和时间信息1.3 格式化日期和时间1.4 比较日期和时间 2. Tim…

django|报错SQLite 3.8.3 or later is required的解决方案

迁移原同事写的程序&#xff0c;到新服务器上边。运行报错。解决方案有三种 降低django版本升级sqlite3&#xff0c;不低于3.8.3版本修改django源码 方案一、降低django版本 卸载高版本django pip uninstall django安装低版本&#xff0c;如 pip install django2.1.7注意&…

windows HOOK学习(一)

了解HOOK 一&#xff1a;HOOK是什么&#xff1f;二&#xff1a;HOOK的分类三&#xff1a;HOOK的原理&#xff1f;四&#xff1a;为什么全局钩子HOOK必须写到DLL中&#xff1f;五&#xff1a;HOOK的类型 一&#xff1a;HOOK是什么&#xff1f; hook就是我们平时听到的钩子&…

前端面试题 计算机网络

文章目录 ios 7层协议tcp协议和udp协议的区别tcp协议如何确保数据的可靠http和tcp的关系url输入地址到呈现网页有哪些步骤post和get本质区别&#xff0c;什么时候会触发二次预检GET请求&#xff1a;POST请求&#xff1a;触发二次预检&#xff08;CORS中的预检请求&#xff09;&…

ChatGPT付费创作系统V2.4.9独立版 +WEB端+ H5端 + 小程序端系统测试安装教程

播资源提供的GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序&#xff0c;是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。当前全民热议ChatGPT&#xff0c;流量超级大&#xff0c;引流不要太简单&#xff01;一键下单即可拥有自己的GPT&#xff01;…

python工具HIKVISION视频编码设备接入网关任意文件下载

python工具 构造payload /serverLog/downFile.php?fileName../web/html/serverLog/downFile.php漏洞证明 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教&#xff0c;万分感谢。 免责声明&#xff1a;由于传播或利用此文所提供的信息、技术或方法而造成的任何…

在线制作仿真病历证明软件,易语言实现病例报告生成器,取画板快照+标签+编辑框

闲着无聊用易语言开发了一个病例生成器&#xff0c;当然我加了水印的&#xff0c;这个图片你就算截图你也用不了&#xff0c;模板是从百度图库搜的&#xff0c;很多&#xff0c;我就随便找了一个&#xff0c;然后实现逻辑就是加了一个画板&#xff0c;然后载入了素材图&#xf…

行为型模式-命令模式

这里写自定义目录标题 模式定义模式场景模式结构缺点优点总结 模式定义 将一个 请求封装为一个 对象&#xff0c;可以使用不同的请求进行参数化&#xff1b;对请求排队或者记录请求日志以及 支持可撤销的操作。别名动作模式或事务模式 模式场景 经常向某些对象发送请求&…