在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → C#写的串口助手

C#写的串口助手

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.96M
  • 下载次数:62
  • 浏览次数:567
  • 发布时间:2016-04-15
  • 实例类别:C#语言基础
  • 发 布 人:miller8708
  • 文件格式:.rar
  • 所需积分:2
 相关标签: C# 串口 c

实例介绍

【实例简介】
【实例截图】

【核心代码】

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();
        }

    }
}

标签: C# 串口 c

实例下载地址

C#写的串口助手

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 缺氧199 发表于: 2016-05-02 16:56 21
我来说两句...不错

支持(0) 盖楼(回复)

第 2 楼 缺氧199 发表于: 2016-05-02 16:56 27
我来说两句...不错

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有2条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警