基本信息
源码名称:C#写的串口助手
源码大小:0.96M
文件格式:.rar
开发语言:C#
更新时间:2016-04-15
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559

本次赞助数额为: 2 元 
   源码介绍


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;
using System.IO.Ports;
using Sunisoft.IrisSkin;

namespace 串口小助手
{
    public partial class Form1 : Form
    {
        string recieveData = "";//接收字符串数据
        StringFunction strBytesNum = new StringFunction();//实例化计算字节方法的对象
        StringFunction strtoHex = new StringFunction();//实例化计算字节方法的对象
        int Snum = 0, Rnum = 0;//记录收发数据字节数
        bool flag = false;//标记收发数据是否清零,当为FALSE时表示计数未清零
        SkinEngine se = null;
        public Form1()
        {
            InitializeComponent();
            se = new SkinEngine();
            se.SkinAllForm = true;
        }

        /// <summary>
        /// 循环发送触发下面程序
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer1_Tick(object sender, EventArgs e)
        {
            //发送数据
            string sendData = this.txtSend.Text;
            if (sendData == "")
            {
                MessageBox.Show("请输入数据!");
            }
            serialPort1.WriteLine(sendData);
            //计算字节数
            Snum  = strBytesNum.getStringBytes(sendData);
            lblScount.Text = "发送:"   Snum.ToString();
        }

        /// <summary>
        /// 显示当前操作时间
        /// </summary>
        public string ShowTime()
        {
            DateTime time = DateTime.Now;
            string strTime = "";
            strTime = time.ToString();
            return strTime;
        }

        /// <summary>
        /// 加载窗口时检测是否有串口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            string[] ports = SerialPort.GetPortNames(); 
            if (SerialPort.GetPortNames().Length==0)
            {
                cboSerialportsNum.Text = "";
                cboSerialportsNum.Items.Clear();
                MessageBox.Show("没有发现串口!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                string[] temp = SerialPort.GetPortNames();
                for (int i = 0; i < temp.Length;i   )
                {
                    if (!cboSerialportsNum.Items.Contains(temp[i]))
                    {
                        cboSerialportsNum.Items.Add(temp[i]);   //向comboBox中添加数据项
                        cboSerialportsNum.Text = cboSerialportsNum.Items[0].ToString();
                    }
                }
            }
        }

        private void 刷新ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form1_Load(sender, e);
        }

        #region 实现换肤功能
        private void defaultToolStripMenuItem_Click(object sender, EventArgs e)
        {
            se.SkinFile = Application.StartupPath   @"";
        }

