基于C#的串口通信上位机和下位机源程序.docx
《基于C#的串口通信上位机和下位机源程序.docx》由会员分享,可在线阅读,更多相关《基于C#的串口通信上位机和下位机源程序.docx(27页珍藏版)》请在冰豆网上搜索。
基于C#的串口通信上位机和下位机源程序
基于单片机串口通信的上位机和下位机实践
串口是计算机上一种非常通用设备通信的协议〔不要与通用串行总线UniversalSerialBus或者USB混淆〕。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信的概念非常简单,串口按位〔bit〕发送和接收字节。
尽管比按字节〔byte〕的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
它很简单并且能够实现远距离通信。
比方IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。
首先亮出C*的源程序吧。
主要界面:
只是作为简单的运用,可以扩展的。
源代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Te*t;
usingSystem.Windows.Forms;
usingSystem.IO.Ports;
usingSystem.Timers;
namespace单片机功能控制
{
publicpartialclassForm1:
Form
{
publicForm1()
{
Initializeponent();
}
SerialPortsp=newSerialPort();
privatevoidbutton1_Click(objectsender,EventArgse)
{
Stringstr1=boBo*1.Te*t;//串口号
Stringstr2=boBo*2.Te*t;//波特率
Stringstr3=boBo*3.Te*t;//校验位
Stringstr4=boBo*5.Te*t;//停顿位
Stringstr5=boBo*4.Te*t;//数据位
Int32int2=Convert.ToInt32(str2);//将字符串转为整型
Int32int5=Convert.ToInt32(str5);//将字符串转为整型
groupBo*3.Enabled=true;//LED控制界面变可选
try
{
if(button1.Te*t=="翻开串口")
{
if(str1==null)
{
MessageBo*.Show("请先选择串口!
","Error");
return;
}
sp.Close();
sp=newSerialPort();
sp.PortName=boBo*1.Te*t;//串口编号
sp.BaudRate=int2;//波特率
switch(str4)//停顿位
{
case"1":
sp.StopBits=StopBits.One;
break;
case"1.5":
sp.StopBits=StopBits.OnePointFive;
break;
case"2":
sp.StopBits=StopBits.Two;
break;
default:
MessageBo*.Show("Error:
参数不正确","Error");
break;
}
switch(str3)
{
case"NONE":
sp.Parity=Parity.None;break;
case"ODD":
sp.Parity=Parity.Odd;break;
case"EVEN":
sp.Parity=Parity.Even;break;
default:
MessageBo*.Show("Error:
参数不正确","Error");
break;
}
sp.DataBits=int5;//数据位
sp.Parity=Parity.Even;//设置串口属性
sp.Open();//翻开串口
button1.Te*t="关闭串口";
te*tBo*1.Te*t=Convert.ToString(sp.PortName)+"已开启!
";
}
else
{
sp.Close();
button1.Te*t="翻开串口";
groupBo*3.Enabled=false;//LED控制界面变灰色
te*tBo*1.Te*t=Convert.ToString(sp.PortName)+"已关闭!
";
}
}
catch(E*ceptioner)
{
MessageBo*.Show("Error:
"+er.Message,"Error");
return;
}
}
privatevoidForm1_Load(objectsender,EventArgse)
{
//初始化
te*tBo*1.Te*t="欢迎使用简易的串口助手!
";
groupBo*3.Enabled=false;//LED控制界面变灰色
groupBo*6.Enabled=false;
groupBo*7.Enabled=false;
groupBo*8.Enabled=false;
button3.Enabled=false;
button6.Enabled=false;
timer1.Start();
try
{
foreach(stringinSystem.IO.Ports.SerialPort.GetPortNames())//自动获取串行口名称
this.boBo*1.Items.Add();
//默认设置
boBo*1.SelectedInde*=0;//选择第一个口
boBo*2.SelectedInde*=4;//波特率4800
boBo*3.SelectedInde*=0;//校验位NONE
boBo*4.SelectedInde*=0;//停顿位为1
boBo*5.SelectedInde*=0;//数据位为8
}
catch
{
MessageBo*.Show("找不到通讯端口!
","串口调试助手");
}
}
privatevoidtimer1_Tick(objectsender,EventArgse)
{
label6.Te*t=DateTime.Now.ToString();
}
privatevoidbutton2_Click(objectsender,EventArgse)
{
try{
if(button2.Te*t=="开启")
{
groupBo*6.Enabled=true;
radioButton1.Checked=false;
radioButton2.Checked=false;
radioButton3.Checked=false;
radioButton4.Checked=false;
checkBo*1.Checked=false;
checkBo*2.Checked=false;
checkBo*3.Checked=false;
checkBo*4.Checked=false;
checkBo*5.Checked=false;
checkBo*6.Checked=false;
checkBo*7.Checked=false;
checkBo*8.Checked=false;
button3.Enabled=true;
te*tBo*2.Te*t=String.Empty;
button2.Te*t="关闭";
}
else
{
groupBo*6.Enabled=false;
button3.Enabled=false;
button2.Te*t="开启";
te*tBo*2.Te*t=String.Empty;
}
}
catch(E*ceptioner)
{
MessageBo*.Show("Error:
"+er.Message,"Error");
return;
}
}
privatevoidbutton3_Click(objectsender,EventArgse)
{
groupBo*6.Enabled=true;
label7.Te*t="已发送";
if(te*tBo*2.Te*t==")
MessageBo*.Show("发送失败,请选择发送的数据!
");
else
sp.WriteLine(te*tBo*2.Te*t);//往串口写数据
}
privatevoidcheckBo*1_CheckedChanged(objectsender,EventArgse)
{
try{
if(checkBo*1.Checked)
{
checkBo*1.Checked=true;
checkBo*2.Checked=false;
checkBo*3.Checked=false;
checkBo*4.Checked=false;
checkBo*5.Checked=false;
checkBo*6.Checked=false;
checkBo*7.Checked=false;
checkBo*8.Checked=false;
label7.Te*t="准备发送";
te*tBo*2.Te*t="1";
}
}
catch(E*ceptioner)
{
MessageBo*.Show("Error:
"+er.Message,"Error");
return;
}
}
privatevoidcheckBo*2_CheckedChanged(objectsender,EventArgse)
{
try{
if(checkBo*2.Checked)
{
checkBo*1.Checked=false;
checkBo*2.Checked=true;
checkBo*3.Checked=false;
checkBo*4.Checked=false;
checkBo*5.Checked=false;
checkBo*6.Checked=false;
checkBo*7.Checked=false;
checkBo*8.Checked=false;
label7.Te*t="准备发送";
te*tBo*2.Te*t="2";
radioButton1.Checked=false;
radioButton2.Checked=false;
radioButton3.Checked=false;
radioButton4.Checked=false;
}
}
catch(E*ceptioner)
{
MessageBo*.Show("Error:
"+er.Message,"Error");
return;
}
}
privatevoidcheckBo*3_CheckedChanged(objectsender,EventArgse)
{
try
{
if(checkBo*3.Checked)
{
checkBo*1.Checked=false;
checkBo*2.Checked=false;
checkBo*3.Checked=true;
checkBo*4.Checked=false;
checkBo*5.Checked=false;
checkBo*6.Checked=false;
checkBo*7.Checked=false;
checkBo*8.Checked=false;
radioButton1.Checked=false;
radioButton2.Checked=false;
radioButton3.Checked=false;
radioButton4.Checked=false;
label7.Te*t="准备发送";
te*tBo*2.Te*t="3";
}
}
catch(E*ceptioner)
{
MessageBo*.Show("Error:
"+er.Message,"Error");
return;
}
}
privatevoidcheckBo*4_CheckedChanged(objectsender,EventArgse)
{
try
{
if(checkBo*4.Checked)
{
checkBo*1.Checked=false;
checkBo*2.Checked=false;
checkBo*3.Checked=false;
checkBo*4.Checked=true;
checkBo*5.Checked=false;
checkBo*6.Checked=false;
checkBo*7.Checked=false;
checkBo*8.Checked=false;
radioButton1.Checked=false;
radioButton2.Checked=false;
radioButton3.Checked=false;
radioButton4.Checked=false;
label7.Te*t="准备发送";
te*tBo*2.Te*t="4";
}
}
catch(E*ceptioner)
{
MessageBo*.Show("Error:
"+er.Message,"Error");
return;
}
}
privatevoidcheckBo*5_CheckedChanged(objectsender,EventArgse)
{
try
{
if(checkBo*5.Checked)
{
checkBo*1.Checked=false;
checkBo*2.Checked=false;
checkBo*3.Checked=false;
checkBo*4.Checked=false;
checkBo*5.Checked=true;
checkBo*6.Checked=false;
checkBo*7.Checked=false;
checkBo*8.Checked=false;
radioButton1.Checked=false;
radioButton2.Checked=false;
radioButton3.Checked=false;
radioButton4.Checked=false;
label7.Te*t="准备发送";
te*tBo*2.Te*t="5";
}
}
catch(E*ceptioner)
{
MessageBo*.Show("Error:
"+er.Message,"Error");
return;
}
}
privatevoidcheckBo*6_CheckedChanged(objectsender,EventArgse)
{
try
{
if(checkBo*6.Checked)
{
checkBo*1.Checked=false;
checkBo*2.Checked=false;
checkBo*3.Checked=false;
checkBo*4.Checked=false;
checkBo*5.Checked=false;
checkBo*6.Checked=true;
checkBo*7.Checked=false;
checkBo*8.Checked=false;
radioButton1.Checked=false;
radioButton2.Checked=false;
radioButton3.Checked=false;
radioButton4.Checked=false;
label7.Te*t="准备发送";
te*tBo*2.Te*t="6";
}
}
catch(E*ceptioner)
{
MessageBo*.Show("Error:
"+er.Message,"Error");
return;
}
}
privatevoidcheckBo*7_CheckedChanged(objectsender,EventArgse)
{
try
{
if(checkBo*7.Checked)
{
checkBo*1.Checked=false;
checkBo*2.Checked=false;
checkBo*3.Checked=false;
checkBo*4.Checked=false;
checkBo*5.Checked=false;
checkBo*6.Checked=false;
checkBo*7.Checked=true;
checkBo*8.Checked=false;
radioButton1.Checked=false;
radioButton2.Checked=false;
radioButton3.Checked=false;
radioButton4.Checked=false;
label7.Te*t="准备发送";
te*tBo*2.Te*t="7";
}
}
catch(E*ceptioner)
{
MessageBo*.Show("Error:
"+er.Message,"Error");
return;
}
}
privatevoidcheckBo*8_CheckedChanged(objectsender,EventArgse)
{
try
{
if(checkBo*8.Checked)
{
checkBo*1.Checked=false;
checkBo*2.Checked=false;
checkBo*3.Checked=false;
checkBo*4.Checked=false;
checkBo*5.Checked=false;
checkBo*6.Checked=false;
checkBo*7.Checked=false;
checkBo*8.Checked=true;
radioButton1.Checked=false;
radioButton2.Checked=false;
radioButton3.Checked=false;
radioButton4.Checked=false;
label7.Te*t="准备发送";
te*tBo*2.Te*t="8";
}
}
catch(E*ceptioner)
{
MessageBo*.Show("Error:
"+er.Message,"Error");
return;
}
}
privatevoidbutton5_Click(objectsender,EventArgse)
{
try
{
if(button5.Te*t=="开启")
{
radioButton1.Checked=false;
radioButton2.Checked=false;
radioButton3.Checked=false;
radioButton4.Checked=false;
checkBo*1.Checked=false;
checkBo*2.Checked=false;
checkBo*3.Checked=false;
checkBo*4.Checked=false;
checkBo*5.Checked=false;
checkBo*6.Checked=false;
checkBo*7.Checked=false;
checkBo*8.Checked=false;
groupBo*7.Enabled=true;
button6.Enabled=true;
te*tBo*2.Te*t=String.Empty;
button5.Te*t="关闭";
}
else
{
groupBo*7.Enabled=false;
button6.Enabled=false;
button5.Te*t="开启";
te*tBo*2.Te*t=String.Empty;
}
}
catch(E*ceptioner)
{
MessageBo*.Show("Error:
"+er.Message,"Error");
return;
}
}
privatevoidbutton6_Click(objectsender,EventArgse)
{
label7.Te*t="已发送";
if(te*tBo*2.Te*t==")
MessageBo*.Show("发送失败。
请选择发送的数据!
");
else
sp.WriteLine(te*tBo*2.Te*t);//往串口写数据
}
privatevoidradioButton1_CheckedChanged(objectsender,EventArgse)
{
try
{
if(radioButton1.Checked)