发个刚做的简单串口软件,基于C# .net4.0
刚开始学习C#,做了一个串口收发软件,默认使用COM1,献上源码。给初学者做个借鉴,高手请直接无视 要不要这么简陋? 串口号一定要能自己选,一般设置到COM10吧。
现在都是USB转串口的。 太丑了。。。。。 简洁到极致 果然是新手,还有很大上升空间。。。{:titter:} 楼主可以照SSCOM3.2 串口助手设计一下。
设计稳定了,C#也能学到不少。 Excellence 发表于 2015-2-12 16:36
楼主可以照SSCOM3.2 串口助手设计一下。
设计稳定了,C#也能学到不少。
多谢前辈指导,正在研究中 Excellence 发表于 2015-2-12 16:36
楼主可以照SSCOM3.2 串口助手设计一下。
设计稳定了,C#也能学到不少。
哪里可以参考,请附上链接,谢谢朋友哈。 C# 系统有效的串口号 可以直接获取 string[] portnames = SerialPort.GetPortNames(); 我最近也做了一个c# vs2013的串口调试小程序,从Delphi7移植的,获取串口部分是从注册表读的,c#移植很轻松,百度一下就好了! 卢台长 发表于 2015-2-12 16:58
哪里可以参考,请附上链接,谢谢朋友哈。
没源代码。你可以看看软件功能。 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);
}
}
这个是灰常经典滴 C#没什么技术含量 都封装了 Excellence 发表于 2015-2-12 16:36
楼主可以照SSCOM3.2 串口助手设计一下。
设计稳定了,C#也能学到不少。
foreach (string s in SerialPort.GetPortNames())
{
Console.WriteLine(" {0}", s);
} 不是C#没有什么技术含量,要用好,也不是那么容易的,很多写的串口助手,思路根本就没有办法使用.必须要用缓存才行的. 高级语言不是都封装好了的吗,还想整多麻烦的东西 楼主加油,赞一个 楼主用了什么主题,看标题栏的颜色,是用windows classic theme?
看文件名,是WPF做的界面? Ray______ 发表于 2015-3-1 19:34
高级语言不是都封装好了的吗,还想整多麻烦的东西
都封装好也不见得每个人都能用好,都能做出好的东西 怎么WPF做的界面那么丑呢? 嘿嘿,我的电脑设置是classic风格 NEXEN1106 发表于 2015-3-2 12:05
嘿嘿,我的电脑设置是classic风格
我下载下来打开,界面还可以
确实是风格不同造成的
谢谢楼主,很实用{:smile:} 太简洁了。。 不支持HEX收发吧? 封装再封装,省。 没有串口号选择
页:
[1]