基于51单片机的恒温箱控制系统设计与实现

本文详细描述了一个基于AT89C51单片机的恒温箱控制系统,通过精确控制和灵活设置温度阈值,实现温度的实时监测和调控。利用Proteus进行系统仿真,验证了设计的可行性和稳定性。
摘要由CSDN通过智能技术生成

背景
恒温箱是一种广泛应用于实验室、医疗、生物、农业等领域的设备,用于提供稳定的温度环境。恒温箱的控制系统对于保持稳定的温度是至关重要的。目前,大多数恒温箱使用传统的机械控制方式,无法实现精准的温度控制和温度阈值设置。

随着单片机技术的快速发展和广泛应用,基于单片机的恒温箱控制系统成为了一种主流的选择。采用单片机可以更好地实现温度的精确控制、温度阈值的灵活设置以及各种状态的监测与反馈。本文选取了AT89C51作为单片机的核心控制器,并基于该单片机设计了一套完整的恒温箱控制系统。

本文的目标是设计一个基于AT89C51的恒温箱控制系统,通过单片机的数字输入输出功能,实现温度传感器的读取、温度的显示、高低温阈值的设置以及继电器和指示LED的控制。通过合理的系统方案设计和编程实现,能够满足恒温箱的各种控制需求,并提高温度控制的精确性和稳定性。

为了验证设计方案的可行性和有效性,本文将采用Proteus平台进行系统仿真。Proteus是一种常用的电子电路仿真软件,具备强大的仿真和调试功能,能够模拟和验证设计方案在实际应用中的性能和可靠性。通过在Proteus平台上进行全面的仿真测试和优化调试,我们可以确保所设计的恒温箱控制系统具有较高的稳定性和可靠性。

1.方案设计
硬件部分:

AT89C51单片机:此单片机具有足够的IO口和处理能力,适合用于控制系统。
7SEG-MPX4-CA数码管:可以通过单片机的P0口驱动,实现温度显示功能。
DS18B20温度传感器:可通过单片机的P3.7引脚进行温度读取。
继电器和指示LED:通过单片机的P1.2/P1.4控制继电器和指示LED的状态。
蜂鸣器:通过单片机的P3.6控制蜂鸣器的发声功能。
设置按键、加减按键:通过单片机的P3.1/P3.3/P3.2引脚进行按键检测。
软件部分:

主要功能模块:温度读取、温度显示、阈值设置、控制继电器和指示LED的状态。
程序流程图:设计单片机程序的流程图,明确各个模块的功能和调用关系。
温度读取算法:根据DS18B20温度传感器的工作原理,编写相应的温度读取算法。
阈值设置逻辑处理:按下设置键后,通过加减键调整高低温阈值并进行保存。
控制继电器和指示LED逻辑处理:根据当前温度和阈值,控制继电器和指示LED的状态。
2.硬件设计
2.1单片机控制电路
首先,准备一个AT89C51单片机芯片和一个12MHz晶振。将晶振的两个引脚分别连接到单片机的XTAL1和XTAL2引脚,并通过两个22pF电容将它们与地相连。
接下来,连接单片机芯片的VCC引脚到5V电源,GND引脚到地。
然后,将单片机的EA(External Access)引脚接5V。

2.2数码管显示电路
使用4位共阳极七段数码管(比如7SEG-MPX4-CA),通过四个33Ω电阻将其A-DP引脚依次连接到单片机的P0.0-P0.7口引脚。这些引脚将用于控制数码管的每个段的亮灭状态。
在这里插入图片描述

2.3蜂鸣器电路
在单片机的P3.6引脚与蜂鸣器之间,加一个PNP型晶体管(比如2N3906)作为开关,以便控制蜂鸣器的声音输出。
在这里插入图片描述

2.4温度传感器电路
准备一个DS18B20温度传感器,将其引脚通过一个4.7kΩ上拉电阻连接到5V电源,并将引脚上的电容与地相连。传感器的数据线连接到单片机的P3.7引脚。
通过单总线通信协议,单片机可以从P3.7引脚读取传感器发送的温度数据。
在这里插入图片描述

