1、C#中的串口操作SerialPort编程(C#)SerialPort 2008-12-25 14:20:08 阅读8760 评论4 字号:大中小 订阅 微软代码:取出本机的COM端口字符串public static string GetPortNames() RegistryKey localMachine = null; RegistryKey key2 = null;string textArray = null;/这里有个断言,判断该注册表项是否存在 new RegistryPermission(RegistryPermissionAccess.Read, HKEY_LOCAL_MACH
2、INEHARDWAREDEVICEMAPSERIALCOMM).Assert(); try localMachine = Registry.LocalMachine; key2 = localMachine.OpenSubKey(HARDWAREDEVICEMAPSERIALCOMM, false); if (key2 != null) string valueNames = key2.GetValueNames(); textArray = new stringvalueNames.Length; for (int i = 0; i valueNames.Length; i+) textAr
3、rayi = (string) key2.GetValue(valueNamesi); finally if (localMachine != null) localMachine.Close(); if (key2 != null) key2.Close(); CodeAccessPermission.RevertAssert(); if (textArray = null) textArray = new string0; return textArray; VS.NET2005中SerialPort控件操作详解(C#) using System;using System.Collecti
4、ons.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO.Ports;namespace SerialPorts public partial class frm_Main : Form #region Public Enumerations public enum DataMode Text, Hex public enum LogMsgType Incoming, Out
5、going, Normal, Warning, Error ; #endregion private Color LogMsgTypeColor = Color.Orange, Color.Green, Color.Black, Color.Blue, Color.Red ; /禁用和启用程序中各控件的状态 private void EnableControls() / 基于串口的打开与否,设置控件状态 gbPortSettings.Enabled = !ComPort.IsOpen; btns.Enabled = btnstop.Enabled = txtSendData.Enabled =
6、 btnSend.Enabled = ComPort.IsOpen; if (ComPort.IsOpen) btnOpenPort.Text = 关闭串口; else btnOpenPort.Text = 打开串口; /初始化组件的数据,为串口提供相关参数 private void InitializeControlValues() cmbParity.Items.Clear(); cmbParity.Items.AddRange(Enum.GetNames(typeof(Parity); cmbStopBits.Items.Clear(); cmbStopBits.Items.AddRan
7、ge(Enum.GetNames(typeof(StopBits); cmbPortName.Items.Clear(); foreach (string s in SerialPort.GetPortNames() cmbPortName.Items.Add(s); cmbPortName.Text = cmbPortName.Items0.ToString(); cmbParity.Text = cmbParity.Items0.ToString(); cmbStopBits.Text = cmbStopBits.Items0.ToString(); cmbDataBits.Text =
8、cmbDataBits.Items0.ToString(); cmbParity.Text = cmbParity.Items0.ToString(); cmbBaudRate.Text = cmbBaudRate.Items0.ToString(); EnableControls(); /十六进制转换字节数组 private byte HexStringToByteArray(string s) s = s.Replace( , ); byte buffer = new bytes.Length / 2; for (int i = 0; i s.Length; i += 2) bufferi
9、 / 2 = (byte)Convert.ToByte(s.Substring(i, 2), 16); return buffer; /字节数组转换十六进制 private string ByteArrayToHexString(byte data) StringBuilder sb = new StringBuilder(data.Length * 3); foreach (byte b in data) sb.Append(Convert.ToString(b, 16).PadLeft(2, 0).PadRight(3, ); return sb.ToString().ToUpper();
10、 /显示数据日志 private void Log(LogMsgType msgtype, string msg) rtfTerminal.Invoke(new EventHandler(delegate rtfTerminal.SelectedText = string.Empty; rtfTerminal.SelectionFont = new Font(rtfTerminal.SelectionFont, FontStyle.Bold); rtfTerminal.SelectionColor = LogMsgTypeColor(int)msgtype; rtfTerminal.Appen
11、dText(msg); rtfTerminal.ScrollToCaret(); ); /串口发送方式 #region Local Properties private DataMode CurrentDataMode get if (rbHex.Checked) return DataMode.Hex; else return DataMode.Text; set if (value = DataMode.Text) rbText.Checked = true; else rbHex.Checked = true; #endregion /发送数据 private void SendData
12、() if (CurrentDataMode = DataMode.Text) / 发送用户的文本到串口 ComPort.Write(txtSendData.Text); / 将用户的文本显示到数据窗口 Log(LogMsgType.Outgoing, txtSendData.Text + n); else try / 转换用户十六进制数据到字节数组 byte data = HexStringToByteArray(txtSendData.Text); / 发送数据到串口 ComPort.Write(data, 0, data.Length); / 将用户十六进制数据到数据窗口 Log(Log
13、MsgType.Outgoing, ByteArrayToHexString(data) + n); catch (FormatException) / 转换错误 Log(LogMsgType.Error, 十六进制数据有误: + txtSendData.Text + n); txtSendData.SelectAll(); / / - / public frm_Main() InitializeComponent(); private void Form1_Load(object sender, EventArgs e) InitializeControlValues(); ComPort.
14、DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); /打开串口 private void btnOpenPort_Click(object sender, EventArgs e) if (ComPort.IsOpen) ComPort.Close(); else /设置串口参数 ComPort.BaudRate = int.Parse(cmbBaudRate.Text); ComPort.DataBits = int.Parse(cmbDataBits.Text); ComPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cmbStopBits.Text); ComPort.Parity = (Parity)Enum.Parse(typeof(Parity), cmbPari
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1