參考:https://blog.csdn.net/mannix_lei/article/details/79979432
https://www.cnblogs.com/ElijahZeng/p/7609241.html
1、關於怎么建立工程的,這里就不過多贅述了,先用控件編寫個窗體程序如下

2、雙擊窗體跳轉到程序頁面,直接上代碼,代碼里有注釋,看注釋都可以看懂的
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; using System.Threading; //聲明線程命名空間 namespace TB528IL_APP { public partial class Form1 : Form { #region 字段/屬性/委托 /// <summary> /// 串行端口對象 /// </summary> private SerialPort sp; /// <summary> /// 串口接收數據委托 /// </summary> public delegate void ComReceiveDataHandler(string data); public ComReceiveDataHandler OnComReceiveDataHandler = null; /// <summary> /// 端口名稱數組 /// </summary> public string[] PortNameArr { get; set; } /// <summary> /// 串口通信開啟狀態 /// </summary> public bool PortState { get; set; } = false; /// <summary> /// 編碼類型 /// </summary> public Encoding EncodingType { get; set; } = Encoding.ASCII; #endregion public Form1() { InitializeComponent(); My_COM(); OpenPort("COM1"); } #region 方法 /********************************************* 函數名: My_COM() 功 能: 新建串口實例 參 數: 無 返回值: 無 ********************************************/ public void My_COM() { PortNameArr = SerialPort.GetPortNames(); sp = new SerialPort(); } /********************************************* 函數名:OpenPort(string portName, int boudRate = 115200, int dataBit = 8, int stopBit = 1, int timeout = 5000) 功 能:打開端口,並且初始化默認端口波特率、數據位、停止位、超時時間等參數 參 數:<param name="portName">端口名稱 <param name="boudRate">波特率 <param name="dataBit">數據位 <param name="stopBit">停止位 <param name="timeout">超時時間 返回值:無 ********************************************/ public void OpenPort(string portName, int boudRate = 115200, int dataBit = 8, int stopBit = 1, int timeout = 5000) { try { sp.PortName = portName; sp.BaudRate = boudRate; sp.DataBits = dataBit; sp.StopBits = (StopBits)stopBit; sp.ReadTimeout = timeout; sp.Open(); PortState = true; } catch (Exception e) { throw e; } } /********************************************* 函數名: ClosePort() 功 能: 關閉端口 參 數: 無 返回值: 無 ********************************************/ public void ClosePort() { try { sp.Close(); PortState = false; } catch (Exception e) { throw e; } } /********************************************* 函數名: SendData(string sendData) 功 能: 發送字符串數據 參 數: string sendData 串口要發送的字符串 返回值: 無 ********************************************/ public void SendData(string sendData) { try { sp.Encoding = EncodingType; sp.Write(sendData); } catch (Exception e) { throw e; } } /********************************************* 函數名: Send_Byte(string send_byte) 功 能: 把要發送的字符串轉換為16進制后發送,例如把字符串"9610"轉換為0x25、0x8a發送出去 參 數: string send_byte 串口要轉換為16進制發送的字符串 返回值: 無 ********************************************/ public void Send_Byte(string send_byte) { byte[] data = new byte[4]; int Time_Buff = 0; int.TryParse(send_byte, out Time_Buff); //將字符串轉換為整形 data[0] = 0x57; data[1] = 0xa1; data[2] = (byte)(Time_Buff >> 8); data[3] = (byte)Time_Buff; // 參數: // buffer: 包含要寫入端口的數據的字節數組。 // offset: buffer 參數中從零開始的字節偏移量,從此處開始將字節復制到端口。 // count : 要寫入的字節數。 sp.Write(data, 0, 4); } #endregion //發送Light_delay按鈕 private void button1_Click(object sender, EventArgs e) { //獲取文本框的值 string Light_delay = Light_delay_textBox.Text; //linght_delay_textBox為textBox控件的名稱 Send_Byte(Light_delay); } //發送Camera_delay按鈕 private void button2_Click(object sender, EventArgs e) { string Camera_delay = Camera_delay_textBox.Text; SendData(Camera_delay); } //發送Light_working_time按鈕 private void button3_Click(object sender, EventArgs e) { string Light_working_time = Light_working_time_textBox.Text; SendData(Light_working_time); } } }
3、運行結果如下,效果理想


4、關於串口接收還沒完全搞明白,遲點補回來
