欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#基于SerialPort类实现串口通讯详解

程序员文章站 2022-03-01 13:28:45
本文实例为大家分享了c#基于serialport类实现串口通讯的具体代码,供大家参考,具体内容如下最终效果窗体设置:using system;using system.collections.gene...

本文实例为大家分享了c#基于serialport类实现串口通讯的具体代码,供大家参考,具体内容如下

C#基于SerialPort类实现串口通讯详解

最终效果

C#基于SerialPort类实现串口通讯详解

窗体设置:

C#基于SerialPort类实现串口通讯详解

using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.linq;
using system.text;
using system.threading.tasks;
using system.io.ports;
using system.threading;
using system.windows.forms;

namespace serialcommunication
{
    public partial class form1 : form
    {
        system.threading.synchronizationcontext m_synccontext = null;
        serialport serialport = null;
        tohexadecimalstring tohexadecimalstring = new tohexadecimalstring();
        public form1()
        {
            m_synccontext = synchronizationcontext.current;
            initializecomponent();
        }

        //data initialization
        private void form1_load(object sender, eventargs e)
        {
            string[] ports = serialport.getportnames();
            serialportnumber.items.addrange(ports);
            serialportnumber.selectedindex = serialportnumber.items.count > 0 ? 0 : -1;
            baudratecom.text = "9600";  //set parameters
            checkbitcom.text = "none";
            databitcom.text = "8";
            stopbitcom.text = "one";
        }

            //send data
         private void send_click(object sender, eventargs e)
        {
            try
            {
                //send data and handle exceptions
                byte[] bytes = new byte[sendmessage.text.length];
                bytes = encoding.default.getbytes(sendmessage.text);
                serialport.write(bytes, 0, bytes.length);
            }
            catch (exception error)
            {
                messagebox.show(error.message);
            }
        }
                // byte to hexadecimal string 

        //clear data
        private void clear_click(object sender, eventargs e)
        {
            receivemessage.text = "";
        }

        private void open_click(object sender, eventargs e)
        {
            string portname = serialportnumber.text;
            int buadrate = int.parse(baudratecom.text);
            parity parity = 0;
            switch (checkbitcom.text)
            {
                case "none":
                    parity = parity.none; break;
                case "odd":
                    parity = parity.odd; break;
                case "even":
                    parity = parity.even; break;
                case "mark":
                    parity = parity.mark; break;
                case "space":
                    parity = parity.space; break;
            }
            int databit = int.parse(databitcom.text);
            stopbits stopbits = 0;
            switch (stopbitcom.text)
            {
                case "none":
                    stopbits = stopbits.none; break;
                case "one":
                    stopbits = stopbits.one; break;
                case "tow":
                    stopbits = stopbits.two; break;
                case "onepointfive":
                    stopbits = stopbits.onepointfive; break;
            }
            try
            {
                if (open.text == "open")
                {
                    serialport = new serialport(portname, buadrate, parity, databit, stopbits);
                    serialport.open();
                    open.text = "close";
                }
                else if (open.text == "close")
                {
                    serialport.close();
                    open.text = "open";
                }
            }
            catch (exception errror)
            {
                messagebox.show(errror.message);
            }
            serialport.datareceived += ondatareceived;

        }
        private void ondatareceived(object sender, serialdatareceivedeventargs e)
        {
            try
            {
                byte[] bytes = new byte[serialport.bytestoread];
                serialport.read(bytes, 0, serialport.bytestoread);
                m_synccontext.post(new sendorpostcallback((obj) =>
                {
                    receivemessage.appendtext(encoding.default.getstring(bytes));
                }), bytes);
            }
            catch (exception error)
            {
                messagebox.show(error.message);
            }
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。