c#操作串口

来源:互联网 发布:xp动态壁纸软件 编辑:程序博客网 时间:2024/05/22 05:30
这个类是调试过的,可以使用
<pre name="code" class="csharp">这个类是调试过的,可以使用/// <summary>    /// 对串口进行操作的类,其中包括写和读操作    /// </summary>    public class SerialClass    {        SerialPort _serialPort = null;        //定义委托        public delegate void SerialPortDataReceiveEventArgs(object sender,SerialDataReceivedEventArgs e,byte[] bits);        //定义接收数据事件        public event SerialPortDataReceiveEventArgs DataReceived;        /// <summary>        /// 默认构造函数,操作COM1,速度为9600,没有奇偶校验,8位字节,停止位为1        /// </summary>        public SerialClass()        {            _serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);            setSerialPort();        }        /// <summary>        /// 构造函数,        /// </summary>        /// <param name="comPortName"></param>        public SerialClass(string comPortName)        {            _serialPort = new SerialPort(comPortName);            setSerialPort();        }        /// <summary>        /// 构造函数,可以自定义串口的初始化参数        /// </summary>        /// <param name="comPortName">需要操作的COM口名称</param>        /// <param name="baudRate">COM的速度</param>        /// <param name="parity">奇偶校验位</param>        /// <param name="dataBits">数据长度</param>        /// <param name="stopBits">停止位</param>        public SerialClass(string comPortName, int baudRate, Parity parity, int dataBits, StopBits stopBits)        {            _serialPort = new SerialPort(comPortName, baudRate, parity, dataBits, stopBits);            setSerialPort();        }        /// <summary>        /// 设置串口资源,还需重载多个设置串口的函数        /// </summary>        void setSerialPort()        {            if (_serialPort != null)            {                //设置触发DataReceived事件的字节数为1                _serialPort.ReceivedBytesThreshold = 1;                //接收到一个字节时,也会触发DataReceived事件                _serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);                //接收数据出错,触发事件                _serialPort.ErrorReceived += new SerialErrorReceivedEventHandler(_serialPort_ErrorReceived);                //打开串口                openPort();            }        }        /// <summary>        /// 打开串口资源        /// </summary>        bool openPort()        {            bool ok = false;            //如果串口是打开的,先关闭            if (_serialPort.IsOpen)                _serialPort.Close();            try            {                //打开串口                _serialPort.Open();                ok = true;              }            catch (Exception Ex)            {                throw Ex;            }            return ok;        }        /// <summary>        /// 关闭串口资源,操作完成后,一定要关闭串口        /// </summary>        public void closePort()        {            //如果串口处于打开状态,则关闭            if (_serialPort.IsOpen)                _serialPort.Close();        }        /// <summary>        /// 接收串口数据事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)        {            if (DataReceived != null)            {                byte[] _data=new byte[_serialPort.BytesToRead];                _serialPort.Read(_data,0,_data.Length);                DataReceived(sender, e, _data);            }        }        /// <summary>        /// 接收数据出错事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        void _serialPort_ErrorReceived(object sender, SerialErrorReceivedEventArgs e)        {        }        public void writeData(string dataStr)        {            //发送数据,并加加车符            _serialPort.Write(dataStr + "\r");        }        /// <summary>        /// 获取所有已连接短信猫设备的串口        /// </summary>        /// <returns></returns>        public string[] serialsIsConnected()        {            List<string> lists = new List<string>();            string[] seriallist = getSerials();            foreach (string s in seriallist)            {            }            return lists.ToArray();        }        /// <summary>        /// 获得当前电脑上的所有串口资源        /// </summary>        /// <returns></returns>        public string[] getSerials()        {            return SerialPort.GetPortNames();        }        /// <summary>        /// 把字节型转换成十六进制字符串        /// </summary>        /// <param name="InBytes"></param>        /// <returns></returns>        public static string ByteToString(byte[] InBytes)        {            string StringOut = "";            foreach (byte InByte in InBytes)            {                StringOut = StringOut + String.Format("{0:X2} ", InByte);            }            return StringOut;        }        /// <summary>        /// 把十六进制字符串转换成字节型        /// </summary>        /// <param name="InString"></param>        /// <returns></returns>        public static byte[] StringToByte(string InString)        {            string[] ByteStrings;            ByteStrings = InString.Split(" ".ToCharArray());            byte[] ByteOut;            ByteOut = new byte[ByteStrings.Length - 1];            for (int i = 0; i == ByteStrings.Length - 1; i++)            {                ByteOut[i] = Convert.ToByte(("0x" + ByteStrings[i]));            }            return ByteOut;        }    } 调用代码        static SerialClass sc = new SerialClass();        static void Main(string[] Args)        {            sc.DataReceived += new SerialClass.SerialPortDataReceiveEventArgs(sc_DataReceived);            sc.writeData("at");            Console.ReadLine();            sc.closePort();        }        static void sc_DataReceived(object sender, SerialDataReceivedEventArgs e, byte[] bits)        {            Console.WriteLine(Encoding.Default.GetString(bits));        }


</pre><pre name="code" class="csharp">
0 0