搜索
bottom↓
回复: 27

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

[复制链接]

出0入0汤圆

发表于 2015-2-12 14:25:05 | 显示全部楼层 |阅读模式
刚开始学习C#,做了一个串口收发软件,默认使用COM1,献上源码。
给初学者做个借鉴,高手请直接无视

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2015-2-12 14:47:46 | 显示全部楼层
要不要这么简陋?

出0入0汤圆

发表于 2015-2-12 14:51:00 | 显示全部楼层
串口号一定要能自己选,一般设置到COM10吧。
现在都是USB转串口的。

出0入85汤圆

发表于 2015-2-12 15:00:20 | 显示全部楼层
太丑了。。。。。

出0入0汤圆

发表于 2015-2-12 15:25:39 | 显示全部楼层
简洁到极致

出0入0汤圆

发表于 2015-2-12 15:32:33 | 显示全部楼层
果然是新手,还有很大上升空间。。。

出0入0汤圆

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

出0入0汤圆

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

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

出0入0汤圆

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

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

出0入25汤圆

发表于 2015-2-12 17:34:30 | 显示全部楼层
C# 系统有效的串口号 可以直接获取 string[] portnames = SerialPort.GetPortNames();   

出0入0汤圆

发表于 2015-2-12 19:55:25 来自手机 | 显示全部楼层
我最近也做了一个c# vs2013的串口调试小程序,从Delphi7移植的,获取串口部分是从注册表读的,c#移植很轻松,百度一下就好了!

出0入0汤圆

发表于 2015-2-13 08:32:43 | 显示全部楼层
卢台长 发表于 2015-2-12 16:58
哪里可以参考,请附上链接,谢谢朋友哈。

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

出0入0汤圆

发表于 2015-3-1 15:16:02 | 显示全部楼层
SerialPort 类
  1. using System;
  2. using System.IO.Ports;
  3. using System.Threading;

  4. public class PortChat
  5. {
  6.     static bool _continue;
  7.     static SerialPort _serialPort;

  8.     public static void Main()
  9.     {
  10.         string name;
  11.         string message;
  12.         StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
  13.         Thread readThread = new Thread(Read);

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

  16.         // Allow the user to set the appropriate properties.
  17.         _serialPort.PortName = SetPortName(_serialPort.PortName);
  18.         _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
  19.         _serialPort.Parity = SetPortParity(_serialPort.Parity);
  20.         _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
  21.         _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
  22.         _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);

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

  26.         _serialPort.Open();
  27.         _continue = true;
  28.         readThread.Start();

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

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

  32.         while (_continue)
  33.         {
  34.             message = Console.ReadLine();

  35.             if (stringComparer.Equals("quit", message))
  36.             {
  37.                 _continue = false;
  38.             }
  39.             else
  40.             {
  41.                 _serialPort.WriteLine(
  42.                     String.Format("<{0}>: {1}", name, message));
  43.             }
  44.         }

  45.         readThread.Join();
  46.         _serialPort.Close();
  47.     }

  48.     public static void Read()
  49.     {
  50.         while (_continue)
  51.         {
  52.             try
  53.             {
  54.                 string message = _serialPort.ReadLine();
  55.                 Console.WriteLine(message);
  56.             }
  57.             catch (TimeoutException) { }
  58.         }
  59.     }

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

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

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

  71.         if (portName == "" || !(portName.ToLower()).StartsWith("com"))
  72.         {
  73.             portName = defaultPortName;
  74.         }
  75.         return portName;
  76.     }
  77.     // Display BaudRate values and prompt user to enter a value.
  78.     public static int SetPortBaudRate(int defaultPortBaudRate)
  79.     {
  80.         string baudRate;

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

  83.         if (baudRate == "")
  84.         {
  85.             baudRate = defaultPortBaudRate.ToString();
  86.         }

  87.         return int.Parse(baudRate);
  88.     }

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

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

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

  100.         if (parity == "")
  101.         {
  102.             parity = defaultPortParity.ToString();
  103.         }

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

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

  112.         if (dataBits == "")
  113.         {
  114.             dataBits = defaultPortDataBits.ToString();
  115.         }

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

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

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

  127.         Console.Write("Enter StopBits value (None is not supported and \n" +
  128.          "raises an ArgumentOutOfRangeException. \n (Default: {0}):", defaultPortStopBits.ToString());
  129.         stopBits = Console.ReadLine();

  130.         if (stopBits == "" )
  131.         {
  132.             stopBits = defaultPortStopBits.ToString();
  133.         }

  134.         return (StopBits)Enum.Parse(typeof(StopBits), stopBits, true);
  135.     }
  136.     public static Handshake SetPortHandshake(Handshake defaultPortHandshake)
  137.     {
  138.         string handshake;

  139.         Console.WriteLine("Available Handshake options:");
  140.         foreach (string s in Enum.GetNames(typeof(Handshake)))
  141.         {
  142.             Console.WriteLine("   {0}", s);
  143.         }

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

  146.         if (handshake == "")
  147.         {
  148.             handshake = defaultPortHandshake.ToString();
  149.         }

  150.         return (Handshake)Enum.Parse(typeof(Handshake), handshake, true);
  151.     }
  152. }
