C#获取本机串口参数(适合初学者参考)
c# 获取 参数 适合 串口 参考 初学者
2023-09-27 14:27:33 时间
在C#中实现串口相比VC下容易很多,只要在工具栏中拖一个串口控件,设置好串口号即可开始工作。
如果是在后台运行串口通讯,那么简单的设置已经足够了。
当然,我们如果想让这个串口有比较友好的界面设置那么,我们在实现的时候,往往需要把界面上增加一些串口属性参数的设置框。
一、串口号选择框的实现(最简单的办法枚举有所串口号)
我在网上见到过很多利用注册表或者System.Management来获取本机所有可用串口号的代码,给我的感觉都有舍近求远的嫌疑。这里我们用朴实的方法,一句话搞定:
string[] sps = SerialPort.GetPortNames();
comboBox1.Items.AddRange(sps);
这个方法必须保证引入System.IO.Ports;
我们平时不怎么用串口的人可能对这个方法不太熟悉,这里提供官方的链接,一看就懂;
SerialPort官方链接
二、波特率及停止位的选择框的实现
我仔细的找了官方的文档,没有发现可以直接枚举出来的属性和方法,那么这里只能自己建立枚举,这里写出来,大家拷贝后即可使用,代码如下:
/// <summary>
/// 串口数据位列表(5,6,7,8)
/// </summary>
public enum SerialPortDatabits : int
{
FiveBits = 5,
SixBits = 6,
SeventBits = 7,
EightBits = 8
}
/// <summary>
/// 串口波特率列表。
/// 75,110,150,300,600,1200,2400,4800,9600,14400,19200,28800,38400,56000,57600,
/// 115200,128000,230400,256000
/// </summary>
public enum SerialPortBaudRates : int
{
BaudRate_75 = 75,
BaudRate_110 = 110,
BaudRate_150 = 150,
BaudRate_300 = 300,
BaudRate_600 = 600,
BaudRate_1200 = 1200,
BaudRate_2400 = 2400,
BaudRate_4800 = 4800,
BaudRate_9600 = 9600,
BaudRate_14400 = 14400,
BaudRate_19200 = 19200,
BaudRate_28800 = 28800,
BaudRate_38400 = 38400,
BaudRate_56000 = 56000,
BaudRate_57600 = 57600,
BaudRate_115200 = 115200,
BaudRate_128000 = 128000,
BaudRate_230400 = 230400,
BaudRate_256000 = 256000
}
其余的属性,相对简单也不常用,这里不再赘述。
public Form1()
{
InitializeComponent();
//获取串口号
string[] sps = SerialPort.GetPortNames();
comboBox1.Items.AddRange(sps);
comboBox1.SelectedIndex=comboBox1.Items.Count-1;
serialPort1.PortName = comboBox1.Text;
//获取波特率
SerialAttributeInfo.SetBauRateValues(comboBox2);
//注意,在用indexof时要将数字转为字符串,否则找不到
comboBox2.SelectedIndex = comboBox2.Items.IndexOf(serialPort1.BaudRate.ToString());
}
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text.Contains("O") && !serialPort1.IsOpen)
{
serialPort1.Open();
textBox1.Text = serialPort1.ReadChar().ToString();
button1.Text = "关闭串口[&C]";
}
else
{
serialPort1.Close();
button1.Text = "打开串口[&O]";
}
}
简单设置好后,我们就可以进行串口通讯了
运行效果如下图:
打开串口后可以收到串口的数据
这里的程序很简单,如果要比较好的实现时事通讯,那么最好用ReadBufferSize结合线程来控制读写。如果只需要简单的通讯,也可以结合计时器来实现。这里不再深入讨论。
相关文章
- [C#] 获取硬件 Id
- C# Winform获取bin目录的路径
- 从C#到Python手把手教你用Python实现内存扫描获取指定字符串
- ToString()的各种用法(大全) C# 获取所有国家时间格式
- C# -- 等待异步操作执行完成的方式 C# -- 使用委托 delegate 执行异步操作 JavaScript -- 原型:prototype的使用 DBHelper类连接数据库 MVC View中获取action、controller、area名称、参数
- C#获取当前路径的七种方法
- Word控件Spire.Doc 【Table】教程(18):如何在 C# 中的 Word 中创建嵌套表格
- Word处理控件Aspose.Words功能演示:如何在 C# .NET 中将 PNG、JPG 转换为 Word
- 【C#】request各个获取参数方法间的区别
- C# asp.net webapi下支持文件下载输出接口
- C#,二进制数的按位交换(Bits swap)的算法与源代码
- C#中的深复制和浅复制(在C#中克隆对象)
- c# 虚属性
- 使用xUnit,EF,Effort和ABP进行单元测试(C#)
- C# 2.0 Vista,sql2000带返回值存储过程调用
- C#委托的发布和订阅
- C# 多线程学习系列四之ThreadPool取消、超时子线程操作以及ManualResetEvent和AutoResetEvent信号量的使用
- C# httpclient获取cookies实现模拟web登录
- c#执行cmd命令并获取返回结果字符串
- C#中如何获取一个字体的宽度值(像素单位)
- 深入c# GDI+简单绘图的具体操作步骤(一)
- C#根据当前时间获取,本周,本月,本季度等时间段