这里写自定义目录标题

  • 1 界面设计
  • 2 代码具体实现
    • 2.1 Form1_Load事件处理器
      • 功能描述
      • 代码
    • 2.2 打开端口button事件处理器
      • 功能描述
      • 代码
    • 2.3 关闭端口button事件处理器
      • 功能描述
      • 代码
    • 2.4 发送button事件处理器
      • 功能描述
      • 代码
    • 2.5 串口数据接收事件处理器
      • 功能概述
      • 代码
  • 3 总结

【前言】根据杜洋和李苍源老师的教程,开发了一个最基础的串口调试助手,希望能起到抛砖引玉的作用吧♥
课程视频链接:【杜洋工作室】C#开发串口助手

1 界面设计

2 代码具体实现

2.1 Form1_Load事件处理器

功能描述

  • 初始化【端口下拉列表】和【波特率下拉列表】

    • 下拉列表的内容可以在属性框中的Item中手动添加,也可以在代码中调用成员函数Item进行添加
    • 波特率下拉列表的内容是博主手动添加的,故代码中没有体现
  • 定义串口数据接收的事件处理器

代码

private void Form1_Load(object sender, EventArgs e){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);}

2.2 打开端口button事件处理器

功能描述

  • 设置串口的端口号和波特率
  • 打开串口
  • 将【打开端口button】置为不可用(false),将【关闭端口button】置为可用(true)

代码

private void button1_Click(object sender, EventArgs e){try{//将端口号和波特率赋值给串口serialPort1.PortName = comboBox1.Text;  //标准格式为 <COM数字>//comboBox2.Text是字符串,将它作为十进制数转换为int32类型serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text, 10);//打开串口serialPort1.Open();//一旦打开端口,就将打开端口置为不可用(不能重复打开),将关闭端口置为可用button1.Enabled = false;  //打开端口button不可用button2.Enabled = true;   //关闭端口button可用}//如果try中的语句遇到错误,则直接跳去执行catch中的语句catch{serialPort1.Close();MessageBox.Show("端口错误,请检查串口", "错误");button1.Enabled = true;  //打开端口button不可用button2.Enabled = false;   //关闭端口button可用}}

2.3 关闭端口button事件处理器

功能描述

和打开端口的功能相对应

  • 关闭串口
  • 将【打开端口button】置为可用,将【关闭端口button】置为不可用

代码

private void button2_Click(object sender, EventArgs e){try{serialPort1.Close();button1.Enabled = true;  button2.Enabled = false;   }catch{//一般情况下关闭串口不会出错,所以不需要加处理程序}}

2.4 发送button事件处理器

功能描述

  • 如果发送模式是字符模式,则将textBox的内容直接发送即可
  • 如果发送模式是数值模式
    • 将要发送的数据作为16进制数发送出去
    • 一次发送1byte,两位16进制数组成1byte,故一次发送两个十六进制数字

代码

private void button3_Click(object sender, EventArgs e){//发送数据的缓冲区byte[] Data = new byte[1];//要确保串口是打开的if (serialPort1.IsOpen){//确保发送数据的textBox有内容if (textBox2.Text != ""){if (radioButton2.Checked)  //发送模式是字符模式{try{serialPort1.WriteLine(textBox2.Text);  //写数据}//如果写数据失败catch (Exception err){serialPort1.Close();MessageBox.Show("串口数据写入错误", "错误");button1.Enabled = true;button2.Enabled = false;}}//发送模式是数值模式:即要发送的数据是16进制数,两位十六进制数组成1byte,每次发送1byte的数据//示例:要发送的数据为12B63C6,则拆分成0X12,0XB6,0X3C,0X6发送else{//一次处理两位数据for (int i = 0; i < (textBox2.Text.Length - textBox2.Text.Length % 2) / 2; ++i){//取子字符串:substring(begin, offset),begin是起始位置,offset是取几位字符//Convert.ToByte(str, 16),意思是将str作为16进制数,转换为byte类型Data[0] = Convert.ToByte(textBox2.Text.Substring(i * 2, 2), 16);//将Data中的数据通过串口写入串口连接的设备serialPort1.Write(Data, 0, 1);  //每次发送1byte的数据}//如果数据个数是奇数位,则在此处理最后一位if (textBox2.Text.Length % 2 != 0)  {Data[0] = Convert.ToByte(textBox2.Text.Substring(textBox2.Text.Length - 1, 1), 16);serialPort1.Write(Data, 0, 1);}}}}}

2.5 串口数据接收事件处理器

功能概述

与其他组件不同,在设计界面双击串口的标志,在代码界面不会自动生成其事件处理器,故需要我们手动添加串口的事件处理器。

  • 手动添加串口数据接收数据处理器
  • 若接收模式为字符串,则以字符串的方式读入,然后将其直接在文本框显示出来即可
  • 若接收模式是数值模式,则以byte的方式读入,然后将其转换成字符串,格式同“0xab”,在文本框中显示出来

代码

//串口数据接收事件处理器(需要手动添加此成员函数)
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{//接收模式为字符串模式if (radioButton4.Checked)  {string str = serialPort1.ReadExisting();  //字符串方式读textBox1.AppendText(str);  //将读进来的内容添加进文本框1,等价于textBox1.Text += str;}//接收模式为数值模式else{//一次接收1byte的数据byte data = (byte)serialPort1.ReadByte();  //ReadByte()返回值类型为int,要强转成bytestring str = Convert.ToString(data, 16).ToUpper();if (str.Length == 1) str = "0" + str;  //若接收到的数据是一位的,比如是y,则以"0y"的形式显示出来textBox1.AppendText("0x" + str);  //若str是12,则规范化显示的格式为"0x12"}
}

3 总结

总体来说,本项目作为C#的入门小项目很合适。只要有C++或Java基础,上手真的非常简单。我将使用C#进行windows窗体应用开发的基本步骤进行总结:

  1. 明确想要实现的功能,实现界面的设计。
  2. 双击小组件,进行该小组件事件处理器的编写。清楚该组件会触发什么事件,要实现什么功能;比如文中的发送Button,点击Button,就要将文本框的数据发送出去;然后再进行细化。
  3. 每完成一个小组件的事件处理器的编写,及时编译运行一下,早遇到问题早处理。

下一篇文章是【在没有下位机的情况下,如何对该串口助手进行测试】,感兴趣的朋友欢迎移步:

博主知识浅薄,文中如有不对之处,希望您在评论区指出,将感激不尽!

C#实现【串口助手】【入门级别】【小白进】相关推荐

  1. Visual Studio 2019 C# 上位机入门(2):写一个简单的串口助手

    前言 本文记录一下用Visual Studio 2019 C# 写一个简单的串口助手的过程,由于没有先从小处学习,而是直接找相关资料就开始做,免不了很多奇怪的问题花了一些时间,基于此情况,我将尽可能整 ...

  2. Qt5学习笔记之串口助手四:增加16进制/ASCII切换、周期发送

    目录 1. 概述 2. 16进制/ASCII发送 2.1 功能实现 2.2 界面修改 3. 接收框显示发送内容 3.1 以16进制/ASCII显示 3.1.1 界面修改 3.1.2 功能实现 3.2 ...

  3. MATLAB GUI 实现串口通信,制作串口助手(教材级别的宝藏内容!!)

    使用matlab写了一个串口助手如下: app 文件链接如下: https://pan.baidu.com/s/1vLNekFZCdw1GSRg7sn_JZg 链接:https://pan.baidu ...

  4. 基于Qt5 的串口助手开发

    目录 前言 一.最终效果图 二.操作方法 1.创建一个新的Widgets Appliaction工程 2.用Qt Designer 设计上位机的界面 3.代码部分 1.mainwindow.h文件内容 ...

  5. python写的串口助手并连接腾讯云服务器数据库

    结合上一期的基于pyqt5开发的图书管理系统UI(带登录页面)文章做一个此章节的补充.因为老师说需要结合数据库实现登录系统.于是我就想起了自己在腾讯云上买的一个服务器.因此经过百度查询大量的资料,功夫 ...

  6. android灯光蜂鸣器控制节点指令代码,基于stm32发送串口指令控制LED,蜂鸣器等(串口助手+原理图+显示结果)...

    本帖最后由 我累个去啊啊啊 于 2019-6-12 16:22 编辑 ///2019 6 12 更新 加入 :串口助手截图 简易问题说明 ///2019 6 11 更新  加入 :  使用的串口调试助 ...

  7. c++实现sscom串口助手循环发送_串口通讯你真的会了吗?不妨看看这些经验

    点击上方「嵌入式大杂烩」,选择「置顶公众号」第一时间查看编程笔记! 平时使用串口打印出现乱码的绝大部分原因是串口波特率没对.那么我们怎么测量实际的波特率呢?在这之前,顺便一起回顾一下波特率的概念. 什 ...

  8. C# 学习笔记(13)自己的串口助手

    C# 学习笔记(13)自己的串口助手 UI界面 界面部分参考野火串口助手,自己拖控件拖一个即可 功能实现 扫描串口 方法一 使用串口自带的get函数 比较简单实用 SerialPort.GetPort ...

  9. openmv串口数据 串口助手_Qt小项目之串口助手控制LED

    前言 最近刚学了一点Qt开发上位机,尝试着做个小软件练练手.查找了很多资料,做了一个简单的串口助手,可以实现串口基本发送和接收功能,支持中文显示,还可以控制STM32开发板上的两个LED. 1.软件界 ...

最新文章

  1. hp unix oracle rac节点一磁盘损坏,节点修复
  2. 七日Python之路--第八天
  3. python的socket模块_Python socket模块方法实现详解
  4. Android——数据存储(课堂代码整理:SharedPreferences存储和手机内部文件存储)...
  5. JAVA——基于HttpClient的全国大学英语四、六级考试(CET4CET6)[2019年下半年]查询DEMO
  6. 记一次更改了电脑名称后遇到的各种错误反思及感想
  7. linux操作系统之全局异步IO及可重入/不可重入函数
  8. C#图解教程读书笔记(第3章 类型、存储及变量)
  9. PIC24 通过USB在线升级 -- USB HID bootloader
  10. Linux下使用SFTP命令
  11. c语言32bit数大小端转换,玩儿转C语言:bit 位域大小端转换及传输
  12. python 学堂在线_学习Python编程学堂在线试题及答案
  13. 执着于音,一起开启Fidelio音乐之旅
  14. BIOS、UEFI及系统安装
  15. 通证网:一建的报考条件
  16. python如何连redis_Python连接Redis的基本配置方法
  17. AcWing2022寒假每日一题(1 月 2 日 ~ 1 月 15 日)
  18. 嵌入式驱动工程师学习路线【建议收藏】
  19. k线图基础知识图解——单根K线的含义
  20. 高动态环境下基于随机可及集的Path-Guided APF算法的Motion Planning

热门文章

  1. Python 考试练习题 3
  2. FTL——垃圾回收GC (Garbage Collection)
  3. Centos 各版本系统ISO镜像下载地址
  4. 25省/市5G最新进展与规划汇总
  5. 服务器 ping 不通有哪些原因导致的
  6. php网上书城|基于PHP实现网上书店商城藉项目
  7. JavaScript——JavaScript数据类型转换
  8. 百度工程师在公司内网发布“女优一览表”遭开除!自诉原因:想转岗鉴黄师...
  9. Ros2中 qos参数的使用
  10. 02325计算机系统结构(重点)