基于C#和51单片机的实验室温度自动监控报警系统.docx
《基于C#和51单片机的实验室温度自动监控报警系统.docx》由会员分享,可在线阅读,更多相关《基于C#和51单片机的实验室温度自动监控报警系统.docx(21页珍藏版)》请在冰豆网上搜索。
![基于C#和51单片机的实验室温度自动监控报警系统.docx](https://file1.bdocx.com/fileroot1/2022-11/20/b515c4d4-8aa6-4ed9-9474-e9e549096795/b515c4d4-8aa6-4ed9-9474-e9e5490967951.gif)
基于C#和51单片机的实验室温度自动监控报警系统
《C#程序设计》
课程设计报告
(2013—2014学年第2学期)
题目:
基于C#和51单片机的实验室温度监控系统
专业:
通信工程
班级:
5B
姓名学号:
冯旭瀚20113100141
陈健林20113100128
苏炳昌20113100107
指导教师:
唐小煜
成绩:
基于C#和51单片机的实验室温度监控系统
摘 要
本文描述的是基于PC和单片机——软硬结合的温度监控系统,主要功能模块包括:
单片机温度采集模块,串口通信模块及XML数据存储模块,分别实现环境温度感应和监控,数据通信和格式转换,数据库存储和信息查询。
三部分连接组合,既能从硬件上实时监控当前温度,并直接给以肉眼警报信号;又能从软件上随时查询以往温度信息。
第一章绪 论
1.1设计目的
本课程设计的目的是使学生能熟练掌握单片机程序设计,串口通信程序编写,XML数据库操作,并将三者充分结合,展示系统实际功效。
希望通过本次课程设计锻炼学生使用C#语言解决实际问题的能力。
1.2开发工具选择
本系统后台数据库采用XML,该数据库系统在安全性、准确性和运行速度方面有绝对的优势,并且处理数据量大,效率高;并用Microsoft公司的VisualStudio2008作为主要开发工具,可和XML无缝链接。
系统前端采用单片机温度监控系统,实时向PC传送温度数据。
1.3开发环境
系统前端平台:
单片机
系统开发语言:
C#
数据库:
XML
1.4本报告的主要内容
本报告详细的介绍了温度自动监控系统的开发过程,主要涉及到的工作如下:
系统的需求分析、系统的总体设计、系统的概念设计、系统各模块的详细设计、系统运行和测试。
第二章需求分析
2.1系统需求简介
2.1.1系统目标
(1)单片机自动向PC传输当前的温度数据
(2)管理员能随时查看以往温度信息
(3)系统在温度超标时能发出警报
2.1.2功能需求分析
本系统的功能需求分析如下:
(1)当前温度监控:
使用单片机温度监控模块,实时接收当前温度信息,并每隔一定时间通过串口发送温度数据到PC;
(2)管理员查询以往温度信息:
通过串口将接收到的温度信息存储到XML中,并添加当前的时间,以便管理员能直接,清晰地查看;
(3)温度超标时报警:
主程序中添加监控模块,在温度超过预定值时,及时产生信号告诉单片机启动报警装置。
2.1.3性能需求分析
(1)单片机硬件需求:
简单方便的小模块,便于放置且稳定性高,但监控数据精度不需要太高。
(2)数据库软件需求:
数据容量足够大,并能方便查询,且不易丢失。
第三章总体设计
3.1设计概述
根据需求把整个系统分化成不同的模块,每个模块完成一个特定的子功能。
把这些模块结合起来组成一个整体。
逐一实现各个功能;
3.2系统总体结构及功能模块划分
经过对系统的分析,将温度监控系统划分三个功能模块:
单片机温度监控模块
,串口数据通信模块,XML数据存储和查询模块。
如图3.2.1系统的总体结构。
图3.2.1系统的总体结构
第四章详细设计
4.1概述
详细设计阶段的根本目标是确定应该怎样具体的实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。
4.2系统程序流程图
程序流程图又称为程序框图,它可将整个程序的总体流程清楚明白的显示出来。
如图4.2.1系统总流程图结构
4.3系统功能模块简介
4.3.1系统界面
用户打开串口,成功匹配后发送指令让单片机工作,接收显示温度数据及当前时间,并用画出曲线显示温度变化。
系统界面如图4.3.1。
图4.3.1系统界面
单击“新建XML文件”,创建名为“aaa”的XML文件,如图4.3.2所示
图4.3.2创建XML文件
图4.3.3温度正常时监控界面
当温度超过31度时,显示告警信息,并通知单片机启动制冷设备。
图4.3.4温度过高时监控界面
4.3.2单片机模块
温度传感器DS18B20,具有体积小,硬件开销低,抗干扰能力强,精度高的特点,和单片机构成温度采集模块。
单片机等待接收PC的指令后,开始获取当前温度数据,并通过串口发送到PC。
单片机P0^7口亮时为单片机开始工作,P0^6口亮时为启动制冷设备。
单片机工作如图4.3.5,如图4.3.6。
图4.3.5单片机正常工作图
图4.3.6单片机启动制冷设备图
第五章主要功能模块代码
5.1C#代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.IO;
usingSystem.IO.Ports;
usingSystem.Xml;
namespace_11_Serial
{
publicpartialclassF_Serial:
Form
{
privateXmlDataDocumentxmlDoc;//声明全局变量xmlDoc,类型是XmlDataDocument
//声明加载xml文件的方法
privatevoidxmlLoad()
{
xmlDoc=newXmlDataDocument();
xmlDoc.Load("D:
\\aaa.xml");//文件名是aaa.xml
}
//自定义委托类型,委托签名(解释见PPT)和该委托将要绑定的方法签名应保持一致(本例为不带参数的方法)
//委托类型应在本处而不能在方法里面定义
publicdelegatevoidReadSptEventHandler();
//实例化一个串口
SerialPortsp=newSerialPort();
publicF_Serial()
{
InitializeComponent();
}
///
///控件加载后设置
///
///
///
privatevoidSerial_Load(objectsender,EventArgse)
{
//将可用的串口名填充到下拉菜单中
comboBox1.DataSource=SerialPort.GetPortNames();
}
///
///选择串口并打开
///
///
///
privatevoidcomboBox1_SelectedIndexChanged(objectsender,EventArgse)
{
//打开新串口前,先关闭之前已打开的串口,避免长期占用系统资源
if(spt.IsOpen)
{
spt.Close();
}
//重新设置选定串口
spt.PortName=comboBox1.Text;//指定要使用的串口号
spt.BaudRate=9600;//设定波特率
spt.DataBits=8;//设定字长
spt.StopBits=System.IO.Ports.StopBits.One;//设定停止位
spt.Parity=System.IO.Ports.Parity.None;//设定奇偶验证协议
spt.Encoding=Encoding.UTF8;//设定通信中使用的字符集
spt.DtrEnable=true;//数据终端准备就绪(可以接收数据)
spt.ReadTimeout=1000;//设置数据读取超时为1秒
spt.WriteTimeout=1000;//设置数据发送超时为1秒
//打开串口
try
{
spt.Open();
if(spt.IsOpen)
{
CloseSpt.Enabled=true;
msgshow.Text="成功打开串口"+spt.PortName;
}
}
catch(Exceptionmsg)
{
msgshow.Text=msg.Message;
}
}
///
///关闭指定串口
///
///
///
privatevoidCloseSpt_Click(objectsender,EventArgse)
{
spt.Close();
if(!
spt.IsOpen)
{
CloseSpt.Enabled=false;
msgshow.Text="已成功关闭串口"+spt.PortName;
}
}
///
///发送串口信息
///
///
///
privatevoidDataSend_Click(objectsender,EventArgse)
{
try
{
//发送一行数据
spt.WriteLine(TextToSend.Text);
}
catch(Exceptionmsg)
{
MessageBox.Show(msg.Message);
}
}
///
///接口接收数据时调用事件函数
///
///
///
privatevoidspt_DataReceived(objectsender,SerialDataReceivedEventArgse)
{
//直接使用同步的方法启动一个委托,程序会在此处等待,直至全部数据读取完毕,
ReadSptEventHandlerrse=newReadSptEventHandler(ReadSpt);
Logs.Invoke(rse);
}
///
///
///
//串口数据读取在文本框中显示并写入XML
voidReadSpt()
{
//以字符的方式读取串口的全部数据
stringrstr=spt.ReadExisting();
//C#获取当前时间的格式
DateTime.Now.ToShortTimeString();
DateTimedt=DateTime.Now;
//将数据添加到Logs控件
Logs.Appe