1.设计程序UI界面如下:

串口参数的设置可以是如上所述的自主选择,也可以写固定的。在实际工程上,一般写死,减少维护工作量。

2.添加业务逻辑

第一步:初始化参数

        /// <summary>/// 界面初始化/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Form1_Load(object sender, EventArgs e){for (int i = 1; i < 9; i++){cbb_comnumber.Items.Add("COM" + i);}cbb_comnumber.SelectedIndex = 0;//默认选择第一个参数cbb_baud.Items.Add(2400);cbb_baud.Items.Add(4800);cbb_baud.Items.Add(9600);cbb_baud.Items.Add(19200);cbb_baud.Items.Add(38400);cbb_baud.Items.Add(76800);cbb_baud.SelectedIndex = 2;cbb_data.SelectedIndex = 0;//这个在控件内部设置cbb_stop.Items.Add(1);cbb_stop.Items.Add(2);cbb_stop.Items.Add(3);cbb_stop.SelectedIndex = 0;cbb_check.Items.Add("NULL");cbb_check.Items.Add("偶");cbb_check.Items.Add("奇");cbb_check.SelectedIndex = 0;tb_receive.WordWrap = true;//自动换行tb_send.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;//要发送的数据纵向显示}

第二步,打开(关闭)串口

        /// <summary>/// 打开串口/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btn_open_Click(object sender, EventArgs e){if (isopen){isopen = false;btn_open.Text = "关闭串口";strportname = cbb_comnumber.Text;strportrate = cbb_baud.Text;strdatabits = cbb_data.Text;strstopbits = cbb_stop.Text;sp.PortName = strportname;sp.BaudRate = int.Parse(strportrate);sp.DataBits = int.Parse(strdatabits);sp.StopBits = (StopBits)int.Parse(strstopbits);sp.ReadTimeout = 1000;sp.Open();//打开串口sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);///添加委托!!}else{isopen = true;btn_open.Text = "打开串口";sp.DataReceived -= new SerialDataReceivedEventHandler(sp_DataReceived);///取消委托sp.Close();//关闭串口}}

