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

基于51单片机的温度报警控制系统Protues仿真设计

目录

一、设计背景

二、实现功能

三、总体硬件设计

四、仿真演示

四、源程序

一、设计背景

        随着现代工农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与了解环境温度。特别地,高温情况下极易造成火灾,例如,在机房中,电脑等设备发热快,若在短时间内机房温度升高,超出了设备正常温度,就会导致系统瘫痪或产生火灾。低温可能导致设备的处理器运行速度变慢,RAM(随机访问存储器)响应时间增加,以及设备的整体性能下降。特别是对于电子组件和机械设备,低温会使其反应速度减缓。在这种情况下,温度如果得到及时的控制与报警,就可以在一定程度上避免上述情况的发生。  

       另一个方面,单片机技术已经普及到各个领域,已经成为一种比较成熟的技术。因此本文将利用51单片机芯片,设计一种基于51单片机的温度报警控制系统。通过仿真实验证明,本文设计的温度报警控制系统工作时,液晶显示屏实时显示温度值并利用按键设定温度上下限范围,当所测温度超过设定的温度范围时,蜂鸣器发出报警信号,启动风扇降温;当所测温度低于设定的温度范围时,蜂鸣器发出报警信号,启动加热器进行加热。本设计实现的温控系统结构简单,可操作性强,具有一定的实用价值。

二、实现功能

        本设计以51单片机为控制核心,设计一种温度报警控制系统。可具体实现以下功能:

     (1)系统通过DS18B20采集当前温度环境温度并显示(精确到0.1度);

     (2)系统包含三个按键,可设定上下限温度的阈值;

     (3)若当前温度高于上限阈值温度时,声光报警,开启电机降温;若当前温度低于下限阈值温度时,声光报警,启动加热装置。

三、总体硬件设计

       本系统设计的基于51单片机的温度报警控制系统,总体设计框图如图1所示,主要包括单片机最小系统、温度采集电路、独立式按键电路、显示电路、报警电路、加热电路和散热电路,其中主控芯片采用功耗低、性能高的单片机 STC89C52,温度采集电路采用数字温度传感器DS18B20,显示电路采用 LCD1602 液晶显示器,报警电路采用蜂鸣器以及LED 指示灯设计实现声光报警,独立式按键用来设置不同时间段温度报警的上下限阈值。当实测环境温度值大于的温度上限值时,系统自动进入散热模式,直流电机运转带动风扇工作,同时蜂鸣器响、红色LED 指示灯点亮 ;若低于设定的温度下限阈值,系统自动进入加热模式,继电器控制加热设备工作,同时蜂鸣器响、绿色LED 指示灯点亮 ;若当前温度处于设定的温度上下限阈值之间时,关闭散热、加热及报警,从而使温度控制在设定的范围内。

          

                                                         图1 系统总体设计框图

四、仿真演示

当实测环境温度值处于设定的温度上下限阈值之间时,关闭散热、加热及报警。

当实测环境温度值大于设定的温度上限阈值时,直流电机运转带动风扇工作,系统进入散热模式,同时蜂鸣器响、红色LED 指示灯点亮。

当实测环境温度值低于设定的温度下限阈值,系统进入加热模式,继电器控制加热设备工作,同时蜂鸣器响、绿色LED 指示灯点亮 。

通过三个按键,设定上下限温度阈值,设置过程中LCD上会有光标提示。

四、源程序

