云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 串口通讯代码

串口通讯代码

  • 62 次阅读
  • 3 次下载
  • 2025/5/4 4:19:08

using System;

using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;

using System.Windows.Forms;

using System.IO.Ports; //导入串口的命名空间

namespace _01_SerialPort {

public partial class Form1 : Form {

public delegate void showReceiveDelegate(string text); //当采用响应模式,应申明一个委托,实现不同线程的控件实验

SerialPort com = new SerialPort(\, 9600, Parity.None, 8, StopBits.One);//初始化构造函数 public Form1() {

InitializeComponent(); }

///

/// 窗体加载 ///

///

private void Form1_Load(object sender, EventArgs e) {

cmbPort.SelectedIndex = 0; cmbBaudRate.SelectedIndex = 0; cmbDataBits.SelectedIndex = 0; cmbStopBits.SelectedIndex = 0;

cmbParity.SelectedIndex = 0; }

///

/// 串口打开与关闭 ///

///

private void btnOpen_Click(object sender, EventArgs e) {

if (btnOpen.Text == \打开串口\) {

try {

if (!com.IsOpen) {

com.PortName = cmbPort.Text;

com.BaudRate = int.Parse(cmbBaudRate.Text); com.DataBits = int.Parse(cmbDataBits.Text);

switch (cmbStopBits.SelectedIndex) { case 0:

com.StopBits = StopBits.One; break; case 1:

com.StopBits = StopBits.Two; break;

case 2:

com.StopBits = StopBits.OnePointFive; break; case 3: com.StopBits = StopBits.None; break; }

switch (cmbParity.SelectedIndex) {

case 0: com.Parity = Parity.None; break; case 1: com.Parity = Parity.Odd; break; case 2: com.Parity = Parity.Even; break; }

com.Open();//打开串口 }

btnOpen.Text = \关闭串口\;

txtStatus.Text = \串口已打开!\; btnSend.Enabled = true; if (rbAck.Checked)

btnReceive.Enabled = true; //应答模式,接收按钮有效 } catch

{ txtStatus.Text = \串口打开错误或串口不存在!\; } }

else //关闭串口

try {

if (com.IsOpen)

com.Close(); //关闭串口 btnOpen.Text = \打开串口\;

txtStatus.Text = \串口已关闭!\; btnSend.Enabled = false ; if (rbAck.Checked)

btnReceive.Enabled = false; //应答模式,接收按钮有效 } catch

{ txtStatus.Text = \串口关闭错误或串口不存在!\; } }

///

/// 串口发送数据 ///

///

private void btnSend_Click(object sender, EventArgs e) {

try {

byte[] data = null;

if(chkSendHex.Checked)

data = getBytesFromString(txtSend.Text); else

data = Encoding.Default.GetBytes(txtSend.Text); com.Write(data, 0, data.Length); }

catch (Exception err)

{ txtStatus.Text = err.ToString(); }

}

///

/// 串口接收数据,应答模式时 ///

///

private void btnReceive_Click(object sender, EventArgs e) {

try {

//应答模式

int count = com.BytesToRead;

byte[] readBuffer = new byte[count]; com.Read(readBuffer, 0, count); if (chkRecHex.Checked)

txtReceive.Text = getStringFromBytes(readBuffer); //转十六进制 else

txtReceive.Text = Encoding.Default.GetString(readBuffer); //字母、数字、汉字转换为字符串

}

catch (Exception err)

{ txtStatus.Text = err.ToString(); } }

///

/// 数据接收模式变化时,设置串口的数据接收侦听事件 ///

///

private void rbResponse_CheckedChanged(object sender, EventArgs e) {

try

{ btnReceive.Enabled = rbAck.Checked; if(rbResponse.Checked)

com.DataReceived += new SerialDataReceivedEventHandler(com_DataReceived); //加载接收事件

else

com.DataReceived -= new SerialDataReceivedEventHandler(com_DataReceived); //移除接收事件

}

catch (Exception err)

{ txtStatus.Text = err.ToString(); }

}

///

/// 响应模式时,串口接收数据事件 ///

///

private void com_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { try {

int count = com.BytesToRead;

byte[] readBuffer = new byte[count];

com.Read(readBuffer, 0, count); string strReceive=\; if(chkRecHex.Checked)

strReceive = getStringFromBytes(readBuffer); //转十六进制 else

strReceive = Encoding.Default.GetString(readBuffer); //字母、数字、汉字转换为字符串 this.Invoke(new showReceiveDelegate(doShowReceive), strReceive);

}

catch (Exception err)

{ txtStatus.Text = err.ToString(); }

}

///

/// //异步线程处理接受的字符,显示在接收的文本框中 ///

///

public void doShowReceive(string str) {

txtReceive.Text += str; }

///

/// 以十六进制数据发送转换时,显示转换对应数据 ///

///

private void chkSendHex_CheckedChanged(object sender, EventArgs e) { try {

if (chkSendHex.Checked)

txtSend.Text = getStringFromBytes( Encoding.Default.GetBytes(txtSend.Text)); else

txtSend.Text =Encoding.Default.GetString(getBytesFromString(txtSend.Text)); } catch

{ txtStatus.Text = \数据转换出错,请输入正确的数据格式\; } }

///

/// 以十六进制数据显示接收数据时,显示对应数据

///

///

private void chkRecHex_CheckedChanged(object sender, EventArgs e) {

try

{ if (chkRecHex.Checked)

txtReceive.Text = getStringFromBytes(Encoding.Default.GetBytes(txtReceive.Text)); else

txtReceive.Text = Encoding.Default.GetString(getBytesFromString(txtReceive.Text)); } catch

{ txtStatus.Text =\数据转换出错,请输入正确的数据格式\; } }

///

/// 把十六进制格式的字符串转换成字节数组。 ///

/// /// 返回字节数组。

public static byte[] getBytesFromString(string pString) {

string[] str = pString.Split(' '); //把十六进制格式的字符串按空格转换为字符串数组。 byte[] bytes = new byte[str.Length]; //定义字节数组并初始化,长度为字符串数组的长度。

for (int i = 0; i < str.Length; i++) //遍历字符串数组,把每个字符串转换成字节类型赋值给每个字节变量。

bytes[i] = Convert.ToByte(Convert.ToInt32(str[i], 16)); return bytes; //返回字节数组。 }

///

/// 把字节数组转换为十六进制格式的字符串。 ///

/// /// 返回十六进制格式的字符串。 public static string getStringFromBytes(byte[] pByte) {

string str = \; //定义字符串类型临时变量。

//遍历字节数组,把每个字节转换成十六进制字符串,不足两位前面添“0”,以空格分隔累加到字符串变量里。

for (int i = 0; i < pByte.Length; i++)

str += (pByte[i].ToString(\).PadLeft(2, '0') + \); str = str.TrimEnd(' '); //去掉字符串末尾的空格。 return str; //返回字符串临时变量。 }

private void groupBox2_Enter(object sender, EventArgs e) {

} } }

搜索更多关于: 串口通讯代码 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; //导入串口的命名空间 namespace _01_SerialPort { public partial class Form1 : Form { public delegate void showReceiveDelegate(string text);

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com