优秀的编程知识分享平台

网站首页 > 技术文章 正文

C#串口组件的使用方法_c#串口控件使用方法

nanyue 2025-09-21 20:26:41 技术文章 2 ℃


第一步:在窗口界面放入串口组件,SeriaPort,组件会附在窗口下面隐藏区。

第二步:组件的Name属性改为sp1,方便后面程序输入和识别。

第三步:在窗口load函数中添加串口初始化参数设置语句

sp1.PortName = "COM4"; //设置串口号

sp1.BaudRate = 9600; //设置波特率

sp1.Parity =
System.IO.Ports.Parity.None; //不校验

sp1.DataBits = 8; //数据8位

sp1.StopBits =
System.IO.Ports.StopBits.One; //停止位1位

第四步:打开串口

sp1.Open(); //打开串口

第五步:发送数据的方法

1、先建一个要发送的数据数组

byte[] arrSend = new byte[] {0x10 , 0x20, 0x30}; //建立数组并赋值

2、发送数据到串口

sp1.Write( arrSend , 0, arrSend.Length); //数据写到串口输出,参数1是数组名(地址),参数2是起始偏移地址,参数3是数据长度

第六步:把发送数据的指令放入按钮的单击事件,然后单击按钮就能从串口发出数据了。

第七步:在窗口加载函数中添加接收相关指令

1、
sp1.ReceivedBytesThreshold = 12; //接收12个数据后触发DataReceived事件

2、准备一个中断处理函数

private void spReceive ( object sender , EventArgs e)

{

}

3、中断处理函数注册到窗口加载函数

sp1.DataReceived += spReceive; //放在1、的指令后面,收到12个字节后就能调到中断处理函数执行

4、建一个全局数组,放串口接收到的数据

位置:public partial class 窗口名:Form的下面

private byte[] arrBuff = new byte[100]; //100个字节空间的数组

5、写中断处理函数的内容,定义一个变量

int len;

len = sp1.Read( arrBuff , 0 , arrBuff.Length); //Read方法返回的是字节长度,赋值给len变量,读取的数据写入了全局数组arrRead中

6、显示接收的数据,建立一个方法

private string arrHextoStr ( byte[] arr , int len)

{

string temp = ""; //建一个空字符串变量

int i;

for (i=0;i!=len;i++) //每个数组值循环一次

{

temp += arr[i].ToString("X2")+" "; //把数组值转为字符串添加空格后添加到字符串变量中,ToString的参数X表示16进制,2代表2位

}

return temp;

}

7、显示接收的数据,指令放在中断处理函数中

Console.WriteLine(arrHextoStr( arrBuff , len)); // 把全局数组的数据转换成字符串,发送到控制台显示

第八步:在窗口中添加文本框,显示接收的数据

串口接收是一个单独的副线程,窗口是主线程,不能直接访问,属于跨线程,解决方法是需要一个委托,来实现跨线程访问。

1、建立一个数据处理函数,用来接收数据。

private void processData ( byte[] arr , int len)

{

textBox1.Text += arrHextoStr(arrBuff , len); //把接收全局数组的内容转换为字符串,赋值给文本组件显示

}

2、新建一个委托

在上面的函数前面加,

public delegate void deleFun (byte[] arr , int len); //委托,将方法作为参数传递给其他方法

3、然后在接收到数据这里,就是中断处理函数中,实例化委托

deleFun fun = new deleFun(processData);

4、然后调用,异步执行,就能在文本窗口中看到数据了

this.BeginInvoke ( Fun , arrBuff , len);

最近发表
标签列表