前面設計好了界面,現在就開始寫代碼了,首先定義一個串口對象..
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"); } }
這段代碼實現了從下拉框中讀取數據同時設置為當前串口的串口號,同樣的我們要設置數據位,檢驗位,都可以這樣做,設置完成我們就可以打開串口了,看看吧,能接受數據嗎,