C#上位機制作之串列埠接受資料(利用接受事件)
阿新 • • 發佈:2019-01-30
前面設計好了介面,現在就開始寫程式碼了,首先定義一個串列埠物件..
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"); } }