c# 实现串口编程-操作LED屏幕

串口编程主要用到SerialPort这个类,主要实现对串口发送字节数组然后点阵屏显示相关信息,其实这个功能很简单下面给大家把整体思路用流程图展现如下:、

c# 实现串口编程-操作LED屏幕

其实整体思路就如流程图。下面是整个流程图的一个实现代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO.Ports;

using System.Threading;



namespace portchart

{

    class Serilaztion

    {

        SerialPort _serialPort;

        public Serilaztion(string com)

        {

            _serialPort = new SerialPort();

            _serialPort.PortName = com; 

            _serialPort.BaudRate = 4800; 

            _serialPort.Parity = Parity.None; 

            _serialPort.DataBits = 8; 

            _serialPort.StopBits = StopBits.One; 

            _serialPort.ReadBufferSize = 4096;

            _serialPort.Handshake = Handshake.None;  

            _serialPort.ReadTimeout = 500;

            _serialPort.WriteTimeout = 500;

            _serialPort.Open();

        }

        private static byte[] strToToHexByte(string hexString)

        {

            hexString = hexString.Replace(" ", "");

            if ((hexString.Length % 2) != 0)

                hexString += " ";

            byte[] returnBytes = new byte[hexString.Length / 2];

            for (int i = 0; i < returnBytes.Length; i++)

                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);

            return returnBytes;

        } 

        public static string StringToHexString(string s, Encoding encode)

        {

            byte[] b = encode.GetBytes(s);//按照指定编码将string编程字节数组

            string result = string.Empty;

            for (int i = 0; i < b.Length; i++)//逐字节变为16进制字符,以%隔开

            {

                result += Convert.ToString(b[i], 16);

                

            }

            return result;

        }

        

          

        public void SendMessage(string message, string com,string type)

        {

            System.Text.Encoding GB2312 = System.Text.Encoding.GetEncoding("GB2312");

            message = message.Trim();

            string kzm = "1B0104"; //开始码

            string hh = StringToHexString(message, GB2312);

            string js = "0D00"; //结束码

            string zf = kzm + hh + js;

            string s = "1B010320202020C7EB20C9CF20CFDF202020200D00";



            byte[] by = strToToHexByte(zf);

            byte[] bt = strToToHexByte(s);

       

          

                _serialPort.Write(by, 0, by.Length);

                _serialPort.Write(bt, 0, bt.Length);

        



        }

        public void Close()

        {

            _serialPort.Close();

        }

        public static string SetPortName(string defaultPortName)

        {

            string portName;



            Console.WriteLine("验证端口:");

            foreach (string s in SerialPort.GetPortNames())

            {

                Console.WriteLine("   {0}", s);

            }



            Console.Write("请输入Com端口(默认: {0}): ", defaultPortName);

            portName = Console.ReadLine();



            if (portName == "" || !(portName.ToLower()).StartsWith("com"))

            {

                portName = defaultPortName;

            }

            return portName;

        }

    

        public static int SetPortBaudRate(int defaultPortBaudRate)

        {

            string baudRate;



            Console.Write("设置波特率(默认:{0}): ", defaultPortBaudRate);

            baudRate = Console.ReadLine();



            if (baudRate == "")

            {

                baudRate = defaultPortBaudRate.ToString();

            }



            return int.Parse(baudRate);

        }



  

        public static Parity SetPortParity(Parity defaultPortParity)

        {

            string parity;



            Console.WriteLine("验证奇偶校验位:");

            foreach (string s in Enum.GetNames(typeof(Parity)))

            {

                Console.WriteLine("   {0}", s);

            }



            Console.Write("进入校验位 (默认: {0}):", defaultPortParity.ToString(), true);

            parity = Console.ReadLine();



            if (parity == "")

            {

                parity = defaultPortParity.ToString();

            }



            return (Parity)Enum.Parse(typeof(Parity), parity, true);

        }

    

        public static int SetPortDataBits(int defaultPortDataBits)

        {

            string dataBits;

            Console.Write("设置每个字节的标准数据位长度 (默认: {0}): ", defaultPortDataBits);

            dataBits = Console.ReadLine();

            if (dataBits == "")

            {

                dataBits = defaultPortDataBits.ToString();

            }

            return int.Parse(dataBits.ToUpperInvariant());

        }

      

        public static StopBits SetPortStopBits(StopBits defaultPortStopBits)

        {

            string stopBits;

            Console.WriteLine("设置每个字节的标准停止位数:");

            foreach (string s in Enum.GetNames(typeof(StopBits)))

            {

                Console.WriteLine("   {0}", s);

            }



       

            stopBits = Console.ReadLine();

            if (stopBits == "")

            {

                stopBits = defaultPortStopBits.ToString();

            }

            return (StopBits)Enum.Parse(typeof(StopBits), stopBits, true);

        }

        public static Handshake SetPortHandshake(Handshake defaultPortHandshake)

        {

            string handshake;



            Console.WriteLine("设置串行端口数据传输的握手协议:");

            foreach (string s in Enum.GetNames(typeof(Handshake)))

            {

                Console.WriteLine("   {0}", s);

            }

            Console.Write("端口数据传输的握手协议(默认: {0}):", defaultPortHandshake.ToString());

            handshake = Console.ReadLine();

            if (handshake == "")

            {

                handshake = defaultPortHandshake.ToString();

            }

            return (Handshake)Enum.Parse(typeof(Handshake), handshake, true);

        }

    }



}

上面我把串口的参数固定了,可以根据自己的需求设置自己要传的参数。

你可能感兴趣的:(C#)