复制代码



出0入0汤圆

发表于 2015-3-1 15:16:42 | 显示全部楼层
这个是灰常经典滴 C#没什么技术含量 都封装了

出0入0汤圆

发表于 2015-3-1 16:52:23 | 显示全部楼层
Excellence 发表于 2015-2-12 16:36
楼主可以照SSCOM3.2 串口助手设计一下。
设计稳定了,C#也能学到不少。
  1.   foreach (string s in SerialPort.GetPortNames())
  2.         {
  3.             Console.WriteLine("   {0}", s);
  4.         }
复制代码

出0入0汤圆

发表于 2015-3-1 19:13:20 | 显示全部楼层
不是C#没有什么技术含量,要用好,也不是那么容易的,很多写的串口助手,思路根本就没有办法使用.必须要用缓存才行的.

出0入0汤圆

发表于 2015-3-1 19:34:50 | 显示全部楼层
高级语言不是都封装好了的吗,还想整多麻烦的东西

出0入0汤圆

发表于 2015-3-1 20:03:24 | 显示全部楼层
楼主加油,赞一个

出0入0汤圆

发表于 2015-3-1 20:55:03 | 显示全部楼层
楼主用了什么主题,看标题栏的颜色,是用windows classic theme?
看文件名,是WPF做的界面?

出0入0汤圆

发表于 2015-3-1 20:57:13 | 显示全部楼层
Ray______ 发表于 2015-3-1 19:34
高级语言不是都封装好了的吗,还想整多麻烦的东西

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

出0入0汤圆

发表于 2015-3-1 20:58:11 | 显示全部楼层
怎么WPF做的界面那么丑呢?

出0入0汤圆

 楼主| 发表于 2015-3-2 12:05:20 | 显示全部楼层
嘿嘿,我的电脑设置是classic风格

出0入0汤圆

发表于 2015-3-2 14:21:23 | 显示全部楼层
NEXEN1106 发表于 2015-3-2 12:05
嘿嘿,我的电脑设置是classic风格

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

出0入0汤圆

发表于 2016-6-3 12:20:41 | 显示全部楼层
谢谢楼主,很实用

出0入0汤圆

发表于 2016-6-3 12:36:50 | 显示全部楼层
太简洁了。。

出160入67汤圆

发表于 2016-6-5 11:43:24 | 显示全部楼层
不支持HEX收发吧?

出0入0汤圆

发表于 2016-6-14 16:50:49 | 显示全部楼层
封装再封装,省。

出0入0汤圆

发表于 2016-6-14 17:03:33 | 显示全部楼层
没有串口号选择
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 19:47

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表