网站首页 > 技术文章 正文
第一步:在窗口界面放入串口组件,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);
猜你喜欢
- 2025-09-21 Python 变量学习_python怎么用变量
- 2025-09-21 生产环境使用HBase,你必须知道的最佳实践 | 百万人学AI
- 2025-09-21 5年程序员总结—这几个C语言问题超纲了,小白勿进
- 2025-09-21 C 语言“翻译阶段”全解析:从字符到记号,编译器到底干了什么?
- 2025-09-21 C++编程语言日常20个高级经典用法(含完整源码与输出)
- 2025-09-21 【C语言·023】变长数组的栈分配机制与使用限制
- 2025-09-21 【C语言·006】字符常量与转义序列的编码对应关系
- 2025-09-21 剑指Offer:字符串转整数的实现与边界处理
- 2024-08-06 【PythonTip题库精编300题】第35题:十六进制转换为二进制
- 2024-08-06 学习编程第135天 python编程二、八、十、十六进制转换
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)