新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > c#串口通訊軟件設(shè)計(jì)

        c#串口通訊軟件設(shè)計(jì)

        作者: 時(shí)間:2016-11-30 來源:網(wǎng)絡(luò) 收藏

        void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
        int n = comm.BytesToRead;//先記錄下來,避免某種原因,人為的原因,操作幾次之間時(shí)間長,緩存不一致
        byte[] buf = new byte[n];//聲明一個(gè)臨時(shí)數(shù)組存儲當(dāng)前來的串口數(shù)據(jù)
        received_count += n;//增加接收計(jì)數(shù)
        comm.Read(buf, 0, n);//讀取緩沖數(shù)據(jù)
        builder.Remove(0, builder.Length);//清除字符串構(gòu)造器的內(nèi)容
        this.Invoke((EventHandler)(delegate
        {
        //判斷是否是顯示為16禁止
        if(HEXRX.Checked)
        {
        //依次的拼接出16進(jìn)制字符串
        foreach (byte b in buf)
        {
        builder.Append(b.ToString("X2") + " ");
        }
        }
        else
        {
        //直接按ASCII規(guī)則轉(zhuǎn)換成字符串
        builder.Append(Encoding.ASCII.GetString(buf));
        }
        //追加的形式添加到文本框末端,并滾動到最后。
        this.GETRX.AppendText(builder.ToString());
        //修改接收計(jì)數(shù)
        labelTXdata.Text = "發(fā)送數(shù)據(jù):" + send_count.ToString();
        labelRXdata.Text = "接受數(shù)據(jù):" + received_count.ToString();

        }));
        }
        private void buttonTX_Click(object sender, EventArgs e)
        {
        //定義一個(gè)變量,記錄發(fā)送了幾個(gè)字節(jié)
        int n = 0;
        //16進(jìn)制發(fā)送
        if (HEXTX.Checked)
        {
        //我們不管規(guī)則了。如果寫錯了一些,我們允許的,只用正則得到有效的十六進(jìn)制數(shù)
        MatchCollection mc = Regex.Matches(SENDBOX.Text, @"(?i)[da-f]{2}");
        List buf = new List();//填充到這個(gè)臨時(shí)列表中
        //依次添加到列表中
        foreach (Match m in mc)
        {
        buf.Add(byte.Parse(m.Value, System.Globalization.NumberStyles.HexNumber));
        }
        //轉(zhuǎn)換列表為數(shù)組后發(fā)送
        comm.Write(buf.ToArray(), 0, buf.Count);
        //記錄發(fā)送的字節(jié)數(shù)
        n = buf.Count;
        }
        else//ascii編碼直接發(fā)送
        {

        comm.WriteLine(SENDBOX.Text);
        n = SENDBOX.Text.Length + 2;

        }
        send_count += n;//累加發(fā)送字節(jié)數(shù)
        labelTXdata.Text = "Send:" + send_count.ToString();//更新界面
        }

        本文引用地址:http://www.104case.com/article/201611/324082.htm

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
        //復(fù)位接受和發(fā)送的字節(jié)數(shù)計(jì)數(shù)器并更新界面。
        send_count = received_count = 0;
        labelTXdata.Text = "發(fā)送數(shù)據(jù):" + send_count.ToString();
        labelRXdata.Text = "接受數(shù)據(jù):" + received_count.ToString();
        }

        private void bottoncom_Click(object sender, EventArgs e)
        {
        //根據(jù)當(dāng)前串口對象,來判斷操作
        if (comm.IsOpen)
        {
        //打開時(shí)點(diǎn)擊,則關(guān)閉串口
        comm.Close();
        }
        else
        {
        //關(guān)閉時(shí)點(diǎn)擊,則設(shè)置好端口,波特率后打開
        comm.PortName = cobportname.Text;
        comm.BaudRate = int.Parse(cobBaudrate.Text);
        try
        {
        comm.Open();
        }
        catch (Exception ex)
        {
        //捕獲到異常信息,創(chuàng)建一個(gè)新的comm對象,之前的不能用了。
        comm = new SerialPort();
        //現(xiàn)實(shí)異常信息給客戶。
        MessageBox.Show(ex.Message);
        }
        }
        //設(shè)置按鈕的狀態(tài)
        bottoncom.Text = comm.IsOpen ? "關(guān)閉" : "打開";
        //buttonSend.Enabled = comm.IsOpen;
        }
        }
        }


        上一頁 1 2 下一頁

        關(guān)鍵詞: c串口通訊軟件設(shè)

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 利津县| 若羌县| 米脂县| 伊春市| 慈溪市| 红原县| 桓仁| 平定县| 静宁县| 都昌县| 抚州市| 红原县| 耿马| 苗栗市| 泊头市| 榆社县| 翼城县| 嘉定区| 布尔津县| 福海县| 开阳县| 大冶市| 鄂尔多斯市| 林西县| 洛南县| 古丈县| 洪洞县| 文山县| 平潭县| 永年县| 华容县| 中西区| 龙里县| 翁牛特旗| 左贡县| 襄垣县| 永康市| 纳雍县| 阜新| 武乡县| 榆社县|