2.5继电器电路
准备两个继电器,将它们的控制引脚分别连接到单片机的P1.2和P1.4引脚,当P1.2引脚输出低电平时,继电器1闭合;当P1.4引脚输出低电平时,继电器2闭合。
将继电器的常闭端分别连接到恒温箱的加热器和制冷器,将继电器的常开端连接到电源。
在这里插入图片描述
3.系统软件设计

3.1主程序讲解
/主函数/
void main(void)
{
uint z;
InitTimer(); //初始化定时器
EA=1; //全局中断开关
TR0=1; //打开定时器定时开关
ET0=1; //开启定时器0
IT0=1; //外部中断下降沿有效
IT1=1;
check_wendu();
check_wendu(); //读取两次温度,防止开机读取到85°C,使继电器误操作
for(z=0;z<300;z++) //开机画面
{
Disp_init();
}
while(1) //while循环
{
if(SET0) //判断设置键是否按下
{
Delay(2000); //延时去抖
do{}while(SET
0); //执行空语句,判断按键是否松开,松开向下执行,否则重新执行空语句
set_st++;TIMER_COUNT=0;shanshuo_st=1; //设置键松开后将设置变量加1,闪烁标志位置1
if(set_st>2)set_st=0; //当设置完成时,退出设置
}
if(set_st0) //正常工作时
{
EX0=0; //关闭外部中断0
EX1=0; //关闭外部中断1
check_wendu();
Disp_Temperature(); //检测温度
Alarm(); //报警检测
}
else if(set_st
1) //设置上限时
{
BEEP=1; //关闭蜂鸣器
RL_L=1;
RL_H=1; //继电器关闭
EX0=1; //开启外部中断0
EX1=1; //开启外部中断1
if(TIMER_COUNT>=10){shanshuo_st=~shanshuo_st;TIMER_COUNT=0;}
if(shanshuo_st) {Disp_alarm(shangxian);} //闪烁
}
else if(set_st==2) //设置下限时
{
BEEP=1; //关闭蜂鸣器
RL_L=1;
RL_H=1; //关闭继电器
EX0=1; //开启外部中断0
EX1=1; //开启外部中断1
if(TIMER_COUNT>=10){shanshuo_st=~shanshuo_st;TIMER_COUNT=0;}
if(shanshuo_st) {Disp_alarm(xiaxian);} //闪烁
}
}
}
主函数实现了整个温度检测、恒温控制和报警的逻辑流程具体如下。

  1. 初始化设置:包括初始化IO口、定时器、中断等。

  2. 设置初始状态:通过设置变量set_stshanshuo_st的初始值为0,表示没有进行温度阈值的设置和数码管不需要闪烁。

  3. 进入主循环:

    a. 检测温度:调用check_wendu()函数读取当前温度值,并进行处理。

    b. 显示温度:调用Disp_Temperature()函数,将温度值显示在数码管上。

    c. 报警检测:调用Alarm()函数,检测当前温度是否超过预设的温度阈值,如果超过则触发报警。

    d. 设置上限状态:当按下按键SET,,进入设置上限状态。

3.2温度采集程序讲解
/读取温度/
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
float s=0;
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0x44); //启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
a=ReadOneChar(); //读低8位
b=ReadOneChar(); //读高8位
t=b; //将高8位数据存入t
t<<=8; //t左移8位
t=t|a; //将t|a得到一个16位的温度数据
tt=t0.0625; //一个最低位代表0.0625°C,所以要0.0625得到实际温度,因为有小数运算,所以定义的tt是float浮点型变量
t= tt*10+5; //放大10倍输出并四舍五入(将温度放大10倍可以得到小数部分)
return(t); //返回得到的温度值
}
这个函数的逻辑功能是读取温度。它首先通过初始化DS18B20温度传感器,然后发送命令启动温度转换,并重新初始化传感器。接着发送命令读取温度寄存器的数据,并将低8位和高8位分别保存到变量a和b中。然后将高8位数据存入变量t,并将t左移8位后与低8位数据a进行或操作,得到一个16位的温度数据。再通过乘以0.0625来得到实际温度值,并将其放大10倍并四舍五入得到整数部分和小数部分。最后返回得到的温度值。

