这里写自定义目录标题

  • 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. 不知道为什么,很多优秀的产品知道人确很少
  2. 五大理由从Python转到Go语言
  3. 我用C++复刻了这款上世纪最伟大的游戏
  4. [Hyper-V]在Windows 8.1 操作系统中启用Hyper-V功能
  5. 如何在Linux下安装nginx
  6. DuiVision开发教程(19)-菜单
  7. Oracle查询所有序列;[oracle中如何创建表的自增ID(通过序列);oracle sql语句大全
  8. 04Linux与Unix的关系
  9. matlab 频率分布直方图_小猿圈Python开发之绘制频率分布直方图示例
  10. 【动手学深度学习】代码(持续更新)
  11. C# Emoji在Web端显示
  12. Unity插件——Odin 学习笔记(三)
  13. 方向余弦阵,欧拉角,四元数
  14. 磁盘分区助手使用心得
  15. 计算机主机hdmi接口是什么意思,笔记本电脑HDMI接口是干什么的
  16. 如何更改Windows桌面文件夹路径
  17. 梦三显示服务器列表,梦三国开服表_梦三国开服时间表_梦三国最新开服_9K9K手游网...
  18. Wireshark 用户使用手册 ———— 自定义 Wireshark
  19. 计算机分子模拟聚乙烯,高分子物理实验思考题@中科大.pdf
  20. mac php dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib 亲测有效

热门文章

  1. Android Camera(九)Output and Cropping
  2. 华为telnet和ftp配置
  3. QT 借助 图表 实现音频频谱的绘制
  4. 修复ubuntu引导
  5. delphi 控件的安装
  6. 哇!這就是青春痘(下)
  7. 通俗易懂讲解spring源码
  8. windows terminal_powershell/cmd_主题和背景配色/浅色主题改进/图片背景
  9. css揭秘笔记——背景与边框
  10. 社会认知理论和社会学习理论