C#做的串口通信助手可发可收简单(免费开源)

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即可获得程序全部源码。

原创文章 19 获赞 4 访问量 5121

猜你喜欢

转载自blog.csdn.net/dwh1314/article/details/104017786