4.系统仿真调试

4.1. 仿真电路设计

首先,我们使用Proteus平台进行仿真设计。仿真电路如下所示:
在这里插入图片描述

在进行仿真前,我们需要确保所有的元件和引脚连接正确。我们根据需求配置了AT89C51单片机的引脚,以及其他组成部分的引脚。

在开始仿真之前,建议在“Project->Configuration Properties”中,将“Update Time of Displayed Results”设置为较小的值(例如20ms),以确保仿真过程中数据更新的频率较高。

4.2. 仿真步骤

进行以下步骤来完成仿真调试:

步骤1:初始化系统

  • 上电时,数码管将显示当前系统温度,同时继电器1和继电器2都处于断开状态,指示灯熄灭。
    在这里插入图片描述

步骤2:设置高温阈值

按下设置键后,数码管开始闪烁显示高温阈值。
按加和减键可以调整高温阈值,每按一次温度值将增加/减少1摄氏度。
再次按下设置键,数码管将停止闪烁,阈值设置生效。
在这里插入图片描述

步骤3:设置低温阈值

按下设置键后,数码管开始闪烁显示低温阈值。
按加和减键可以调整低温阈值,每按一次温度值将增加/减少1摄氏度。
再次按下设置键,数码管将停止闪烁,阈值设置生效。
在这里插入图片描述

步骤4:温度控制

在这里插入图片描述

当温度超过高温阈值时,继电器1断开,继电器2闭合,指示灯亮起;整个系统开始降温。
在这里插入图片描述

当温度低于低温阈值时,继电器1闭合,继电器2断开,指示灯亮起;整个系统开始升温。

4.3. 仿真结果

通过对仿真调试的进行,我们可以观察到以下结果:

数码管正确显示当前系统温度,并根据设置显示高温阈值和低温阈值。
当温度超过高温阈值时,继电器1断开,继电器2闭合,指示灯亮起;整个系统降温。
当温度低于低温阈值时,继电器1闭合,继电器2断开,指示灯亮起;整个系统升温。

这些结果验证了基于AT89C51的恒温箱控制系统的设计和仿真。
操作视频

5.总结
本文旨在设计一个基于AT89C51单片机的恒温箱控制系统。通过该系统的设计和实现,我们成功实现了对恒温箱内温度的实时监测和控制,并能够根据设定的高温和低温阈值自动调节箱内温度。

在设计中,我们选择了AT89C51单片机作为主控芯片,其具有强大的计算和控制能力。通过单片机的P0口驱动7SEG-MPX4-CA数码管进行温度显示,采用P2口控制数码管的选中行,使得数码管能够根据需要显示不同的位数。同时,将DS18B20温度传感器接入单片机的P3.7引脚,实现对恒温箱内温度的检测。

在实验中,我们成功实现了系统的各项功能。上电后,数码管能够显示当前系统温度。按下设置键后,数码管开始闪烁显示高温阈值,通过加减键可以调整该阈值;再次按下设置键后,数码管开始闪烁显示低温阈值,同样可以通过加减键进行调整。最后再次按下设置键,数码管将显示当前系统温度,并使得阈值设置生效。

在实际应用中,当温度超过设定的高温阈值时,继电器1断开,继电器2闭合,指示灯亮起,系统开始降温;当温度低于设定的低温阈值时,继电器1闭合,继电器2断开,指示灯亮起,系统开始升温。通过这种方式,我们能够有效地控制恒温箱内温度的稳定,并满足特定需要下的温度要求。

总结而言,本文成功设计并实现了基于AT89C51的恒温箱控制系统。该系统具有良好的可靠性和稳定性,在恒温箱内温度控制方面具有较高的精度和灵活性。然而,在未来的研究中,我们也可以进一步改进和优化系统的功能和性能,以适应更加复杂和多样化的恒温需求。

文中源代码、仿真源文件全部资料下载地址

  • 53
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

达西西66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值