串口通讯代码 (1).doc

上传人:温桑 文档编号:65732829 上传时间:2022-12-07 格式:DOC 页数:6 大小:62KB
返回 下载 相关 举报
串口通讯代码 (1).doc_第1页
第1页 / 共6页
串口通讯代码 (1).doc_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《串口通讯代码 (1).doc》由会员分享,可在线阅读,更多相关《串口通讯代码 (1).doc(6页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、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 showReceive

2、Delegate(string text); /当采用响应模式,应申明一个委托,实现不同线程的控件实验 SerialPort com = new SerialPort(COM2, 9600, Parity.None, 8, StopBits.One);/初始化构造函数 public Form1() InitializeComponent(); / / 窗体加载 / / / private void Form1_Load(object sender, EventArgs e) cmbPort.SelectedIndex = 0; cmbBaudRate.SelectedIndex = 0; cm

3、bDataBits.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.

4、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 =

5、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

6、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; i

7、f(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 c

8、ount = com.BytesToRead; byte readBuffer = new bytecount; 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(

9、); / / 数据接收模式变化时,设置串口的数据接收侦听事件 / / / 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 SerialDataReceivedEven

10、tHandler(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 bytecount; com.Read(readBuffer, 0, co

11、unt); 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(); / / /异

12、步线程处理接受的字符,显示在接收的文本框中 / / 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 txtS

13、end.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(t

14、xtReceive.Text); else txtReceive.Text = Encoding.Default.GetString(getBytesFromString(txtReceive.Text); catch txtStatus.Text =数据转换出错,请输入正确的数据格式; / / 把十六进制格式的字符串转换成字节数组。 / / 要转换的十六进制格式的字符串 / 返回字节数组。 public static byte getBytesFromString(string pString) string str = pString.Split( ); /把十六进制格式的字符串按空格转换

15、为字符串数组。 byte bytes = new bytestr.Length; /定义字节数组并初始化,长度为字符串数组的长度。 for (int i = 0; i str.Length; i+) /遍历字符串数组,把每个字符串转换成字节类型赋值给每个字节变量。 bytesi = Convert.ToByte(Convert.ToInt32(stri, 16); return bytes; /返回字节数组。 / / 把字节数组转换为十六进制格式的字符串。 / / 要转换的字节数组。 / 返回十六进制格式的字符串。 public static string getStringFromBytes(byte pByte) string str = ; /定义字符串类型临时变量。 /遍历字节数组,把每个字节转换成十六进制字符串,不足两位前面添“0”,以空格分隔累加到字符串变量里。 for (int i = 0; i pByte.Length; i+) str += (pBytei.ToString(X).PadLeft(2, 0) + ); str = str.TrimEnd( ); /去掉字符串末尾的空格。 return str; /返回字符串临时变量。 private void groupBox2_Enter(object sender, EventArgs e)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com