⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 c#串口调试程序 c#串口 源码
💻 CS
📖 第 1 页 / 共 2 页
字号:

                //数据转十六进制字符串。
                string Hex = string.Empty;
                for (int i = 0; i < data.Length; i++)
                {
                    string tempstr = Convert.ToString(data[i], 16);
                    if (tempstr.Length < 2)
                        tempstr = '0' + tempstr;
                    Hex += tempstr + ' ';
                }
                Hex = Hex.ToUpper();

                //使用委托跨线程读取数据。
                rtbRecStr.Invoke(new EventHandler(delegate
                {
                    DoingStr = true;    //***正在处理字符串。

                    rtbRecStr.AppendText(Str);
                    if (cbAutoClr.Checked && rtbRecStr.Text.Length > 10000)
                        rtbRecStr.Text = string.Empty;
                    rtbRecStr.ScrollToCaret();      //将控件的内容滚动到当前位置。

                    DoingStr = false;
                }
                ));

                rtbRecHex.Invoke(new EventHandler(delegate
                {
                    DoingHex = true;    //***正在处理十六进制数据。

                    rtbRecHex.AppendText(Hex);
                    if (cbAutoClr.Checked && rtbRecHex.Text.Length > 10000)
                        rtbRecHex.Text = string.Empty;
                    rtbRecHex.ScrollToCaret();      //将控件的内容滚动到当前位置。

                    DoingHex = false;
                }
                ));
            
                while(DoingStr || DoingHex)
                    Application.DoEvents();     //处理串口接收事件及其它系统消息。
                IsReceving =false;  //***接收完成状态指示。
            }
            catch (Exception Err)
            {
                MessageBox.Show(Err.Message, "串口调试助手");
            }
        }

        private void btClrRec_Click(object sender, EventArgs e)
        {
            rtbRecStr.Text = string.Empty;
            rtbRecHex.Text = string.Empty;
            ClrEncode();
        }

        private void rtbRecHex_MouseClick(object sender, MouseEventArgs e)
        {
            try
            {
                int idx = rtbRecHex.SelectionStart / 3;
                idx *= 3;
                if (rtbRecHex.Text.Length >= idx + 4 * 3)
                {
                    rtbRecHex.Select(idx, 4 * 3);
                    string SubStr = rtbRecHex.Text.Substring(idx, 4 * 3);
                    lbHexData.Text = SubStr;
                    string[] TempStr = SubStr.Split(' ');
                    string[] Frm=new string[4];
                    if(rdBig.Checked)
                    {   //直接拷贝。
                        Array.Copy(TempStr, Frm, Frm.Length);
                    }
                    else
                    {   //前后交换。
                        Frm[0] = TempStr[3];
                        Frm[1] = TempStr[2];
                        Frm[2] = TempStr[1];
                        Frm[3] = TempStr[0];
                    }
                    //数据解码。
                    tbByte1.Text = Convert.ToString(Convert.ToByte(Frm[0], 16), 10);
                    tbByte2.Text = Convert.ToString(Convert.ToByte(Frm[1], 16), 10);
                    tbByte3.Text = Convert.ToString(Convert.ToByte(Frm[2], 16), 10);
                    tbByte4.Text = Convert.ToString(Convert.ToByte(Frm[3], 16), 10);
                    tbUInt16L.Text = Convert.ToString(Convert.ToUInt16(Frm[0] + Frm[1], 16), 10);
                    tbUInt16R.Text = Convert.ToString(Convert.ToUInt16(Frm[2] + Frm[3], 16), 10);
                    tbUInt32.Text = Convert.ToString(Convert.ToUInt32(Frm[0] + Frm[1] + Frm[2] + Frm[3], 16), 10);

                    tbSByte1.Text = Convert.ToString(Convert.ToSByte(Frm[0], 16), 10);
                    tbSByte2.Text = Convert.ToString(Convert.ToSByte(Frm[1], 16), 10);
                    tbSByte3.Text = Convert.ToString(Convert.ToSByte(Frm[2], 16), 10);
                    tbSByte4.Text = Convert.ToString(Convert.ToSByte(Frm[3], 16), 10);
                    tbInt16L.Text = Convert.ToString(Convert.ToInt16(Frm[0] + Frm[1], 16), 10);
                    tbInt16R.Text = Convert.ToString(Convert.ToInt16(Frm[2] + Frm[3], 16), 10);
                    tbInt32.Text = Convert.ToString(Convert.ToInt32(Frm[0] + Frm[1] + Frm[2] + Frm[3], 16), 10);
                }
                else
                {
                    ClrEncode();
                }
            }
            catch (Exception Err)
            {
                MessageBox.Show(Err.Message, "串口调试助手");
            }
        }

        private void rdBig_CheckedChanged(object sender, EventArgs e)
        {
            rtbRecHex_MouseClick(null, null);   //重新刷新数据解码。
        }

        private void cbDefFrm_CheckedChanged(object sender, EventArgs e)
        {
            if (cbDefFrm.Checked)
            {
                gpDefFrm.Enabled = true;
            }
            else
            {
                gpDefFrm.Enabled = false;
            }
        }

        private void cbTimeHex_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                if (cbTimeHex.Checked)
                {
                    //禁止Str自动发送。
                    cbTimeStr.Checked = false;

                    int t=int.Parse(tbTimeHex.Text);
                    if (t < 5)
                    {
                        t = 5;
                        tbTimeHex.Text = Convert.ToString(t,10);
                    }
                    //起动Hex自动发送。
                    tbTimeHex.Enabled = false;
                    TimeHex.Enabled = true;
                    TimeHex.Interval = t;
                    TimeHex.Start();
                }
                else
                {
                    TimeHex.Stop();
                    TimeHex.Enabled = false;
                    tbTimeHex.Enabled = true;
                }
            }
            catch (Exception Err)
            {
                MessageBox.Show("定时值不正确!" + Err.Message, "串口调试助手");
            }
        }

        private void cbTimeStr_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                if (cbTimeStr.Checked)
                {
                    //禁止Hex自动发送。
                    cbTimeHex.Checked = false;

                    int t = int.Parse(tbTimeStr.Text);
                    if (t < 5)
                    {
                        t = 5;
                        tbTimeStr.Text = Convert.ToString(t,10);
                    }
                    //启动Str自动发送。
                    tbTimeStr.Enabled = false;
                    TimeStr.Enabled = true;
                    TimeStr.Interval = t;
                    TimeStr.Start();
                }
                else
                {
                    TimeStr.Stop();
                    TimeStr.Enabled = false;
                    tbTimeStr.Enabled = true;
                }
            }
            catch (Exception Err)
            {
                MessageBox.Show("定时值不正确!" + Err.Message, "串口调试助手");
            }
        }

        private void btCmd1_Click(object sender, EventArgs e)
        {
            CmdClick(1);
        }

        private void btCmd2_Click(object sender, EventArgs e)
        {
            CmdClick(2);
        }

        private void btCmd3_Click(object sender, EventArgs e)
        {
            CmdClick(3);
        }

        private void btCmd4_Click(object sender, EventArgs e)
        {
            CmdClick(4);
        }

        private void btCmd5_Click(object sender, EventArgs e)
        {
            CmdClick(5);
        }

        private void cmPort_SelectedIndexChanged(object sender, EventArgs e)
        {
            ReOpenPort();
        }

        private void cmBaudRate_SelectedIndexChanged(object sender, EventArgs e)
        {
            ReOpenPort();
        }

        private void cmDataBit_SelectedIndexChanged(object sender, EventArgs e)
        {
            ReOpenPort();
        }

        private void cmParity_SelectedIndexChanged(object sender, EventArgs e)
        {
            ReOpenPort();
        }

        private void cmStopBit_SelectedIndexChanged(object sender, EventArgs e)
        {
            ReOpenPort();
        }

        private void TimeHex_Tick(object sender, EventArgs e)
        {
            try
            {
                int[] Len ={ tbCmd1.Text.Length,tbCmd2.Text.Length,tbCmd3.Text.Length,tbCmd4.Text.Length,tbCmd5.Text.Length};
                int j = 0;
                int OldIdx=CmdIdx;
                for (int i = OldIdx; i<OldIdx+5; i++)
                {
                    CmdIdx %= 5;
                    j = i % 5;
                    if (CmdIdx == j)
                    {
                        CmdIdx++;
                        if (Len[j] > 0)
                        {
                            CmdClick(CmdIdx);
                            return;
                        }
                    }
                }
            }
            catch (Exception Err)
            {
                MessageBox.Show("定时发送错误!" + Err.Message, "串口调试助手");
                cbTimeHex.Checked = false;
            }
        }

        private void TimeStr_Tick(object sender, EventArgs e)
        {
            try
            {
                btSend_Click(null, null);
            }
            catch (Exception Err)
            {
                MessageBox.Show("定时发送错误!" + Err.Message, "串口调试助手");
                cbTimeStr.Checked = false;
            }

        }

        private void tbDec_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '\r')  //回车键
                IntToHex();     //转换为Hex。
        }

        private void tbDec_Leave(object sender, EventArgs e)
        {
            IntToHex();
        }

        private void tbHex_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '\r')  //回车键
            {
                while (tbHex.Text.Length < 8)
                    tbHex.Text = '0' + tbHex.Text;
                HexToInt();         //转换为Dec。
            }
        }

        private void tbHex_Leave(object sender, EventArgs e)
        {
            while (tbHex.Text.Length < 8)
                tbHex.Text = '0' + tbHex.Text;
            HexToInt();             //转换为Dec。
        }

        private void btClose_Click(object sender, EventArgs e)
        {
            StopAutoSend(); //停止自动发送。
            ClosePort();    //安全关闭串口。
            if (!sComm.IsOpen)
            {
                btOpen.Enabled = true;
                btClose.Enabled = false;
                lbComStat.Text = "已关闭";
            }
        }

        private void btQuit_Click(object sender, EventArgs e)
        {
            btClose_Click(null, null);
            this.Close();
        }
        //===================================================
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -