串口調試助手源代碼._第1頁
串口調試助手源代碼._第2頁
串口調試助手源代碼._第3頁
串口調試助手源代碼._第4頁
串口調試助手源代碼._第5頁
已閱讀5頁,還剩8頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、串口調試助手預源代碼using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.IO;using System.IO.Ports;using System.Threading;using DevExpress.XtraEdi

2、tors;using System.Text.RegularExpressions;namespace WindowsFormsApplication3 public partial class Form1 : XtraForm SerialPort sp1 = new SerialPort(); int Flag = 0; int StateChanged = 0; int StateChanged_Ascii = 1; int StateChanged_16 = 0; string Temp = null; string Temp_memoSend = null; private void

3、 memoSend_EditValueChanged(object sender, EventArgs e) public Form1() InitializeComponent(); sp1.DataReceived += sp1_DataReceived; private void Form1_Load(object sender, EventArgs e) this.MaximizeBox = false; /檢查是否有串口 string str = SerialPort.GetPortNames(); if (str = null) MessageBox.Show(本機沒有串口!, e

4、rror); return; /添加串口項目 foreach (string port in System.IO.Ports.SerialPort.GetPortNames() cbSerial.Properties.Items.Add(port); /串口設置默認選擇項 cbSerial.SelectedIndex = 0; Control.CheckForIllegalCrossThreadCalls = false; sp1.DataReceived += new SerialDataReceivedEventHandler(sp1_DataReceived); /訂閱委托 privat

5、e void comboBoxEdit1_SelectedIndexChanged(object sender, EventArgs e) private void OpenSerial_Click(object sender, EventArgs e) sp1.Close(); /SerialPort sp1 = new SerialPort(); if (!sp1.IsOpen)/串口是關閉的,設置參數,打開串口 try /獲取串口號 string serialName = cbSerial.SelectedItem.ToString(); sp1.PortName = serialNam

6、e; /設置各參數 string strBaudRate = cbBaudRate.Text; string strDateBits = cbDataBits.Text; string strStopBits = cbStop.Text; sp1.BaudRate = Convert.ToInt32(strBaudRate);/波特率 sp1.DataBits = Convert.ToInt32(strDateBits);/數據位 switch (cbStop.Text) /停止位 case 1: sp1.StopBits = StopBits.One; break; case 1.5: sp

7、1.StopBits = StopBits.One; break; case 2: sp1.StopBits = StopBits.Two; break; default: MessageBox.Show(Error:參數不正確!, Error); break; switch (cbParity.Text) /校驗位 case 無: sp1.Parity = Parity.None; break; case 奇校驗: sp1.Parity = Parity.Odd; break; case 偶校驗: sp1.Parity = Parity.Even; break; default: Messa

8、geBox.Show(Error:參數不正確!, Error); break; if (sp1.IsOpen = true) sp1.Close(); sp1.Open(); /btnOpen.Enabled = false; labSerial.Text = 串口號: + sp1.PortName; labState.Text = 狀 態:打開; catch (System.Exception ex) MessageBox.Show(Error: + ex.Message, Error); return; /private void CloseSerial_Click(object send

9、er, EventArgs e) / / if (sp1.IsOpen) / / sp1.Close(); / labSerial.Text = 串口號: + sp1.PortName; / labState.Text = 狀 態:關閉; / / private void Send_Click(object sender, EventArgs e) string StrSend = memoSend.Text; if (!sp1.IsOpen) MessageBox.Show(請先打開串口!, Error); return; else if (rbtnSendStr.Checked) /字符串

10、發送 if (ckTimeSend.Checked & !(string.IsNullOrEmpty(textTime.Text)/判斷是否定時發送數據 string Time = textTime.Text; tmSend.Interval = int.Parse(Time) * 1000;/時間單位是秒,化成毫秒單位 tmSend.Start(); /開啟定時器 else sp1.Write(StrSend); /寫入數據 else /十六進制發送 if (ckTimeSend.Checked & !(string.IsNullOrEmpty(textTime.Text) string T

11、ime = textTime.Text; tmSend.Interval = int.Parse(Time) * 1000; tmSend.Start(); else string StrSend_1 = StrSend.Trim(); /去掉前后的空格 /string StrSend_2 = StrSend_1.Replace( , ); /string StrSend_3 = string.Join( , Regex.Matches(StrSend_2, .|.).Cast().ToList(); string StrArray = StrSend_1.Split( ); /用空格符隔開字

12、符串數組 var Str_Send = new List(); / int byteBufferLength = StrArray.Length; /數組StrArray的長度 for (int i = 0; i StrArray.Length; i+) if (StrArrayi.Trim() = ) /byteBufferLength-; continue; else if (StrArrayi.Length 3) Str_Send.Add(StrArrayi); else Str_Send.AddRange(Devide(StrArrayi); int byteBufferLength

13、= Str_Send.Count; byte byteBuffer = new bytebyteBufferLength; int ii = 0; for (int i = 0; i Str_Send.Count; i+) /Byte bytesOfStr = Encoding.Default.GetBytes(StrArrayi); int decNum = 0; /if (StrArrayi = ) / / continue; / /else / /decNum = Convert.ToInt32(Str_Sendi, 16); /把字符串轉成16進制數 /byteBufferii = C

14、onvert.ToByte(decNum); / try decNum = Convert.ToInt32(Str_Sendi, 16); /把字符串轉成16進制數 byteBufferii = Convert.ToByte(decNum); catch (System.Exception ex) MessageBox.Show(輸入錯誤!, 提示); return; ii+; sp1.Write(byteBuffer, 0, byteBuffer.Length);/從第0個開始寫入byteBuffer,長度bytebuffer的長度。 private List Devide(string s

15、tr) var ret = Regex.Matches(str, .|.).Cast().ToList().ConvertAll(s = s.Value.ToString(); return ret; private void tmSend_Tick(object sender, EventArgs e) string StrSend = memoSend.Text; if (rbtnSendStr.Checked) sp1.Write(StrSend); else string StrSend_1 = StrSend.Trim(); /去掉前后的空格 string StrArray = St

16、rSend_1.Split( ); /用空格符隔開字符串數組 var Str_Send = new List(); for (int i = 0; i StrArray.Length; i+) if (StrArrayi.Trim() = ) continue; else if (StrArrayi.Length 3) Str_Send.Add(StrArrayi); else Str_Send.AddRange(Devide(StrArrayi); int byteBufferLength = Str_Send.Count; byte byteBuffer = new bytebyteBuf

17、ferLength; int ii = 0; for (int i = 0; i Str_Send.Count; i+) int decNum = 0; try decNum = Convert.ToInt32(Str_Sendi, 16); /把字符串轉成16進制數 byteBufferii = Convert.ToByte(decNum); catch (System.Exception ex) MessageBox.Show(輸入錯誤!, 提示); return; ii+; sp1.Write(byteBuffer, 0, byteBuffer.Length);/從第0個開始寫入byte

18、Buffer,長度bytebuffer的長度。 void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e) byte byteRead = new bytesp1.BytesToRead; if (rbtnRceStr.Checked) memoRcv.Text += sp1.ReadExisting(); memoRcv.SelectionStart = memoRcv.Text.Length; memoRcv.ScrollToCaret(); else if (rbtnRce16.Checked) Byte rec

19、eivedData = new Bytesp1.BytesToRead; /創建接收字節數組 sp1.Read(receivedData, 0, receivedData.Length); string strRcv = null; for (int i = 0; i receivedData.Length; i+) strRcv += receivedDatai.ToString(X2); memoRcv.Text += strRcv; memoRcv.SelectionStart = memoRcv.Text.Length; memoRcv.ScrollToCaret(); private

20、 void Stop_Click(object sender, EventArgs e) /退出接收數據 tmSend.Stop(); private void Clear_Click(object sender, EventArgs e) /清空接收數據 memoRcv.Text = ; private void Time_Press(object sender, KeyPressEventArgs e) if (!Char.IsLetterOrDigit(e.KeyChar) e.Handled = true; else e.Handled = false; private void Te

21、xtTime_KeyPress(object sender, KeyPressEventArgs e) /限制定時發送時間只能輸入數字 if (!(Char.IsNumber(e.KeyChar) & e.KeyChar != (char)8) MessageBox.Show(請輸入數字, 提示); e.Handled = true; else e.Handled = false; private void memoSend_KeyPress(object sender, KeyPressEventArgs e) private void btnClose_Click(object sende

22、r, EventArgs e) /關閉串口 if (sp1.IsOpen) sp1.Close(); labSerial.Text = 串口號: + sp1.PortName; labState.Text = 狀 態:關閉; private void Send16_KeyPress(object sender, KeyPressEventArgs e) /string Send16 = memoRcv.Text; /byte buff = new byteSend16.Length / 2; /int index = 0; /for (int i = 0; i Send16.Length; i

23、 += 2) / / buffindex = Convert.ToByte(Send16.Substring(i, 2), 16); / +index; / /string result = Encoding.Default.GetString(buff); / MessageBox.Show(result); /memoRcv.Text = result; private void SendStr_KeyPress(object sender, KeyPressEventArgs e) /string SendStr = memoRcv.Text; /byte ba = System.Tex

24、t.ASCIIEncoding.Default.GetBytes(SendStr); /StringBuilder sb = new StringBuilder(); /foreach (byte b in ba) / / sb.Append(b.ToString(x); / / MessageBox.Show(sb.ToString(); /memoRcv.Text = sb.ToString(); private void rbtnSend16_CheckedChanged(object sender, EventArgs e) StateChanged_16 = 1; StateChan

25、ged_Ascii = 0; string StrSend = memoSend.Text; if (Temp_memoSend=StrSend.Trim()& Flag = 1) memoSend.Text = Temp; Flag = 0; else memoSend.Text = ; foreach (char S in StrSend) memoSend.Text += (byte)S).ToString(X2); private void rbtnSendStr_CheckedChanged(object sender, EventArgs e) if (StateChanged_16 = 1) Flag = 1; StateChanged_16 = 0; StateChanged_Ascii = 1; string StrSend = memoSend.Text; Temp = memoSend.Te

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論