1. 程式人生 > >C#用serialPort和chart控制元件實現簡單波形繪製

C#用serialPort和chart控制元件實現簡單波形繪製

先看最終的效果圖:

主要實現功能是將串列埠傳送過來的資料按波形顯示

注:本例是以串列埠除錯助手和虛擬串列埠VSPD軟體模擬串列埠傳送資料的,詳細說明見下文

說明:
serialPort的ReadByte()方法用於從System.IO.Ports.SerialPort輸入緩衝區中同步讀取一個位元組。

chart控制元件的spline為曲線圖,以光滑的曲線連線各點。

幾個程式碼塊說明:

(1)

  private void SearchAndAddSerialToCombobox(SerialPort Myport, ComboBox Mybox)
        {
            string Buffer;
            Mybox.Items.Clear();
            for (int i = 1; i < 20; i++)
            {
                try
                {
                    Buffer = "COM" + i.ToString();
                    Myport.PortName = Buffer;
                    Myport.Open();
                    Mybox.Items.Add(Buffer);
                    Myport.Close();
                }
                catch
                { }
            }
        }
這段程式碼功能是尋找可用的串列埠並新增到comboBox下拉選項中。原理是逐個測試串列埠是否可用,一般來說電腦1-20就足夠了,如果超過20個,可修改。

(2)

 private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            byte[] data_receive = new byte[3];
            data_receive[0] = (byte)serialPort1.ReadByte();
            data_receive[1] = (byte)serialPort1.ReadByte();
            data_receive[2] = (byte)serialPort1.ReadByte();
            textBox1.AppendText(data_receive[0].ToString()+" ");
            textBox1.AppendText(data_receive[1].ToString());
            textBox1.AppendText(data_receive[2].ToString()+"\r\n");
            series.Points.AddY(data_receive[0]);
            /*  int data_receive = serialPort1.ReadByte();
              textBox1.AppendText(data_receive.ToString()+" ");
              series.Points.AddY(data_receive);*/

        }

這段程式碼是將串列埠資料顯示在chart表格中,這裡的程式碼需要根據自己實際傳送的資料加以修改,不難,textbox控制元件就可以顯示,若用原始碼資源(文章末尾)中帶的串列埠除錯助手當做傳送則不用修改。

我所用的串列埠除錯助手每次傳送過來的單位元組都會自動在末尾加換行“\r\n”,所以我用讀三次顯示第一個方式記錄資料,串列埠除錯助手傳送時記得勾選hex傳送,每次傳送一個位元組。

原始碼下載:http://download.csdn.net/detail/u012342996/9513760

(注:該資源中有串列埠除錯助手,但無VSPD,VSPD自行百度下載即可)

serialPort的ReadByte()方法用於從System.IO.Ports.SerialPort輸入緩衝區中同步讀取一個位元組。