上位机软件干货(2)——串口通信(c#、winform)
串口打开代码如下:
private void button4_Click(object sender, EventArgs e)
{
if (button4.Text == "打开串口")
{
try
{
if (serialPort1.IsOpen == false)
{
string portName = comboBox_PortName.SelectedItem.ToString();
int baudRate = Convert.ToInt32(comboBox_BaudRate.SelectedItem);
serialPort1.PortName = portName;
serialPort1.BaudRate = baudRate;
serialPort1.StopBits = StopBits.One;
serialPort1.Parity = Parity.None;
serialPort1.DataBits = 8;
serialPort1.Open();
if (serialPort1.IsOpen)
{
button4.Text = "关闭串口";
}
else
{
}
}
else
{
button4.Text = "关闭串口";
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
else
{
button4.Text = "打开串口";
}
}
数据发送代码如下:
private void button1_Click(object sender, EventArgs e)
{
try
{
if (rbtASCII.Checked)
{
string sendStr = tbxSend.Text.Trim();
byte[] sendBytes = Encoding.ASCII.GetBytes(sendStr);
serialPort1.Write(sendBytes, 0, sendBytes.Length);
}
else
{
string[] sendStrs = tbxSend.Text.Trim().Split(new char[] {
});
byte[] sendBytes = sendStrs.Select(new Func<string, byte>((item) => Convert.ToByte(item, 16))).ToArray();
serialPort1.Write(sendBytes, 0, sendBytes.Length);
}
}
catch
{
}
}
数据接收代码如下:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
Thread.Sleep(50);
int nums = serialPort1.BytesToRead;
byte[] receiveBytes = new byte[nums];
serialPort1.Read(receiveBytes, 0, nums);
StringBuilder sb = new StringBuilder();
if (rbt16.Checked)
{
for (int i = 0; i < nums; i++)
{
byte[] tempBytes = new byte[] {
receiveBytes[i] };
string str = BitConverter.ToString(tempBytes);
string tempStr = (i % 2) == 0 ? str + " " : str;
sb.Append(tempStr);
}
sb.AppendLine("
");
UpdateUiString(sb.ToString());
}
else
{
string str = Encoding.ASCII.GetString(receiveBytes);
UpdateUiString(str);
}
sb.Clear();
}
、