#include <reg51.h> 
#define uint unsigned int
#define uchar unsigned char   	//宏定义
#define LCD1602 P0sbit SET=P3^1;    			//定义调整键
sbit DEC=P3^2;    			//定义减少键
sbit ADD=P3^3;    			//定义增加键
sbit BUZZ=P3^6;    			//定义蜂鸣器
sbit ALAM=P1^2;				//定义灯光报警
sbit fengshan=P1^0;   //定义风扇降温
sbit jiare=P1^1;      //定义加热
sbit ALAM1=P1^4;
sbit DQ=P3^7;     			//定义DS18B20总线I/O	
sbit RS = P2^7;
sbit EN = P2^6;
bit shanshuo_st;    			//闪烁间隔标志
bit beep_st;     				//蜂鸣器间隔标志
uchar x=0;      				//计数器uchar code tab1[]={" Temper:   .  C "};
uchar code tab2[]={"TH:   C  TL:   C"};
uint c;
uchar Mode=0;     			//状态标志
signed char TH=30;  		//上限报警温度,默认值为30
signed char TL=20;   		//下限报警温度,默认值为20
//============================================================================================
//====================================DS18B20=================================================
//============================================================================================
/*****延时子程序*****/
void Delay_DS18B20(int num)
{while(num--) ;
}
void delay(uint xms)//延时函数,有参函数
{uint x,y;for(x=xms;x>0;x--)for(y=110;y>0;y--);
}
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{unsigned char x=0;DQ = 1;         //DQ复位Delay_DS18B20(8);    //稍做延时DQ = 0;         //单片机将DQ拉低Delay_DS18B20(80);   //精确延时,大于480usDQ = 1;         //拉高总线Delay_DS18B20(14);x = DQ;           //稍做延时后,如果x=0则初始化成功,x=1则初始化失败Delay_DS18B20(20);
}
/*****读一个字节*****/
unsigned char ReadOneChar(void)
{unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0;     // 给脉冲信号dat>>=1;DQ = 1;     // 给脉冲信号if(DQ)dat|=0x80;Delay_DS18B20(4);}return(dat);
}
/*****写一个字节*****/
void WriteOneChar(unsigned char dat)
{unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;Delay_DS18B20(5);DQ = 1;dat>>=1;}
}
/*****读取温度*****/
unsigned int ReadTemperature(void)
{unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC);  //跳过读序号列号的操作WriteOneChar(0x44);  //启动温度转换Init_DS18B20();WriteOneChar(0xCC);  //跳过读序号列号的操作WriteOneChar(0xBE);  //读取温度寄存器a=ReadOneChar();     //读低8位b=ReadOneChar();    //读高8位t=b;t<<=8;t=t|a;tt=t*0.0625;// t= tt*10+0.5;     //放大10倍输出并四舍五入t= tt*10+5.5; return(t);
}/*****读取温度*****/
void check_wendu(void)
{c=ReadTemperature()-5;  			//获取温度值并减去DS18B20的温漂误差if(c>1200)c=1200;
}/********液晶写入指令函数与写入数据函数,以后可调用**************/void write_1602com(uchar com)//****液晶写入指令函数****
{RS=0;//数据/指令选择置为指令
//	rw=0; //读写选择置为写LCD1602=com;//送入数据delay(1);EN=1;//拉高使能端,为制造有效的下降沿做准备delay(1);EN=0;//en由高变低,产生下降沿,液晶执行命令
}void write_1602dat(uchar dat)//***液晶写入数据函数****
{RS=1;//数据/指令选择置为数据
//	rw=0; //读写选择置为写LCD1602=dat;//送入数据delay(1);EN=1; //en置高电平,为制造下降沿做准备delay(1);EN=0; //en由高变低,产生下降沿,液晶执行命令
}void lcd_init()//***液晶初始化函数****
{uchar a;write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据write_1602com(0x0c);//开显示不显示光标write_1602com(0x06);//整屏不移动,光标自动右移write_1602com(0x01);//清显示write_1602com(0x80);//日历显示固定符号从第一行第1个位置之后开始显示for(a=0;a<16;a++){write_1602dat(tab1[a]);//向液晶屏写日历显示的固定符号部分delay(3);}write_1602com(0x80+0x40);//时间显示固定符号写入位置,从第2个位置后开始显示for(a=0;a<16;a++){write_1602dat(tab2[a]);//写显示时间固定符号,两个冒号delay(3);}}void display()
{if(Mode==0){write_1602com(0x80+8);write_1602dat(c/1000+0x30);write_1602dat((c%1000)/100+0x30);write_1602dat(((c%1000)%100)/10+0x30);write_1602com(0x80+12);write_1602dat(((c%1000)%100)%10+0x30);write_1602com(0x80+13);write_1602dat(0xdf);write_1602com(0x80+0x40+3);write_1602dat(TH/10+0x30);write_1602dat(TH%10+0x30);write_1602dat(0xdf);write_1602com(0x80+0x40+12);write_1602dat(TL/10+0x30);write_1602dat(TL%10+0x30);write_1602dat(0xdf);		}								  
}
//=====================================================================================/*****初始化定时器0*****/
void InitTimer(void)
{TMOD=0x1;TH0=0x3c;TL0=0xb0;     //50ms(晶振12M)EA=1;      //全局中断开关TR0=1;ET0=1;      //开启定时器0
}void KEY()
{//功能键if(SET==0){BUZZ=0;delay(10);if(SET==0){Mode++;if(Mode==3)Mode=0;BUZZ=1;}while(SET==0){if(Mode==0){//	write_1602com(0x80+0x40+6);write_1602com(0x0c);}	else if(Mode==1){write_1602com(0x80+0x40+4);write_1602com(0x0f);}	else{write_1602com(0x80+0x40+13);write_1602com(0x0f);}							}}//增加if(ADD==0&&Mode==1){BUZZ=0;delay(10);if(ADD==0)	{TH++;if(TH>=99)	TH=99;write_1602com(0x80+0x40+3);write_1602dat(TH/10+0x30);write_1602dat(TH%10+0x30);write_1602com(0x80+0x40+4);	BUZZ=1;}while(ADD==0);}//减少if(DEC==0&&Mode==1){BUZZ=0;delay(10);if(DEC==0){TH--;if(TH==TL)	TH=TL+1;write_1602com(0x80+0x40+3);write_1602dat(TH/10+0x30);write_1602dat(TH%10+0x30);write_1602com(0x80+0x40+4);	BUZZ=1;}while(DEC==0);}if(ADD==0&&Mode==2){BUZZ=0;delay(10);if(ADD==0)	{TL++;if(TL==TH)	TL=TH-1;write_1602com(0x80+0x40+12);write_1602dat(TL/10+0x30);write_1602dat(TL%10+0x30);write_1602com(0x80+0x40+13);	BUZZ=1;}while(ADD==0);}//减少if(DEC==0&&Mode==2){BUZZ=0;delay(10);if(DEC==0){TL--;if(TL<=0)	TL=0;write_1602com(0x80+0x40+12);write_1602dat(TL/10+0x30);write_1602dat(TL%10+0x30);write_1602com(0x80+0x40+13);	BUZZ=1;}while(DEC==0);		}
}/*****报警子程序*****/
void Alarm()
{if(x>=10){beep_st=~beep_st;x=0;}if(Mode==0){if((c/10)>=TH){fengshan=0;jiare=1;ALAM=0;ALAM1=1;if(beep_st==1)BUZZ=0;elseBUZZ=1;}else if((c/10)<TL){fengshan=1;jiare=0;ALAM1=0;ALAM=1;if(beep_st==1)BUZZ=0;elseBUZZ=1;}else{BUZZ=1;ALAM=1;ALAM1=1;fengshan=1;	jiare=1;			}}else{BUZZ=1;ALAM=1;ALAM1=1;fengshan=1;jiare=1;}
}/*****主函数*****/
void main(void)
{uint z;delay(1);lcd_init();delay(1);InitTimer();    //初始化定时器for(z=0;z<100;z++){check_wendu();delay(1);        } while(1){display();KEY();Alarm(); check_wendu();}
}/*****定时器0中断服务程序*****/
void timer0(void) interrupt 1
{TH0=0x3c;TL0=0xb0;x++;
}

仿真与程序源文件百度网盘链接:https://pan.baidu.com/s/1KKbiyLIr71JHmF1Sj-sBpw 
提取码:eumg 

相关文章:

基于51单片机的温度报警控制系统Protues仿真设计

目录 一、设计背景 二、实现功能 三、总体硬件设计 四、仿真演示 四、源程序 一、设计背景 随着现代工农业技术的发展及人们对生活环境要求的提高&#xff0c;人们也迫切需要检测与了解环境温度。特别地&#xff0c;高温情况下极易造成火灾&#xff0c;例如&#xff0c;在…...

多级缓存

一、多级缓存 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未命中则查询数据库&#xff0c;如图&#xff1a; 存在下面的问题&#xff1a; •请求要经过Tomcat处理&#xff0c;Tomcat的性能成为整个系统的瓶颈 •Redis缓存失效时&#xff…...

【已解决】如何用typedef简化函数指针

博文内容简短&#xff0c;主要介绍typedef简化函数指针&#xff0c;形式是typedef int(*pp)(int,int);并用一个加法的例子去演示&#xff0c;如何用typedef简化函数指针。 示例 #include<stdio.h> int add(int a,int b) {return a b; } typedef int(*p)(int, int); in…...

UI网站汇总

Material Design的九大设计原则 Material Design的学习笔记 Material Design复杂响应式设计 MaterialPalette MD风格调色板 Iconfont Clipartlogo Dribbble https://dribbble.com/search?qapp Uplabs 优设 站酷 我图网 思维网 欢迎补充&#xff01;&#xff01;...

PLC-IoT 网关开发札记(5):将本地数据库作为资产打包发布到 App

App需求&#xff1a;保存物模型 什么是物模型 在项目开发中&#xff0c;用到了本地数据库&#xff0c;这个本地数据库记录了系统的物模型。所谓物模型就是对某一个设备的可操纵属性的定义&#xff0c;每一个设备包括了一个或者多个属性&#xff0c;通过获取这些属性的当前值可…...

固态硬盘优化设置

目录 前言&#xff1a; 关闭Windows Search 禁用系统保护&#xff08;不建议&#xff09; 不建议禁用系统保护原因 关闭碎片整理【机械硬盘】 提升固态硬盘速度 开启TRIM 合理使用固态硬盘的容量 正确关机 关闭开机自启 前言&#xff1a; 电脑配备固态硬盘就能一劳…...

SpringBoot跨域问题解决

前端访问后台接口时&#xff0c;浏览器报错&#xff0c;跨域无法访问。 报错信息如下&#xff1a; Response to preflight request doesnt pass access control check: No Access-Control-Allow-Origin header is present on the requested resource. 经过一番百度之后&#…...

FindMy技术与相机结合

FindMy是苹果公司提供的设备追踪服务&#xff0c;用来帮助用户定位丢失的设备。自苹果公司开放Findmy网络之后&#xff0c;FindMy技术便与各种生活设备相结合&#xff0c;比如与相机的结合。 想象一下&#xff0c;你正在外出办事或者旅行时&#xff0c;突然意识到相机丢了&…...

Windows WSL2 占用磁盘空间清理释放

目前工作中时常用到WSL2&#xff08;Ubuntu20.04&#xff09;&#xff0c;在使用一段时间后会发现WSL2所占用磁盘空间越来越多&#xff0c;体现在WSL2之上安装Linux分发对应的vhdx虚拟磁盘文件体积越来越大&#xff0c;会占用Windows自身空间&#xff0c;即使手动清理了Linux分…...

2022 年全国职业院校技能大赛高职组云计算赛项试卷部分解析

2022 年全国职业院校技能大赛高职组云计算赛项试卷部分解析 【赛程名称】高职组-云计算赛项第一场-私有云【任务 1】私有云服务搭建[10 分]【题目 2】Yum 源配置[0.5 分]【题目 3】配置无秘钥 ssh[0.5 分]【题目 4】基础安装[0.5 分]【题目 5】数据库安装与调优[0.5 分]【题目 …...

2.C语言——控制语句

控制语句 1.分支语句/判断语句if 语句if...else 语句if...else if...else语句 switch语句 2.循环语句 while 语句 do...while 语句 for 语句 3.转向语句 break continue go to 1.分支语句/判断语句 if 语句 if(boolean_expression) { /* 如果布尔表达式为真将执行的语句 */ } …...

Linux网络之PXE高效批量装机、Kickstart全自动化安装

一. PXE网络装机简介和相关知识 1. 常见的三种系统安装方式和相关文件 ① 三种系统安装方式 u启动安装&#xff1a;在U盘中下载相关的安装系统及镜像文件&#xff0c;u盘插机安装 光驱安装&#xff1a;将带有所需系统的光盘放进电脑服务器中&#xff0c;按照官方引导装机 …...

react umi/max 页签(react-activation)

思路&#xff1a;通过react-activation实现页面缓存&#xff0c;通过umi-plugin-keep-alive将react-activation注入umi框架&#xff0c;封装页签组件最后通过路由的wrappers属性引入页面。 浏览本博客之前先看一下我的博客实现的功能是否满足需求&#xff0c;实现功能&#xf…...

计算机网络编程

一、计算机网络&#xff08;概述、简介&#xff09; 说起网络&#xff0c;相信大家都不陌生&#xff0c;把分散在不同地点的计算机设备&#xff0c;通过传输介质、通信设施和网络通信协议&#xff0c;实现资源共享和信息传输的系统&#xff0c;我们称之为&#xff1a;计算机网…...

【计算机网络实训】期末考题-路由重分发+三层交换机VLAN间路由

路由重分发三层交换机VLAN间路由 实验目的实验内容及步骤仿真配置环境搭建要求&#xff1a;实验步骤配置Switch0配置Switch1配置交换机Multilayer Switch 0路由器Router0上的配置路由器Router1的配置 测试PC0 自动获取地址成功&#xff0c;PC0 可 ping 通 switch0&#xff0c;网…...

git 常规操作及设置

git 常规操作及设置 Git是一个分布式版本控制系统&#xff0c;可以用来跟踪文件的修改历史并与其他人进行协作开发。下面是一些常见的Git操作及设置&#xff1a; 初始化仓库&#xff1a;使用命令git init在当前目录创建一个新的Git仓库。 克隆仓库&#xff1a;使用命令git clo…...

element中表格组件的row-class-name和class-name属性的使用以及无效处理

1.这两个属性的使用&#xff0c;row-class-name用在el-table标签上&#xff0c;class-name用在el-table-column标签上。两个属性即可绑定类名也可绑定函数 <!-- 这里是绑定函数&#xff0c;也可以绑定类名 --> <el-table :data"tableData" selection-chang…...

【AI理论知识】EM算法

基本定义 期望最大化算法&#xff08;Expectation-Maximization&#xff0c;EM算法&#xff09;是一种用于估计包含潜在变量的概率模型参数的迭代优化算法。EM算法的主要目标是在存在未观测数据或缺失数据的情况下&#xff0c;通过迭代地进行期望步骤&#xff08;E步&#xff…...

03 OSPF

参考文章 1 初步认识OSPF的大致内容(第三课)-CSDN博客 2...

node.js(express.js)+mysql实现注册功能

文章目录 实现步骤一、获取客户端提交到服务器的用户信息&#xff0c;对表单中的数据&#xff0c;进行合法性的效验 代码如下:二、检测用户名是否被占用三、对密码进行加密四、插入新用户&#xff08;完整代码&#xff09;总结 实现步骤 一、获取客户端提交到服务器的用户信息…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

Windows安装Miniconda

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

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...