C#做的串口通信助手可发可收简单(免费开源)
最近在做物联网相关的项目,要用到串口,所以今天做一个C#的串口上位机,供大家参考,程序如果有不对希望大家指正,谢谢!
首先看一下效果
现在开始制作我们的串口小DEMO
首先打开VS(我这里是VS2013)
点击文件
然后点击项目
然后新建一个C#的窗口程序,下面的路径自己修改
然后就建好工程了,下面是布局,在左边的工具箱里拖自己想要的控件即可。
这个根据自己的喜好来摆放
我这里添加了4个GroupBox控件,还有5个Lable控件以及几个按钮。这都是比较简单。
至于控件的name自己定,根据代码修改就好。
然后添加一个串口的组件SerialPort.
下面是代码部分。
首先是初始化
private void Form1_Load(object sender, EventArgs e)//加载时初始化
{
for(int i=0;i<20;i++)
{
cbxPort.Items.Add("COM" + (i + 1));
}
cbxPort.SelectedIndex=4;
//加载常用的波特率
cbxBaud.Items.Add("1200");
cbxBaud.Items.Add("2400");
cbxBaud.Items.Add("4800");
cbxBaud.Items.Add("9600");
cbxBaud.Items.Add("19200");
cbxBaud.Items.Add("38400");
cbxBaud.Items.Add("115200");
cbxBaud.SelectedIndex = 6;
//加载停止位
cbxStopBits.Items.Add("0");
cbxStopBits.Items.Add("1");
cbxStopBits.Items.Add("1.5");
cbxStopBits.Items.Add("2");
cbxStopBits.SelectedIndex = 1;
//加载数据位
cbxData.Items.Add("8");
cbxData.Items.Add("7");
cbxData.Items.Add("6");
cbxData.Items.Add("5");
cbxData.SelectedIndex = 0;
//加载奇偶校验位
cbxParity.Items.Add("无");
cbxParity.Items.Add("奇校验");
cbxParity.Items.Add("偶校验");
cbxParity.SelectedIndex = 0;
}
这一部分是初始化布局。
private void but_check_Click(object sender, EventArgs e)
{
cbxPort.Items.Clear(); //扫描前清除当前串口号中的所有串口名称
for (int i = 0; i < 20; i++)
{
try
{
serialPort1.PortName = "COM" + (i + 1).ToString();
serialPort1.Open();
serialPort1.Close();
cbxPort.Items.Add("COM" + (i + 1).ToString());
cbxPort.SelectedIndex = 0;
return ;
}
catch (Exception)
{
continue;
}
}
MessageBox.Show("没有找到可用的串口!", "错误");
}
这一部分是扫描串口
private void but_open_Click(object sender, EventArgs e)
{
if(but_open.Text=="关闭串口")
{
serialPort1.Close();
but_open.Text = "打开串口";
cbxPort.Enabled = true;
cbxBaud.Enabled = true;
cbxData.Enabled = true;
cbxStopBits.Enabled = true;
cbxParity.Enabled = true;
//re_rbnchar.Enabled = true;
//re_rbnHex.Enabled = true;
return;
}
serialPort1.PortName = cbxPort.Text;//设置端口号
serialPort1.BaudRate = int.Parse(cbxBaud.Text);
if (cbxStopBits.Text.Trim() == "0") //设置停止位
{
serialPort1.StopBits = StopBits.None;
}
else if (cbxStopBits.Text.Trim() == "1.5")
{
serialPort1.StopBits = StopBits.OnePointFive;
}
else if (cbxStopBits.Text.Trim() == "2")
{
serialPort1.StopBits = StopBits.Two;
}
else
{
serialPort1.StopBits = StopBits.One;
}
serialPort1.DataBits = Convert.ToInt16(cbxData.Text.Trim()); //设置数据位
if (cbxParity.Text.Trim() == "奇校验") //设置校验
{
serialPort1.Parity = Parity.Odd;
}
else if (cbxParity.Text.Trim() == "偶校验")
{
serialPort1.Parity = Parity.Even;
}
else
{
serialPort1.Parity = Parity.None;
}
try
{
serialPort1.Open();
but_open.Text = "关闭串口";
cbxPort.Enabled = false;
cbxBaud.Enabled = false;
cbxData.Enabled = false;
cbxStopBits.Enabled = false;
cbxParity.Enabled = false;
}
catch (Exception)
{
MessageBox.Show("串口被占用或无效", "错误");
}
}
这里是打开或关闭串口。
还有部分代码比较长没有贴上来,大家可以自行下载。
关注微信公众号“智慧小巷”回复002即可获得程序全部源码。