C#上位機制作之串口接受數據(利用接受事件)


前面設計好了界面,現在就開始寫代碼了,首先定義一個串口對象..

SerialPort serialport = new SerialPort();//定義串口對象

添加串口掃描函數,掃描出來所有可用串口顯示在下拉框中,同時設置接受函數

string[] ArryPort = SerialPort.GetPortNames();
            comboBox1.Items.Clear();
            for (int i = 0; i < ArryPort.Length; i++)
            {
                comboBox1.Items.Add(ArryPort[i]);
            }
            comboBox1.SelectedIndex = 0;
            serialport.DataReceived += serialport_DataReceived;

PS:,因為串口的接受事件中開辟了新的線程,所以我們訪問ui資源時需要做特殊的處理,如果是winform中需要設置

Control.CheckForIllegalCrossThreadCalls = false;//防止挎線程訪問

但是在wpf中沒有這個屬性就需要用委托來處理代碼如下

void serialport_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            byte[] buffer = new byte[2];
            int adc_dat = 0;
            serialport.Read(buffer, 0, buffer.Length);
             adc_dat += buffer[i + 1];
             adc_dat = (adc_dat << 8) + buffer[i + 2];;
              this.Dispatcher.Invoke(new Action(() =>
              {
                    progressBar1.Value = adc_dat;
              }));
           }

上面的代碼中我們從讀取到的數據處理 完成,之后修改進度條的值,這個里面就是一段簡單的接受數據,處理,要想數據無措,還要加入相應的校驗函數和自己的算法處理,

我們在接受之前還需要設置串口號,波特率等等,看下面的代碼

private void set_PortName()//將下拉框中的內容設置串口
        {
            serialport.PortName = comboBox1.SelectedItem.ToString();
        }
        private void set_BaudRate()//設置波特率
        {
            serialport.BaudRate = 115200;
        }
        private void Open_serial()//啟動串口開始接收
        {
            set_PortName();//選擇串口號
            set_BaudRate();//選擇波特率
            try
            {
                serialport.Open();//打開當前串口
            }
            catch (Exception)
            {
                MessageBox.Show("串口被占用", "error");

            }
        }

這段代碼實現了從下拉框中讀取數據同時設置為當前串口的串口號,同樣的我們要設置數據位,檢驗位,都可以這樣做,設置完成我們就可以打開串口了,看看吧,能接受數據嗎,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM