NEXEN1106 发表于 2015-2-12 14:25:05

发个刚做的简单串口软件,基于C# .net4.0

刚开始学习C#,做了一个串口收发软件,默认使用COM1,献上源码。
给初学者做个借鉴,高手请直接无视

mubei 发表于 2015-2-12 14:47:46

要不要这么简陋?

Excellence 发表于 2015-2-12 14:51:00

串口号一定要能自己选,一般设置到COM10吧。
现在都是USB转串口的。

ZXF_CUG 发表于 2015-2-12 15:00:20

太丑了。。。。。

mo_fish 发表于 2015-2-12 15:25:39

简洁到极致

markdif 发表于 2015-2-12 15:32:33

果然是新手,还有很大上升空间。。。{:titter:}

Excellence 发表于 2015-2-12 16:36:14

楼主可以照SSCOM3.2 串口助手设计一下。
设计稳定了,C#也能学到不少。

NEXEN1106 发表于 2015-2-12 16:47:38

Excellence 发表于 2015-2-12 16:36
楼主可以照SSCOM3.2 串口助手设计一下。
设计稳定了,C#也能学到不少。

多谢前辈指导,正在研究中

卢台长 发表于 2015-2-12 16:58:15

Excellence 发表于 2015-2-12 16:36
楼主可以照SSCOM3.2 串口助手设计一下。
设计稳定了,C#也能学到不少。

哪里可以参考,请附上链接,谢谢朋友哈。

墨非 发表于 2015-2-12 17:34:30

C# 系统有效的串口号 可以直接获取 string[] portnames = SerialPort.GetPortNames();   

coleyao 发表于 2015-2-12 19:55:25

我最近也做了一个c# vs2013的串口调试小程序,从Delphi7移植的,获取串口部分是从注册表读的,c#移植很轻松,百度一下就好了!

Excellence 发表于 2015-2-13 08:32:43

卢台长 发表于 2015-2-12 16:58
哪里可以参考,请附上链接,谢谢朋友哈。

没源代码。你可以看看软件功能。

yufeistudio 发表于 2015-3-1 15:16:02

SerialPort 类
using System;
using System.IO.Ports;
using System.Threading;

public class PortChat
{
    static bool _continue;
    static SerialPort _serialPort;

    public static void Main()
    {
      string name;
      string message;
      StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
      Thread readThread = new Thread(Read);

      // Create a new SerialPort object with default settings.
      _serialPort = new SerialPort();

      // Allow the user to set the appropriate properties.
      _serialPort.PortName = SetPortName(_serialPort.PortName);
      _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
      _serialPort.Parity = SetPortParity(_serialPort.Parity);
      _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
      _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
      _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);

      // Set the read/write timeouts
      _serialPort.ReadTimeout = 500;
      _serialPort.WriteTimeout = 500;

      _serialPort.Open();
      _continue = true;
      readThread.Start();

      Console.Write("Name: ");
      name = Console.ReadLine();

      Console.WriteLine("Type QUIT to exit");

      while (_continue)
      {
            message = Console.ReadLine();

            if (stringComparer.Equals("quit", message))
            {
                _continue = false;
            }
            else
            {
                _serialPort.WriteLine(
                  String.Format("<{0}>: {1}", name, message));
            }
      }

