51单片机智能温度监控系统.docx
- 文档编号:27281956
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:32
- 大小:50.32KB
51单片机智能温度监控系统.docx
《51单片机智能温度监控系统.docx》由会员分享,可在线阅读,更多相关《51单片机智能温度监控系统.docx(32页珍藏版)》请在冰豆网上搜索。
51单片机智能温度监控系统
51单片机智能温度监控系统
(含上位机和单片机源代码)
上位机部分:
#regionNamespaceInclusions
usingSystem;
usingSystem.Data;
usingSystem.Text;
usingSystem.Drawing;
usingSystem.IO.Ports;
usingSystem.Windows.Forms;
usingSystem.ComponentModel;
usingSystem.Collections.Generic;
usingSystem.IO;
usingSerialPortTerminal.Properties;
#endregion
namespaceSerialPortTerminal
{
#regionPublicEnumerations
publicenumDataMode{Text,Hex}
publicenumLogMsgType{Incoming,Outgoing,Normal,Warning,Error};
#endregion
publicpartialclassfrmTerminal:
Form
{
#regionLocalVariables
[System.Runtime.InteropServices.DllImport("user32.dll")]
publicstaticexternboolReleaseCapture();
[System.Runtime.InteropServices.DllImport("user32.dll")]
publicstaticexternboolSendMessage(IntPtrhwnd,intwMsg,intwParam,intlParam);
publicconstintWM_SYSCOMMAND=0x0112;
publicconstintSC_MOVE=0xF010;
publicconstintHTCAPTION=0x0002;
privateSerialPortcomport=newSerialPort();
privateColor[]LogMsgTypeColor={Color.Blue,Color.Green,Color.Black,Color.Orange,Color.Red};
privateboolKeyHandled=false;
privateboolreceivesu=false;
privateint[]Temperature={-1,-1};//recordTemperature
privatedouble[]TbiaoDU={0,5,10,15,20,25,30,35,40,45,50};
privateint[]TemDrawLine=newint[11];
privatestring[]TemDrawLineTime=newstring[11];
privateintcount=-1;
privateintBiLi=25;//比例
privateintTemBase=0;
privateintHTA=30;//高温报警
privateintLTA=20;//低温报警值
privateDoubleknownHt=-100;//已知的最高温度
privateDoubleknownLt=100;//已知的最低温度
privateintfangdaFlag=1;
//huabi
privatePenbluepen=newPen(Color.FromArgb(76,76,76),1);
privatePenredpen=newPen(Color.Red,2);
privatePenYellowpen=newPen(Color.Yellow,2);
privatePenapen=newPen(Color.FromArgb(0,255,255),1);
privatePenNOMEL=newPen(Color.FromArgb(0,255,0),1);
privateSolidBrushyellowbr=newSolidBrush(Color.Yellow);
privateSolidBrushblackbr=newSolidBrush(Color.Black);
privateSolidBrushbluebr=newSolidBrush(Color.Blue);
privateSolidBrushLightblue=newSolidBrush(Color.FromArgb(0,255,255));
privateSolidBrushredbr=newSolidBrush(Color.Red);
privateinttemCount=1;
#endregion
#regionConstructor
publicfrmTerminal()
{
this.DoubleBuffered=true;
deflult();
InitializeComponent();
InitializeControlValues();
comport.DataReceived+=newSerialDataReceivedEventHandler(port_DataReceived);
}
#endregion
#regionLocalMethods
protectedoverridevoidOnPaint(PaintEventArgse)
{
base.OnPaint(e);
Graphicsdc=e.Graphics;
dc.FillRectangle(blackbr,1,1,1185,601);//绘制背景
dc.DrawRectangle(apen,0,0,1186,602);
if(this.checkBoxautoAda.Checked){AutoAda();}
else{this.fangdaFlag=1;}
dc.DrawLine(bluepen,newPoint(32,180),newPoint(770,180));
for(inti=0;i<=10;i++)//绘制网格
{
dc.DrawLine(bluepen,newPoint(32,200+20*i),newPoint(770,200+20*i));
e.Graphics.DrawString(TbiaoDU[10-i]+"",newFont("Arial",9),redbr,newRectangleF(0,193+20*i,40,20),newStringFormat());
dc.DrawLine(bluepen,newPoint(32+67*i,180),newPoint(32+67*i,400));
}
dc.DrawLine(bluepen,newPoint(770,180),newPoint(770,400));
for(inti=0;i<=count;i++)
{
if(this.TemDrawLine[i]>=HTA*100)
{
dc.DrawLine(redpen,newPoint(32+67*i,400-(this.TemDrawLine[i]*this.fangdaFlag-this.TemBase)/this.BiLi),newPoint(32+67*(i+1),400-(this.TemDrawLine[i]*this.fangdaFlag-this.TemBase)/this.BiLi));
}
elseif(this.TemDrawLine[i]<=LTA*100)
{
dc.DrawLine(apen,newPoint(32+67*i,400-(this.TemDrawLine[i]*this.fangdaFlag-this.TemBase)/this.BiLi),newPoint(32+67*(i+1),400-(this.TemDrawLine[i]*this.fangdaFlag-this.TemBase)/this.BiLi));
}
else
{
dc.DrawLine(NOMEL,newPoint(32+67*i,400-(this.TemDrawLine[i]*this.fangdaFlag-this.TemBase)/this.BiLi),newPoint(32+67*(i+1),400-(this.TemDrawLine[i]*this.fangdaFlag-this.TemBase)/this.BiLi));
}
e.Graphics.DrawString(this.TemDrawLineTime[i],newFont("Arial",9),yellowbr,newRectangleF(i*70,410,66,20),newStringFormat());
//dc.FillRectangle(bluebr,810+27*i,200,27,200);//绘制背景
}
}
privatevoidAutoAda()
{
doubletemBd;
if(this.knownHt-this.knownLt>=0.2)
{
temBd=(this.knownHt-this.knownLt)/10.0;
for(inti=0;i<=10;i++)
TbiaoDU[i]=Math.Round(temBd*i+this.knownLt,2);
this.BiLi=(int)(this.knownHt*1000-this.knownLt*1000)/200;
this.TemBase=(int)(this.knownLt*1000);//做到像素点级别的定位
this.fangdaFlag=10;
}
}
privatevoidExcuseBd_Click(objectsender,EventArgse)
{
intHighT=0,LowT=0;
doubletemBd;
HighT=Int32.Parse(this.textBoxHigh.Text);
LowT=Int32.Parse(this.textBoxLow.Text);
if(HighT>LowT)
{
temBd=(HighT-LowT)/10.0;
for(inti=0;i<=10;i++)
TbiaoDU[i]=Math.Round(temBd*i+LowT,2);
this.BiLi=(HighT-LowT)*100/200;
this.TemBase=LowT*100;//做到像素点级别的定位
this.checkBoxautoAda.Checked=false;
this.Refresh();
}
else
{
MessageBox.Show("输入错误,请重新输入!
","提示信息");
}
}
privatevoiddeflult()
{
for(inti=0;i<=10;i++)
{
TemDrawLine[i]=-100;
TemDrawLineTime[i]="";
}
}
privatevoidfrmTerminal_Load(objectsender,EventArgse)
{
}
privatevoidSaveSettings()
{
Settings.Default.BaudRate=int.Parse(cmbBaudRate.Text);
Settings.Default.DataBits=int.Parse(cmbDataBits.Text);
Settings.Default.Parity=(Parity)Enum.Parse(typeof(Parity),cmbParity.Text);
Settings.Default.StopBits=(StopBits)Enum.Parse(typeof(StopBits),cmbStopBits.Text);
Settings.Default.PortName=cmbPortName.Text;
Settings.Default.Save();
}
privatevoidInitializeControlValues()
{
cmbParity.Items.Clear();cmbParity.Items.AddRange(Enum.GetNames(typeof(Parity)));
cmbStopBits.Items.Clear();cmbStopBits.Items.AddRange(Enum.GetNames(typeof(StopBits)));
cmbParity.Text=Settings.Default.Parity.ToString();
cmbStopBits.Text=Settings.Default.StopBits.ToString();
cmbDataBits.Text=Settings.Default.DataBits.ToString();
cmbParity.Text=Settings.Default.Parity.ToString();
cmbBaudRate.Text=Settings.Default.BaudRate.ToString();
cmbPortName.Items.Clear();
foreach(stringsinSerialPort.GetPortNames())
cmbPortName.Items.Add(s);
if(cmbPortName.Items.Contains(Settings.Default.PortName))cmbPortName.Text=Settings.Default.PortName;
elseif(cmbPortName.Items.Count>0)cmbPortName.SelectedIndex=0;
else
{
MessageBox.Show(this,"TherearenoCOMPortsdetectedonthiscomputer.\nPleaseinstallaCOMPortandrestartthisapp.","NoCOMPortsInstalled",MessageBoxButtons.OK,MessageBoxIcon.Error);
//this.Close();
}
}
privatevoidLog(LogMsgTypemsgtype,stringmsg,intflog)
{
rtfTerminal.Invoke(newEventHandler(delegate
{
rtfTerminal.SelectedText=string.Empty;
rtfTerminal.SelectionFont=newFont(rtfTerminal.SelectionFont,FontStyle.Bold);
//rtfTerminal.SelectionColor=LogMsgTypeColor[(int)msgtype];
if(flog==0)rtfTerminal.SelectionColor=Color.FromArgb(0,255,0);
if(flog==1)rtfTerminal.SelectionColor=Color.FromArgb(255,0,0);
if(flog==-1)rtfTerminal.SelectionColor=Color.FromArgb(0,255,255);
rtfTerminal.AppendText(msg);
rtfTerminal.ScrollToCaret();
}));
}
privatebyte[]HexStringToByteArray(strings)
{
s=s.Replace("","");
byte[]buffer=newbyte[s.Length/2];
for(inti=0;i buffer[i/2]=(byte)Convert.ToByte(s.Substring(i,2),16); returnbuffer; } #endregion #regionEventHandlers privatevoidfrmTerminal_Shown(objectsender,EventArgse) { } privatevoidfrmTerminal_FormClosing(objectsender,FormClosingEventArgse) { SaveSettings(); } privatevoidcmbBaudRate_Validating(objectsender,CancelEventArgse) {intx;e.Cancel=! int.TryParse(cmbBaudRate.Text,outx);} privatevoidcmbDataBits_Validating(objectsender,CancelEventArgse) {intx;e.Cancel=! int.TryParse(cmbDataBits.Text,outx);} privatevoidbtnOpenPort_Click(objectsender,EventArgse)//打开窜口 { if(comport.IsOpen)comport.Close(); else { comport.BaudRate=int.Parse(cmbBaudRate.Text); comport.DataBits=int.Parse(cmbDataBits.Text); comport.StopBits=(StopBits)Enum.Parse(typeof(StopBits),cmbStopBits.Text); comport.Parity=(Parity)Enum.Parse(typeof(Parity),cmbParity.Text); comport.PortName=cmbPortName.Text; comport.Open(); } panel2.IsAccessible=false; } privatevoidport_DataReceived(objectsender,SerialDataReceivedEventArgse)//接收数据 { intbytes=comport.BytesToRead; byte[]buffer=newbyte[bytes]; comport.Read(buffer,0,bytes); StringZ="",X=""; DoubleknownTtemp=0; intflog=0;//0正常1.高温-1.低温 intamplify;//放大 if(ByteArrayToHexString(buffer)==100) {//接收开始 this.receivesu=true; } elseif(this.receivesu&&this.Temperature[0]==-1) { this.Temperature[0]=ByteArrayToHexString(buffer); } elseif(this.receivesu&&this.Temperature[1]==-1) { this.Temperature[1]=ByteArrayToHexString(buffer); } elseif(ByteArrayToHexString(buffer)==101) {//接收结束 if(this.Temperature[0]/10==0) {//不足10 Z="0"; } if(this.Temperature[1]/10==0)//小数部分 { X="0"; } if(this.Temperature[0]>=0) { amplify=this.Temperature[0]*100+this.Temperature[1];//记录下来用于制图 if(amplify>=this.HTA*100)flog=1; if(amplify<=this.LTA*100)flog=-1; if(amplify>this.LTA*100&&lify DateTimeDT=DateTime.Now; Log(LogMsgType.Incoming,Z+this.Temperature[0]+"."+X+this.Temperature[1]+"℃"+DT+"\r\n",flog); this.textBoxrealtime.Text=Z
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 智能 温度 监控 系统