        private void pageColor2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            se.SkinFile = Application.StartupPath   @"\Skins\PageColor2.ssk";
        }

        private void glassOrangeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            se.SkinFile = Application.StartupPath   @"\Skins\GlassOrange.ssk";
        }

        private void silverColor1ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            se.SkinFile = Application.StartupPath   @"\Skins\SilverColor1.ssk";
        }

        private void sportsBlueToolStripMenuItem_Click(object sender, EventArgs e)
        {
            se.SkinFile = Application.StartupPath   @"\Skins\SportsBlue.ssk";
        }

        private void sportsCyanToolStripMenuItem_Click(object sender, EventArgs e)
        {
            se.SkinFile = Application.StartupPath   @"\Skins\SportsCyan.ssk";
        }

        private void vistaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            se.SkinFile = Application.StartupPath   @"\Skins\Vista.ssk";
        }

        private void waveColor2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            se.SkinFile = Application.StartupPath   @"\Skins\WaveColor2.ssk";
        }
        #endregion

        /// <summary>
        /// 打开串口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOpenSerialports_Click(object sender, EventArgs e)
        {
            if(cboSerialportsNum.Text == "")
            {
                MessageBox.Show("请先查找串口!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                axiLedRoundX1.Active = true;
                btnOpenSerialports.Visible = false;
                serialPort1.Encoding = System.Text.Encoding.GetEncoding("GB2312");
                serialPort1.PortName = cboSerialportsNum.SelectedItem.ToString();
                serialPort1.BaudRate = Convert.ToInt32(cboBaudRate.SelectedItem);
                serialPort1.DataBits = Convert.ToInt32(cboDataBits.SelectedItem);
                #region 校验位
                if (cboCheckBit.SelectedItem.ToString() == "None")
                {
                    serialPort1.Parity = Parity.None;
                }
                else if (cboCheckBit.SelectedItem.ToString() == "Odd")
                {
                    serialPort1.Parity = Parity.Odd;
                }
                else if (cboCheckBit.SelectedItem.ToString() == "Even")
                {
                    serialPort1.Parity = Parity.Even;
                }
                else if (cboCheckBit.SelectedItem.ToString() == "Mark")
                {
                    serialPort1.Parity = Parity.Mark;
                }
                else if (cboCheckBit.SelectedItem.ToString() == "Space")
                {
                    serialPort1.Parity = Parity.Space;
                }
                #endregion
                #region 停止位
                if (cboStopBit.SelectedItem.ToString() == "None")
                {
                    serialPort1.StopBits = StopBits.None;
                }
                else if (cboStopBit.SelectedItem.ToString() == "1")
                {
                    serialPort1.StopBits = StopBits.One;
                }
                else if (cboStopBit.SelectedItem.ToString() == "1.5")
                {
                    serialPort1.StopBits = StopBits.OnePointFive;
                }
                else if (cboStopBit.SelectedItem.ToString() == "2")
                {
                    serialPort1.StopBits = StopBits.Two;
                }
                #endregion
                /*serialPort1.Parity = (Parity)Enum.Parse(typeof(Parity), cboCheckBit.SelectedItem.ToString());
            serialPort1.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cboStopBit.SelectedItem.ToString());*/
                serialPort1.Open();
                lblStatus.Text = "status:COM Port Open!";
            }
            
        }

        /// <summary>
        /// 关闭串口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCloseSerialports_Click(object sender, EventArgs e)
        {
            axiLedRoundX1.Active = false;
            btnOpenSerialports.Visible = true;
            serialPort1.Close();
            lblStatus.Text = "status:COM Port Closed!";
        }
        /// <summary>
        /// 发送数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSend_Click(object sender, EventArgs e)
        {
            
            if(serialPort1.IsOpen)
            {
                if (chkCycleSend.Checked == true)
                {
                    timer1.Interval = Convert.ToInt32(txtSendPeriod.Text);
                    timer1.Start();
                }
                else
                {
                    //发送数据后清除发送窗口
                    if (chkSendClear.Checked == true)
                    {
                        //发送数据
                        string sendData = this.txtSend.Text;
                        if (sendData == "")
                        {
                            MessageBox.Show("请输入数据!");
                        }
                        serialPort1.WriteLine(sendData);
                        //计算字节数
                        Snum  = strBytesNum.getStringBytes(sendData);
                        lblScount.Text = "发送:"   Snum.ToString();
                        this.txtSend.Text = "";
                    }
                    else
                    {
                        //发送数据
                        string sendData = this.txtSend.Text;
                        if (sendData == "")
                        {
                            MessageBox.Show("请输入数据!");
                        }
                        serialPort1.WriteLine(sendData);
                        //计算字节数
                        Snum  = strBytesNum.getStringBytes(sendData);
                        lblScount.Text = "发送:"   Snum.ToString();
                    }
                }
            }
            else
            {
                MessageBox.Show("数据发送失败,请先打开串口!");
            }
            
        }
        /// <summary>
        /// 接受数据,从对象接收数据时,将在辅助线程上引发DataReceived事件。由于此事件在辅助线程而非主线程上引发,因此尝试修改主线程中的一些元素(如UI 元素)时会引发线程异常。
        /// 如果有必要修改主Form或Control中的元素,必须使用Invoke回发更改请求,这将在正确的线程上执行.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            recieveData = serialPort1.ReadExisting();
            this.Invoke(new EventHandler(ShowReceiveData));
        }
        /// <summary>
        /// 显示接受数据并计算字节
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ShowReceiveData(object sender, EventArgs e)
        {
            //将收发数据清零,并将标记置为FALSE
            if (flag == true)
            {
                Rnum = 0;
                Snum = 0;
                flag = false;
            }
            if (chkReceiveClear.Checked == true)
            {
                #region 当选择了显示时间则默认接收时自动换行,在其中判断是否选择十六进制
                if (chkShowTime.Checked == true)
                {
                    //清空接收窗口
                    txtReceive.Text = "";
                    txtReceive.Text  = "【"   ShowTime()   "】";
                    if (chkHexadecimal.Checked == true)
                    {
                        txtReceive.Text  = strtoHex.StrtoHex(recieveData)   "\r\n";
                        Rnum  = strBytesNum.getStringBytes(recieveData);
                        lblRcount.Text = "接受:"   Rnum.ToString();
                    }
                    else
                    {
                        txtReceive.Text  = recieveData   "\r\n";
                        Rnum  = strBytesNum.getStringBytes(recieveData);
                        lblRcount.Text = "接受:"   Rnum.ToString();
                    }
                }
                #endregion
                #region 没有选择显示时间,则判断是否选择换行,并判断在其中是否选择十六进制
                else
                {
                    //清空接受窗口
                    txtReceive.Text = "";
                    if (chkWrap.Checked == true)
                    {
                        if (chkHexadecimal.Checked == true)
                        {
                            txtReceive.Text  = strtoHex.StrtoHex(recieveData)   "\r\n";
                            Rnum  = strBytesNum.getStringBytes(recieveData);
                            lblRcount.Text = "接受:"   Rnum.ToString();
                        }
                        else
                        {
                            txtReceive.Text  = recieveData   "\r\n";
                            Rnum  = strBytesNum.getStringBytes(recieveData);
                            lblRcount.Text = "接受:"   Rnum.ToString();
                        }
                    }
                    else
                    {
                        if (chkHexadecimal.Checked == true)
                        {
                            txtReceive.Text  = strtoHex.StrtoHex(recieveData);
                            Rnum  = strBytesNum.getStringBytes(recieveData);
                            lblRcount.Text = "接受:"   Rnum.ToString();
                        }
                        else
                        {
                            txtReceive.Text  = recieveData;
                            Rnum  = strBytesNum.getStringBytes(recieveData);
                            lblRcount.Text = "接受:"   Rnum.ToString();
                        }
                    }
                }
                #endregion
            }
            else
            {
                #region 当选择了显示时间则默认接收时自动换行,在其中判断是否选择十六进制
                if (chkShowTime.Checked == true)
                {
                    txtReceive.Text  = "【"   ShowTime()   "】";
                    if (chkHexadecimal.Checked == true)
                    {
                        txtReceive.Text  = strtoHex.StrtoHex(recieveData)   "\r\n";
                        Rnum  = strBytesNum.getStringBytes(recieveData);
                        lblRcount.Text = "接受:"   Rnum.ToString();
                    }
                    else
                    {
                        txtReceive.Text  = recieveData   "\r\n";
                        Rnum  = strBytesNum.getStringBytes(recieveData);
                        lblRcount.Text = "接受:"   Rnum.ToString();
                    }
                }
                #endregion
                #region 没有选择显示时间,则判断是否选择换行,并判断在其中是否选择十六进制
                else
                {
                    if (chkWrap.Checked == true)
                    {
                        txtReceive.Text  = "\r\n";
                        if (chkHexadecimal.Checked == true)
                        {
                            txtReceive.Text  = strtoHex.StrtoHex(recieveData);
                            Rnum  = strBytesNum.getStringBytes(recieveData);
                            lblRcount.Text = "接受:"   Rnum.ToString();
                        }
                        else
                        {
                            txtReceive.Text  = recieveData;
                            Rnum  = strBytesNum.getStringBytes(recieveData);
                            lblRcount.Text = "接受:"   Rnum.ToString();
                        }
                    }
                    else
                    {
                        if (chkHexadecimal.Checked == true)
                        {
                            txtReceive.Text  = strtoHex.StrtoHex(recieveData);
                            Rnum  = strBytesNum.getStringBytes(recieveData);
                            lblRcount.Text = "接受:"   Rnum.ToString();
                        }
                        else
                        {
                            txtReceive.Text  = recieveData;
                            Rnum  = strBytesNum.getStringBytes(recieveData);
                            lblRcount.Text = "接受:"   Rnum.ToString();
                        }
                    }
                }
                #endregion
            }
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            this.txtSend.Text = "";
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            timer1.Stop();
        }

        /// <summary>
        /// 选择文件并将文件内容写到txtSend中去
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSelectFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog FileDialog = new OpenFileDialog();
            FileDialog.InitialDirectory = Application.StartupPath;
            FileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            if (FileDialog.ShowDialog() == DialogResult.OK)
            {
                string filename = FileDialog.FileName;
                StreamReader sr = new StreamReader(filename, Encoding.Default);
                this.txtSend.Text = sr.ReadToEnd();
            }
        }

        private void llblClear_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            this.txtReceive.Text = "";
        }

        private void llblSave_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            SaveFileDialog FileDialog = new SaveFileDialog();
            FileDialog.InitialDirectory = Application.StartupPath;
            FileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            if (txtReceive.Text == string.Empty)
            {
                MessageBox.Show("要写入的文件内容不能为空");
            }
            else
            {
                if (FileDialog.ShowDialog() == DialogResult.OK)
                {
                    string filename = FileDialog.FileName;
                    //使用“另存为”对话框中输入的文件名实例化StreamWriter对象
                    StreamWriter sw = new StreamWriter(filename, true, Encoding.Default);
                    //向创建的文件中写入内容
                    sw.WriteLine(txtReceive.Text);
                    //关闭当前文件写入流
                    sw.Close();
                }
            }
            
        }

        private void llblCountClear_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            this.lblScount.Text = "发送: 0";
            this.lblRcount.Text = "接收:0";
            flag = true;
        }

        private void 版本说明ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.Show();
        }

    }
}