当前位置: 首页 > article >正文

串口(SerialPort)的使用

一、SerialPort属性

1、需要引入的头文件

using System.IO;
using System.IO.Ports;

2、属性
2.1、控件如下:
在这里插入图片描述

2.2、属性如下:
在这里插入图片描述

BaudRate:波特率
DataBits:数据位
Parity:奇偶校验位
PortName:端口号
StopBits:停止位
ByteToRead:获取输入缓冲区的
IsOpen:获取是否开启串口

3、事件
串口通信的事件有三个:

DataReceived :串口接收函数
ErrorReceived :串口数据接收错误
PinChanged:串口号发生改变

4、常见的方法

Open:打开串口.
Close:关闭串口
Read:从SerialPort 输入缓冲区读
ReadByte:从SerialPort 输入缓冲区读一个字节
ReadChar:从SerialPort 输入缓冲区读一个字符
Write:写入到输出缓冲寄存器
Write(Byte[], Int32, Int32):使用缓冲区中的数据将指定数量的字节写入串行端口。
Write(Char[], Int32, Int32):使用缓冲区中的数据将指定数量的字符写入串行端口。
Write(String):将指定的字符串写入串行端口。
WriteLine(String):将指定的字符串和 NewLine 值写入输出缓冲区。
Read(Byte[], Int32, Int32):从 SerialPort 输入缓冲区读取一些字节并将那些字节写入字节数组中指定的偏移量处。
Read(Char[], Int32, Int32):从 SerialPort 输入缓冲区中读取一些字符,然后将这些字符写入字符数组中指定的偏移量处。
ReadByte():从 SerialPort 输入缓冲区中同步读取一个字节。
ReadChar():从 SerialPort 输入缓冲区中同步读取一个字符。
ReadExisting():在编码的基础上,读取 SerialPort 对象的流和输入缓冲区中所有立即可用的字节。
ReadLine():一直读取到输入缓冲区中的 NewLine 值。
ReadTo(String):一直读取到输入缓冲区中的指定 value 的字符串。

二、代码编写

2.1、串口初始化:

private void Form1_Load(object sender, EventArgs e)
{//添加COM端口for (int i = 1; i < 20; i++){comboBox1.Items.Add("COM" + i.ToString());}comboBox1.Text = "COM1";//串口号多额默认值comboBox2.Text = "4800";//波特率默认值/*****************非常重要************************///手动添加事件处理程序(也可以在前面的事件中添加)serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
}

注:获取本机可用串口号:

string[] PortNames = SerialPort.GetPortNames();    //获取本机串口名称,存入PortNames数组中
for (int i = 0; i < PortNames.Count(); i++) {cbxSerilPort.Items.Add(PortNames[i]);   //将数组内容加载到comboBox控件中}

2.2、打开串口:

//打开串口
private void button1_Click(object sender, EventArgs e){try{serialPort1.PortName = comboBox1.Text;serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text,10);//十进制数据转换serialPort1.Open();button1.Enabled = false;//打开串口按钮不可用button2.Enabled = true; //关闭串口}catch {MessageBox.Show("端口错误,请检查串口", "错误");}}

2.3、串口发送数据:

private void button_send_Click(object sender, EventArgs e)
{if(serialPort1.IsOpen)      //如果串口开启{if (textBox2.Text.Trim() != "")     //如果框内不为空则{//串口发送数据的方式1serialPort1.Write(textBox2.Text.Trim());     //串口发送数据的方式2//Byte[] TxData ={1,2,3,4,5,6,7,8 };//com.Write(TxData, 0, 8);}else{MessageBox.Show("发送框没有数据");}}else{MessageBox.Show("串口未打开");}}

2.4、串口接收数据:

 //串口数据接收事件
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{if (!radioButton3.Checked)         //如果接收模式为字符模式{string str = serialPort1.ReadExisting();     //字符串方式读textBox1.AppendText(str);//添加内容}else                 //如果接收模式为数值接收{ byte data;data = (byte)serialPort1.ReadByte();  //此处需要强制类型转换,将(int)类型数据转换为(byte)类型数据,不必考虑是否会丢失数据string str = Convert.ToString(data, 16).ToUpper();//转换为大写十六进制字符串textBox1.AppendText("0x" + (str.Length == 1 ? "0" + str : str) + " ");//空位补“0”   //上一句等同为:if(str.Length == 1)//                  str = "0" + str;//              else //                  str = str;//              textBox1.AppendText("0x" + str);}
}
http://www.lryc.cn/news/2416968.html

相关文章:

  • 常用正交表(正交法编写测试用例)
  • Redis——持久化之RDB
  • rhapsody软件_Rhapsody集成引擎之日志篇(一)
  • 撞库及其危害性
  • log4net的使用步骤
  • 2的n次方对照表
  • 【Android 四大组件之Service】一文吃透Service 服务
  • Linux 文件系统挂载 INITRAMFS 与 INITRD
  • PreparedStatement 用法
  • Nginx-基本安装
  • Windows Vista 系统中的用户帐户控制和UAC远程限制 设置
  • 总线概述及常见总线
  • 基于JAVAWeb+Tomcat+Mysql开发的微电影网站
  • Java 常用代码汇总-附源码
  • C语言之文件读写——fscanf(),fprintf()详解
  • mailbox机制实例介绍(一)
  • 线性代数——余子式
  • HCIP------ 网络类型 PPP协议和HDCL协议
  • TrueCrypt原理与系统开发
  • 数据增强 - Cutout、Random Erasing、Mixup、Cutmix
  • 探索 `mpvue-vant`: 微信小程序开发的新利器
  • mint-ui使用
  • JqGrid 各个属性、方法使用说明
  • 快速上手 Rook,入门云原生存储编排
  • xxxxxxxxxxxxxxxxxxxxx已转行
  • ROV简易组装说明
  • 还在为没有项目做发愁?这几个神级开源网站,都是FPGA/IC项目
  • segment fault异常及常见定位手段
  • 分享几个源码网站奉献给大家(持续更新中……)
  • 【pmcaff】重磅干货,必读的扁平化设计技巧