功能比较全的串口助手

1、支持串口检测;

2、可以发送和接收汉字;

3、可以链接到网络;

4、支持点击按钮时,窗体变色;

本软件的使用链接

链接:https://pan.baidu.com/s/1UovY9HOrkdI4czrKYbXvVQ 
提取码:dprb 
复制这段内容后打开百度网盘手机App,操作更方便哦

本代码:

还有很多不足,欢迎指正

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
using System.IO;
using System.Text.RegularExpressions;
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        SerialPort sp=null;         //声明一个串口类 
        bool isOpen=false;          //打开串口标志位 
        bool isSetProperty=false;   //属性设置标志位 
        bool isHex= false;          //十六进制显示标志位


        public Form1()
        {
            InitializeComponent();
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;//关闭跨线程检测
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.MaximumSize = this.Size;
            this.MinimumSize = this.Size;
            this.MaximizeBox = false;
            this.BackColor = Color.LightBlue;
            
            for (int i = 0; i < 10; i++)//最大支持到串口 10,可根据自己需求增加 
            {
                cbxCOMPort.Items.Add("COM"+(i+1).ToString());

            }
            cbxCOMPort.SelectedIndex = 0; 
            //列出常用的波特率 
            cbxBaudRate.Items.Add("1200");
            cbxBaudRate.Items.Add("2400");
            cbxBaudRate.Items.Add("4800");
            cbxBaudRate.Items.Add("9600");
            cbxBaudRate.Items.Add("19200");
            cbxBaudRate.Items.Add("38400");
            cbxBaudRate.Items.Add("43000");
            cbxBaudRate.Items.Add("56000");
            cbxBaudRate.Items.Add("57600");
            cbxBaudRate.Items.Add("115200");
            cbxBaudRate.SelectedIndex = 5;
            //列出停止位 
            cbxStopBits.Items.Add("0");
            cbxStopBits.Items.Add("1");
            cbxStopBits.Items.Add("1.5");
            cbxStopBits.Items.Add("2");
            cbxStopBits.SelectedIndex=1;
            //列出数据位 
            cbxDataBits.Items.Add("8");
            cbxDataBits.Items.Add("7");
            cbxDataBits.Items.Add("6");
            cbxDataBits.Items.Add("5");
            cbxDataBits.SelectedIndex=0;
            //列出奇偶校验位 
            cbxParity.Items.Add("无");
            cbxParity.Items.Add("奇校验");
            cbxParity.Items.Add("偶校验");
            cbxParity.SelectedIndex=0;
            //默认为 Char 显示 
            rbnChar.Checked=true;
        }
        private void BtnCheckCOM_Click_1(object sender, EventArgs e)
        {
            bool comExistence = false;//有可用串口标志位
            cbxCOMPort.Items.Clear();//清除当前串口号中的所有串口名称 
            this.BackColor = Color.Red; //所有背景为红色
            for (int i = 0; i < 10; i++)
            {
                try
                {
                    SerialPort sp = new SerialPort("COM" + (i + 1).ToString());
                    sp.Open();
                    sp.Close();
                    cbxCOMPort.Items.Add("COM" + (i + 1).ToString());
                    comExistence = true;
                }
                catch (Exception)
                {
                    continue;
                }
            }
            if (comExistence)
            {
                cbxCOMPort.SelectedIndex = 0;//使 ListBox 显示第 1 个添加的索引 
            }
            else
            {
                MessageBox.Show("没有找到可用串口!", "错误提示");
            }
        }
        private bool CheckPortSetting()//检查串口是否设置 
        {
            if (cbxCOMPort.Text.Trim() == "") return false;
            if (cbxBaudRate.Text.Trim() == "") return false;
            if (cbxDataBits.Text.Trim() == "") return false;
            if (cbxParity.Text.Trim() == "") return false;
            if (cbxStopBits.Text.Trim() == "") return false;
            return true;
        }
        private bool CheckSendData()
        {
            if (tbxSendData.Text.Trim() == "") return false;
            return true;
        }
        private void SetPortProperty()//设置串口的属性
        {
            sp = new SerialPort();//
            sp.PortName = cbxCOMPort.Text.Trim();//设置串口名
            sp.BaudRate = Convert.ToInt32(cbxBaudRate.Text.Trim());//设置串口的波特率

            float f = Convert.ToSingle(cbxStopBits.Text.Trim());//设置停止位
            if (f == 0)
            {
                sp.StopBits = StopBits.None;
            }
            else if (f == 1.5)
            {

                sp.StopBits = StopBits.OnePointFive;
            }
            else if (f == 1)
            {
                sp.StopBits = StopBits.One;
            }
            else if (f == 2)
            {
                sp.StopBits = StopBits.Two;

            }
            else
            {
                sp.StopBits = StopBits.One;
            }
            sp.DataBits = Convert.ToInt16(cbxDataBits.Text.Trim());//设置数据位
            string s = cbxParity.Text.Trim();//设置奇偶校验位
            if (s.CompareTo("无") == 0)
            {
                sp.Parity = Parity.None;
            }
            else if (s.CompareTo("奇校验") == 0)
            {
                sp.Parity = Parity.Odd;
            }
            else if (s.CompareTo("偶校验") == 0)
            {
                sp.Parity = Parity.Even;
            }
            else
            {
                sp.Parity = Parity.None;
            }
            sp.ReadTimeout = -1;//设置超时读取时间
            sp.RtsEnable = true;

            //定义 DataReceived 事件,当串口收到数据后触发事件 
            sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
            if (rbnHex.Checked)
            {
                isHex = true;
            }
            else
            {
                isHex = false;
            }
        }

        private void BtnSend_Click_1(object sender, EventArgs e)
        {
            this.BackColor = Color.GreenYellow; //所有背景
            byte[] ch = new byte[1];
            if (sp.IsOpen)
            {
                if (Textbox2.Text != "")
                {
                    if (rbnChar.Checked)
                    {
                        try
                        {
                            Encoding gb = System.Text.Encoding.GetEncoding("gb2312");
                            byte[] bytes = gb.GetBytes(Textbox2.Text);
                            sp.Write(bytes, 0, bytes.Length); //发送字符



                        }
                        catch
                        {
                            MessageBox.Show("发送数据过程中产生错误!!!");
                            sp.Close();
                            btnOpenCom.Enabled = true;
                            //closecom.Enabled = false;
                        }
                    }
                    else if (rbnHex.Checked)
                    {
                        int errCount = 0;


                        for (int j = 0; j < Textbox2.Text.Length/2; j++)
                        {
                            if ((Convert.ToChar(Textbox2.Text.Substring(j * 1, 1).ToUpper()) > 'F'))
                            {
                                errCount++;     
                             }
                           
                            
                        }
                        if (errCount != 0)
                        {

                            goto Error;
                        }
                        else
                        {
                            goto eeof;
                        }

                    Error: MessageBox.Show("输入了非法十六进制数!!!");
                        if (errCount == 0)
                        {
                            goto eeof;
                        }
                        else
                        {
                            errCount = 0;
                            goto err;
                        }



                    eeof:
                        for (int i = 0; i < (Textbox2.Text.Length - Textbox2.Text.Length % 2) / 2; i++)
                        {
                            ch[0] = Convert.ToByte(Textbox2.Text.Substring(i * 2, 2), 16);
                            sp.Write(ch, 0, 1);
                        }
                        if (Textbox2.Text.Length % 2 != 0)
                        {
                            ch[0] = Convert.ToByte(Textbox2.Text.Substring(Textbox2.Text.Length - Textbox2.Text.Length % 2, Textbox2.Text.Length % 2), 16);
                            sp.Write(ch, 0, 1);
                        }

                    err:;
                    }
                    else
                    {
                        ;
                    }
                }
            }
        }

        private void BtnOpenCom_Click_1(object sender, EventArgs e)
        {
            if (isOpen == false)
            {
                if (!CheckPortSetting())//检测串口设置 
                {
                    MessageBox.Show("串口未设置!", "错误提示");
                    return;
                }

                if (!isSetProperty)//串口未设置则设置串口 
                {
                    SetPortProperty();
                    isSetProperty = true;
                }
                try//打开串口 
                {
                    sp.Open();
                    isOpen = true;
                    btnOpenCom.Text = "关闭串口"; 
                    //串口打开后则相关的串口设置按钮便不可再用 
                    cbxCOMPort.Enabled = false;
                    cbxBaudRate.Enabled = false;
                    cbxDataBits.Enabled = false;
                    cbxParity.Enabled = false;
                    cbxStopBits.Enabled = false;
                    rbnChar.Enabled = false;
                    rbnHex.Enabled = false;
                }
                catch (Exception)
                { //打开串口失败后,相应标志位取消 
                    isSetProperty = false;
                    isOpen = false;
                    MessageBox.Show("串口无效或已被占用!", "错误提示");
                }


            }
            else
            {
                try//打开串口 
                {
                    sp.Close();
                    isOpen = false;
                    isSetProperty = false;
                    btnOpenCom.Text = "打开串口"; //关闭串口后,串口设置选项便可以继续使用 
                    cbxCOMPort.Enabled = true;
                    cbxBaudRate.Enabled = true;
                    cbxDataBits.Enabled = true;
                    cbxParity.Enabled = true;
                    cbxStopBits.Enabled = true;
                    rbnChar.Enabled = true;

                    rbnHex.Enabled = true;
                }
                catch (Exception)
                {
                    //lblStatus.Text = "关闭串口时发生错误";
                }
            }
        }
        private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (rbnChar.Checked)
            {
                DateTime dt = DateTime.Now;
                Textbox1.Text += dt.GetDateTimeFormats('f')[0].ToString() + "\r\n";//增加打印时间

                Textbox1.SelectAll();
                Textbox1.ForeColor = Color.Red;         //改变字体的颜色
                int bufferlen = sp.BytesToRead;
                byte[] bytes = new byte[bufferlen];
                sp.Read(bytes, 0, bufferlen);
                string gb = System.Text.Encoding.Default.GetString(bytes);
         
                Textbox1.AppendText(gb + "\r\n");                              //接收的字符和汉字进行换行
            }
            else if (rbnHex.Checked)
            {
                string str;
                uint i = 0;
                int bufferlen = sp.BytesToRead;
                byte[] bytes = new byte[bufferlen];
                sp.Read(bytes, 0, bufferlen);
                Textbox1.SelectAll();
                Textbox1.ForeColor = Color.Red;         //改变字体的颜色
                DateTime dt = DateTime.Now;
                Textbox1.Text += dt.GetDateTimeFormats('f')[0].ToString() + "\r\n";//增加打印时间
                for (i = 0; i < bytes.Length; i++)
                {
                    str = Convert.ToString((byte)bytes[i], 16).ToUpper();
                    Textbox1.AppendText("0x" + (str.Length == 1 ? "0" + str : str) + " "+"\r\n");
                }
            }
            else
            {
                ;
            }
        }
        private void BtnCleandData_Click(object sender, EventArgs e)
        {
            this.BackColor = Color.OldLace; //所有背景
            Textbox1.Text = "";//接收数据清空
           
        }
        private void Cleartxbutton_Click(object sender, EventArgs e)
        {
            this.BackColor = Color.Turquoise; //所有背景
            Textbox2.Text = "";//发送数据清空
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("野牛.串口调试助手,野牛工作室荣誉出品,qq:14535311700,欢迎来电");
        }

        private void BtnInputData_Click_Click(object sender, EventArgs e)
        {
            // "保存为"对话框
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "文本文件|*.txt";
            // 显示对话框
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                // 文件名
                string fileName = dialog.FileName;
                // 创建文件,准备写入
                FileStream fs = File.Open(fileName,
                        FileMode.Create,
                        FileAccess.Write);
                StreamWriter wr = new StreamWriter(fs);

                // 逐行将textBox1的内容写入到文件中
                foreach (string line in Textbox1.Lines)
                {
                    wr.WriteLine(line);
                }
                  // 关闭文件
                    wr.Flush();
                    wr.Close();
                    fs.Close();
            }

        }
        //private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
        //{
        //    e.Cancel = true;
        //}

        //private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        //{
        //    //foreach (HtmlElement links in this.webBrowser1.Document.Links)
        //    {
        //        links.SetAttribute("target", "_self");
        //    }
        //   // foreach (HtmlElement form in this.webBrowser1.Document.Forms)
        //    {
        //        form.SetAttribute("target", "_self");
        //    }
        //}

        private void WebBrowser1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {

            System.Diagnostics.Process.Start("explorer.exe", "https://www.rt-thread.org/document/site/?f");
        }

        private void WebBrowser2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            System.Diagnostics.Process.Start("explorer.exe", "https://bbs.afuiot.com/");
        }

        private void LinkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            System.Diagnostics.Process.Start("explorer.exe", "https://www.baidu.com");
        }

        private void WebBrowser3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            System.Diagnostics.Process.Start("explorer.exe", "D:\\WENDANG\\cx\\Upper Computer\\SE\\WindowsFormsApp1\\联系作者.html");
        }
    }
}

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值