基于单片机与PC机的温度监测系统设计
摘要:设计了基于单片机和PC机的温度监测系统,温度传感器采用DS18B20。下位机采用AT89S52单片机,可以显示温度和超限报警。PC机作为上住机设定上下限报警温度,接收单片机的温度数据,处理后实时显示温度和绘制温度曲线,还实现了超限报警和保存数据功能。上位机利用Matlab强大的数值计算、图形显示和串口操作功能,具有友好人机交互界面,实现了温度动态监测。
关键词:单片机;PC机;温度监测;Matlab;串口
温度是一个重要的物理量,在工农业生产和日常生活中,经常需要对环境温度进行监测。本文设计了一个温度监测系统,温度传感器采用DS18B20,下位机采用AT89S52单片机,实现温度测量、显示、超限报警等功能,上位机采用PC机,利用Matlab设计了友好人机交互界面,实现温度的采集、显示、绘图、报警、保存数据等功能。
1 系统总体设计
系统采用AT89S52单片机作为下位机,PC机作为上位机,二者通过串口发送或接收数据,实现环境温度的测量、显示、超限报警、测温数据保存等功能。系统总体设计框图如图1所示。
单片机最小系统包括单片机工作所必需的复位电路、时钟电路和电源电路。温度传感器采用DS18B20芯片,测量温度范围为-55~+125 ℃,该芯片不需要外接电源,可编程的分辨率为9~12位,测温分辨率最高可达0.062 5℃,数据传送只需要一条通信线,接单片机的P2.0口。温度显示部分使用4个八段LED共阳极数码管,采用动态驱动方式,数码管的a,b,c,d,e,f,g,DP八段由单片机P0.0—P0.7口控制,单片机的P1.0—P1.3口控制4个数码管轮流动态显示。超限温度报警采用蜂鸣器,由单片机的P2.1口控制发声。
PC机的串行口采用的是标准的RS 232接口,而单片机的串行口电平是TTL电平,与RS 232的电气特性不匹配,所以系统采用常用芯片MAX 232来完成电平的转换,使单片机的串行口能与RS 232接口通信。上位机动态温度监测系统利用Matlab软件设计友好人机交互界面,实现温度数据的设置、采集、计算、显示与保存等功能。
2 下位机程序设计
单片机作为下位机,其主要任务是:
1)通过DS18B20实现温度数据的采集和处理,并在LED数码管上实时显示当前温度,保留小数点后1位;
2)通过串口接收上位机设定的上下限报警温度,并在LED数码臂上显示;
3)通过串口接收要求发送温度数据的命令,向上位机发送温度数据;
4)判断当前温度,如果超限启动蜂鸣器报警,设定不同频率的方波驱动蜂鸣器发出不同声音,用来区分超上限还是超下限。
单片机采用Keil C51编写程序,DS18B20分辨率设为12位,其主程序流程图如图2所示。主程序主要完成系统的初始化,主要包括DS18B20和串口的初始化;4个LED数码管显示“0000”,等待上位机发送上限温度数据;接收数据后显示,等待上位机发送下限温度数据;接收数据,显示下限温度并延迟约2秒后开始测湿。读DS18B20温度值,将读取的低8位字节和高8位字节组成16位无符号整型温度数据(其中低4位为沮度的小数部分,中间8位为温度的整数部分),处理沮度数据并在数码臂上显示温度值;判断温度,超限报警;接收到上位机发送的命令字“255”就向上位机发送由DS18B20读出的16位温度数据,先发送低8位字节,后发送高8位字节;返回读DS18B20温度值。
3 上位机程序设计
PC机作为上位机,主要任务包括:
1)设定上下限报警温度,通过串口发送给下位机;
2)通过串口发送要求单片机传送温度数据的命令,命令数据为“255”;
3)通过串口接收下位机的温度数据,做各种运算后显示温度值,并绘图;
4)判断当前温度,如果超限启动报警指示和发声报警;
5)保存测温时间及数据,以备查询。
上位机采用Matlab编写程序实现与下位机通信及温度监测。Matlab是MathWorks公司开发的科学计算软件,具有强大的数值计算和图形显示功能,利用Matlab,用户还可以操作计算机的串口与外部设备进行通信,并且支持BS-232、RS422和RS485接口标准。Matlab内置了GUI(Gr aphie UserInterface)模块,具有界面设计开发功能。本文利用MatlabGUI设计了上位机系统界面,采用M文件编程设计的方式,比GUIDE(Graphical User Interface Development Environment)辅助设计的方式功能更强,且代码易于修改。系统测温的界面如图3所示。
测温界面保留了MATLAB窗体框架窗口的菜单,利用菜单设计函数uimenu()设计了一级菜单About和二级菜单Operation steps和Contact us,可以弹出窗口显示系统的操作步骤和作者的联系方式。
利用函数uicontrol()的Style属性的text类型在窗口左下角建立设定上下限温度的显示、超限报警指示、测温开始和结束时间显示,在窗口右上角建立当前、最大、最小和平均温度显示。利用函数axes()建立1个位于窗口中心坐标轴,用于绘制动态温度曲线。利用函数uicontrol()的Style属性的pushbutton类型在窗口右下角建立5个按钮。对各控件编辑Callback回调函数,实现完整的上位机温度监测功能。
“打开串口”按钮操作主要完成串口初始化,其中利用了obi=serial(‘coml’,‘baudrate’,9600,‘parity’,‘none’,‘databits’,8,‘stopbits’,1)语句设定串口对象obj连接到串口com1,设定波特率为9600,不做奇偶校验,设定传输的数据位数目为8位,字节终止位数为1位。再利用fopen(obj)打开串口对象。
“关闭串口”按钮操作主要利用fclose(obj)和delete(obj)语句完成串口的释放。
“开始测温”按钮操作是系统软件的核心,利用了fwrite(obj,255)语句发送命令字“255”,要求下位机发送温度数据;利用fread(obj,2)语句接收2字节的16位温度数据,先接收低8位字节,后接收高8位字节,16位数据中低12位为温度数据,首先判断温度正负,再计算当前温度,累计测量温度的最大值、最小值和平均值,小数点后保留1位显示在界面的右上角数据显示区;根据当前温度利用plot()函数实时
绘制温度曲线;判断温度是否超限,如果超限进行报警指示,当前温度显示红色,并利用sound()函数发声报警。当温度超限时的报警界面如图4所示。
- FPGA的DSP性能揭秘(06-16)
- 基于单片机通用引脚的软件UART设计(10-16)
- 分时操作系统思想在单片机中的具体应用 (10-30)
- 基于AT89C51+DSP的双CPU伺服运动控制器的研究(05-26)
- 关于RTX51 TINY的分析与探讨(05-30)
- 基于MC9S12DGl28单片机的智能寻迹车设计(04-03)