第三步.发送数据

        private void btn_send_Click(object sender, EventArgs e){if (isopen){if (rbstring.Checked)如果选择发送字符串形式{byte[] Sendbuf = new byte [1024*1024];Sendbuf = System.Text.Encoding.Default.GetBytes(tb_send.Text);sp.Write(Sendbuf, 0, Sendbuf.Length);}if (rb16.Checked){byte[] d = strToHexByte(tb_send.Text.Trim());//转化为16进制数sp.Write(d, 0, d.Length);}}}

第四步*.接收数据

       /// <summary>/// 数据接收函数/// </summary>这个函数可以用于所有c#程序的串口开发/// <param name="sender"></param>/// <param name="e"></param>void sp_DataReceived(object sender, SerialDataReceivedEventArgs e){int count = sp.BytesToRead;byte[] ReceiveBuf = new byte[count];sp.Read(ReceiveBuf, 0, count);//if (rbstring.Checked)//直接转换成字符串形式{string strreceive3 = System.Text.Encoding.Default.GetString(ReceiveBuf);Invoke(new MethodInvoker(delegate(){tb_receive.Text += strreceive3;//将串口的2,3号引脚短接,就可以观察到发送和接收的结果。})); }if (rb16.Checked)///转换成16机制的字符串{Invoke(new MethodInvoker(delegate(){tb_receive.Text += ByteToHexStr(ReceiveBuf);//将串口的2,3号引脚短接,就可以观察到发送和接收的结果。})); }}

第五步.清空数据区

        /// <summary>/// 清空发送区内容/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btn_clear_Click(object sender, EventArgs e){tb_send.Text = "";}

其中第四步为接收另外一方发过来的数据,可以将串口的RXD和TXD引脚短接,然后就可以在接收区看到和发送区一样的数据(仅仅作为一个实验)。

这里面涉及到可16进制字符串和字符串的转换关系。

      /// <summary>/// 将16进制的字符串转为byte[]/// </summary>/// <param name="hexstring"></param>/// <returns></returns>private byte[] strToHexByte(string hexstring){hexstring = hexstring.Replace(" ", "");if (hexstring.Length % 2 != 0)hexstring += " ";byte[] returnBytes = new byte[hexstring.Length / 2];for (int i = 0; i < returnBytes.Length; i++){returnBytes[i] = Convert.ToByte(hexstring.Substring(i * 2, 2).Replace(" ", ""), 16);}return returnBytes;}/// <summary>/// 字节byte[]转为16进制字符串/// </summary>/// <param name="bytes"></param>/// <returns></returns>private static string ByteToHexStr(byte[] bytes){string returnstr = "";if (bytes != null){for (int i = 0; i < bytes.Length; i++)returnstr += bytes[i].ToString("X2");}return returnstr;}

详细的,可以参见下文(45)《C#字符串与byte之间的相互转换》。

运行结果如下所示:

C#学习记录(44-2)C#串口调试助手实例相关推荐

  1. QT学习笔记:简单的串口调试助手--实现 字符与十六进制发送接收

    这两天捣鼓了一个简单的串口调试助手,参考QT例程terminal,可能是因为新手的缘故,发现字符发送和字符显示比较容易实现,而十六进制相对难实现一些.在这里记录一下我的实现方法. /// /// \b ...

  2. Python学习记录 搭建BP神经网络实现手写数字识别

    搭建BP神经网络实现手写数字识别 通过之前的文章我们知道了,构建一个简单的神经网络需要以下步骤 准备数据 初始化假设 输入神经网络进行计算 输出运行结果 这次,我们来通过sklearn的手写数字数据集 ...

  3. java串口调试助手开发记录

    一.首先搭建平台,我用的是eclipse+rxtx+SWT. 安装eclipse就是安装java包后,然后下载eclipse即可.因为eclipse是绿色的,不用安装,下载即可用. 下载rxtx.在网 ...

  4. JavaScript-WebAPIs学习记录

    JavaScript-WebAPIs学习记录 浏览器交互效果 console.dir(); // 更好地查看里面的属性和方法 javascript:void(0); 或者 javascript:; 可 ...

  5. linux个人学习记录

    linux学习记录 资料: Linux 黑马程序员_bilibili AcWing Linux基础课 可能是东半球最全面易懂的 Tmux 使用教程! Shell 教程 | 菜鸟教程 (runoob.c ...

  6. TM4C123G学习记录(6)--UART

    因为想申请 CSDN 博客认证需要一定的粉丝量,而我写了五年博客才 700 多粉丝,本文开启关注才可阅读全文,很抱歉影响您的阅读体验 为了准备电赛临时学一下TM4C123G,简单记录学习内容 大家可以 ...

  7. RPLIDAR思岚雷达学习记录--5--串口调试解决--comtransmit工具

    通过串口理解RPLIDRA的通讯协议 主要介绍一下学习记录2中没有解决的问题,特别感谢思岚科技官方售后,非常负责. 在串口调试过程中,发现雷达连接到电脑上之后开始转动,但是一连接上串口调试工具就停止转 ...

  8. 使用串口调试助手配置ESP8266模块

    最近闲来无事,手上刚好有一个ESP8266模块,参考了几篇博客,了解了一下如何配置ESP8266,写个博客记录一下. 步骤 一.元件准备 二.硬件连接 三.使用串口调试助手配置ESP8266 一.元件 ...

  9. **51 32 学习记录**

    51 32 学习记录 STM32的时钟选择 (103) APB2总线时钟:最大72MHz,挂载了高级定时器 APB1总线时钟:最大36MHZ,挂在了通用定时器 定时器的时钟选择: 1.内部时钟, 2. ...

最新文章

  1. Mapping Persistence Classes 笔记2---ValueType的形式和映射
  2. 技术图文:Numpy 一维数组 VS. Pandas Series
  3. datafactory生成mysql数据_测试数据生成工具DataFactory的使用
  4. Android程序ToDoList增加配置项页面
  5. 很好的FireFox addin
  6. 玩转C语言之数组-数组指针
  7. Win10安装华三模拟器各种疑难问题
  8. 电脑是否存在内存泄漏_STM32裸机内存管理解析
  9. 使用Java EE的ManagedExecutorService异步执行事务
  10. [剑指offer][JAVA]面试题第[29]题[顺时针打印矩阵][数组]
  11. linux-ubuntu下调出中文输入法
  12. oracle 9.2.0.1下载,Oracle 9i 从9.2.0.1升级到 9.2.0.6 步骤
  13. linux 定时任务 crontab
  14. 什么是Smartdrv程序
  15. python的分号用英文还是中文_Python中的分号
  16. 从键盘上输入以下的数据:TOM:89|JERRY:90|TONY:95,数据格式为“姓名:成绩|姓名:成绩|姓名:成绩”,对输入的内容按成绩进行排序,并将结果按成绩由高到低排序。
  17. 今日恐慌与贪婪指数为23,恐慌程度有所下降
  18. get和post详解
  19. 美国贝勒大学计算机科学专业怎么样,贝勒大学专业排名一览(含历年专业排名信息,USNEWS美国大学排名版)...
  20. VirtualBox如何设置端口转发?

热门文章

  1. 1024云赛事|选择您最感兴趣的赛道,有机会瓜分好礼
  2. 详解strlen和sizeof在数组中的使用(二)
  3. 11.5对宿管阿姨的采访
  4. 【数字信息化智能化管理平台系统建设】
  5. 计算机开机速度慢是什么原因,电脑启动慢是什么原因造成(4招优化电脑的开机速度,10秒...
  6. 赛狐ERP|亚马逊产品缺货怎么办?该如何补救?
  7. Tomcat与Eclipse连接
  8. idea如何设置好看的字体颜色?
  9. mysql 快速导出_Mysql 大量数据快速导出
  10. element-ui页面$router.push(“xxx“)跳转后,导航菜单高亮 和 el-menu 传值