      readThread.Join();
      _serialPort.Close();
    }

    public static void Read()
    {
      while (_continue)
      {
            try
            {
                string message = _serialPort.ReadLine();
                Console.WriteLine(message);
            }
            catch (TimeoutException) { }
      }
    }

    // Display Port values and prompt user to enter a port.
    public static string SetPortName(string defaultPortName)
    {
      string portName;

      Console.WriteLine("Available Ports:");
      foreach (string s in SerialPort.GetPortNames())
      {
            Console.WriteLine("   {0}", s);
      }

      Console.Write("Enter COM port value (Default: {0}): ", defaultPortName);
      portName = Console.ReadLine();

      if (portName == "" || !(portName.ToLower()).StartsWith("com"))
      {
            portName = defaultPortName;
      }
      return portName;
    }
    // Display BaudRate values and prompt user to enter a value.
    public static int SetPortBaudRate(int defaultPortBaudRate)
    {
      string baudRate;

      Console.Write("Baud Rate(default:{0}): ", defaultPortBaudRate);
      baudRate = Console.ReadLine();

      if (baudRate == "")
      {
            baudRate = defaultPortBaudRate.ToString();
      }

      return int.Parse(baudRate);
    }

    // Display PortParity values and prompt user to enter a value.
    public static Parity SetPortParity(Parity defaultPortParity)
    {
      string parity;

      Console.WriteLine("Available Parity options:");
      foreach (string s in Enum.GetNames(typeof(Parity)))
      {
            Console.WriteLine("   {0}", s);
      }

      Console.Write("Enter Parity value (Default: {0}):", defaultPortParity.ToString(), true);
      parity = Console.ReadLine();

      if (parity == "")
      {
            parity = defaultPortParity.ToString();
      }

      return (Parity)Enum.Parse(typeof(Parity), parity, true);
    }
    // Display DataBits values and prompt user to enter a value.
    public static int SetPortDataBits(int defaultPortDataBits)
    {
      string dataBits;

      Console.Write("Enter DataBits value (Default: {0}): ", defaultPortDataBits);
      dataBits = Console.ReadLine();

      if (dataBits == "")
      {
            dataBits = defaultPortDataBits.ToString();
      }

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

    // Display StopBits values and prompt user to enter a value.
    public static StopBits SetPortStopBits(StopBits defaultPortStopBits)
    {
      string stopBits;

      Console.WriteLine("Available StopBits options:");
      foreach (string s in Enum.GetNames(typeof(StopBits)))
      {
            Console.WriteLine("   {0}", s);
      }

      Console.Write("Enter StopBits value (None is not supported and \n" +
         "raises an ArgumentOutOfRangeException. \n (Default: {0}):", defaultPortStopBits.ToString());
      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("Available Handshake options:");
      foreach (string s in Enum.GetNames(typeof(Handshake)))
      {
            Console.WriteLine("   {0}", s);
      }

      Console.Write("End Handshake value (Default: {0}):", defaultPortHandshake.ToString());
      handshake = Console.ReadLine();

      if (handshake == "")
      {
            handshake = defaultPortHandshake.ToString();
      }

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



yufeistudio 发表于 2015-3-1 15:16:42

这个是灰常经典滴 C#没什么技术含量 都封装了

yufeistudio 发表于 2015-3-1 16:52:23

Excellence 发表于 2015-2-12 16:36
楼主可以照SSCOM3.2 串口助手设计一下。
设计稳定了,C#也能学到不少。

foreach (string s in SerialPort.GetPortNames())
      {
            Console.WriteLine("   {0}", s);
      }

dongwang_fl 发表于 2015-3-1 19:13:20

不是C#没有什么技术含量,要用好,也不是那么容易的,很多写的串口助手,思路根本就没有办法使用.必须要用缓存才行的.

Ray______ 发表于 2015-3-1 19:34:50

高级语言不是都封装好了的吗,还想整多麻烦的东西

yixin1851 发表于 2015-3-1 20:03:24

楼主加油,赞一个

zage 发表于 2015-3-1 20:55:03

楼主用了什么主题,看标题栏的颜色,是用windows classic theme?
看文件名,是WPF做的界面?

zage 发表于 2015-3-1 20:57:13

Ray______ 发表于 2015-3-1 19:34
高级语言不是都封装好了的吗,还想整多麻烦的东西

都封装好也不见得每个人都能用好,都能做出好的东西

duxingkei 发表于 2015-3-1 20:58:11

怎么WPF做的界面那么丑呢?

NEXEN1106 发表于 2015-3-2 12:05:20

嘿嘿,我的电脑设置是classic风格

duxingkei 发表于 2015-3-2 14:21:23

NEXEN1106 发表于 2015-3-2 12:05
嘿嘿,我的电脑设置是classic风格

我下载下来打开,界面还可以
确实是风格不同造成的

ed20000 发表于 2016-6-3 12:20:41

谢谢楼主,很实用{:smile:}

闲鱼翻身 发表于 2016-6-3 12:36:50

太简洁了。。

mndsoft2012 发表于 2016-6-5 11:43:24

不支持HEX收发吧?

lyl520719 发表于 2016-6-14 16:50:49

封装再封装,省。

huangqi412 发表于 2016-6-14 17:03:33

没有串口号选择
页: [1]
查看完整版本: 发个刚做的简单串口软件,基于C# .net4.0