基于STC89C52的DS1621温度检测系统
摘要
本文设计了一种基于STC89C52单片机的DS1621温度检测系统,通过DS1621传感器采集温度数据,利用STC89C52单片机处理数据,并通过串口将温度信息发送至电脑显示。借助Proteus软件进行仿真验证,实现了温度检测系统的功能演示。该系统具有成本低、精度高、稳定性强等特点,适用于环境温度监测、工业控制等领域。
一、引言
温度检测在工业生产、智能家居、环境监测等场景中具有重要意义。传统温度检测系统需兼顾精度、成本与实时性,单片机作为核心控制单元,能高效处理传感器数据。DS1621是一款集成度高的温度传感器,支持数字信号输出,与STC89C52单片机结合,可构建简洁可靠的温度检测系统。本文基于Proteus平台完成系统仿真,验证设计可行性。
二、系统硬件设计
2.1 主控单元:STC89C52单片机
STC89C52是宏晶科技推出的8位单片机,内置8KB Flash、512B RAM,具备3个16位定时器/计数器,支持UART串口通信。其高性能、低功耗特性,满足温度检测系统的控制需求。系统中,单片机负责读取DS1621温度数据,处理后通过串口发送至电脑。
2.2 温度采集模块:DS1621传感器
DS1621是DALLAS公司生产的数字温度传感器,具备以下优势:
1. 测量范围:-55℃~+125℃,精度可达±0.5℃;
2. 支持I²C通信协议,简化硬件连接;
3. 内置温度转换电路,直接输出数字量。
其引脚功能:
1. SCL:时钟线,与单片机I²C时钟引脚连接;
2. SDA:数据线,传输温度数据;
3. TOUT:温度超限报警输出(本设计未启用)。
2.3 串口通信模块
系统通过STC89C52的UART模块实现数据传输。利用MAX232芯片完成TTL电平与RS-232电平转换(Proteus仿真中简化为虚拟终端),将单片机处理后的温度数据发送至电脑。硬件连接时,单片机的TXD引脚连接至虚拟终端的RXD,实现串口通信。
2.4 硬件电路连接
在Proteus中,电路连接如下:
1. DS1621的SCL、SDA分别连接至STC89C52的P3.5、P3.4引脚,构建I²C通信链路;
2. 单片机的P3.1(TXD)连接虚拟终端RXD,实现串口数据输出;
3. 电源与复位电路确保单片机正常工作,晶振电路采用11.0592MHz晶振,满足串口波特率精度需求。
三、系统软件设计
3.1 软件总体流程
系统软件流程:
1. 初始化:配置I²C总线、串口波特率(9600bps);
2. 温度采集:通过I²C协议读取DS1621温度数据;
3. 数据处理:将二进制温度数据转换为十进制,添加单位标识;
4. 串口发送:通过UART将温度信息发送至电脑。
3.2 I²C通信程序设计
DS1621基于I²C协议通信,需编写起始信号、停止信号、数据发送/接收函数。示例代码:
void SendStop()
{
SDA = 0;
SCL = 1;
_nop_();
SDA = 1;
I2C_Busy = 0;
}
void SendByte(uchar wd)
{
uchar i;
a = wd;
for(i=0;i<8;i++)
{
SCL = 0;
_nop_();
_nop_();
SDA = MSB;
a <<= 1;
_nop_();
_nop_();
SCL = 1;
_nop_();
_nop_();
SCL = 0;
}
SDA = 1;
SCL = 1;
_nop_();
_nop_();
if(!SDA)
{
SCL = 0;
_nop_();
_nop_();
}
else
{
NO_Ack = 1;
SCL = 0;
_nop_();
_nop_();
}
}
3.3 温度读取与处理
DS1621温度数据存储格式:12位有效数据,前8位为整数部分,后4位为小数部分。转换代码:
void SendTemperatureToSerialPort(uchar val)
{
if(val>200)
{
val = 255-val;
SendCharToSerialPort('-');
if(!point)
val+=1;
}
SendCharToSerialPort(Array[(val/10)/10]);
SendCharToSerialPort(Array[(val/10)%10]);
SendCharToSerialPort(Array[val%10]);
SendCharToSerialPort('.');
if(point)
SendCharToSerialPort('5');
else
SendCharToSerialPort('0');
SendCharToSerialPort(' ');
SendCharToSerialPort('C');
SendCharToSerialPort('\r');
}
3.4 串口发送程序
初始化串口:
void InitialiseSerialPort()
{
TMOD = 0x20;
TH1 = 0xfd;
SCON = 0x50;
TR1 = 1;
}
四、Proteus仿真实现
4.1 仿真步骤
1. 在Proteus中搭建电路:放置STC89C52、DS1621、虚拟终端,连接对应引脚;
2. 编写Keil工程代码,编译生成.hex文件;
3. 将.hex文件载入STC89C52仿真模型;
4. 运行仿真,观察虚拟终端输出。
4.2 仿真结果分析
仿真运行后,虚拟终端持续显示温度数据(如“033.5℃”),表明系统正常工作。DS1621采集温度,经单片机处理后通过串口发送,验证了设计的正确性。若温度异常,可通过修改DS1621配置寄存器,设置报警阈值,扩展系统功能。
五、结论
本文设计的基于STC89C52的DS1621温度检测系统,通过硬件电路与软件程序协同,实现了温度采集、处理与串口传输功能。Proteus仿真验证了系统可行性,该设计具备模块化清晰、扩展性强的特点,可进一步集成显示模块、报警模块,应用于更复杂的温度监测场景。未来可优化代码效率,提升系统实时性,满足工业级应用需求。