C#实现【串口助手】【入门级别】【小白进】
这里写自定义目录标题
- 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窗体应用开发的基本步骤进行总结:
- 明确想要实现的功能,实现界面的设计。
- 双击小组件,进行该小组件事件处理器的编写。清楚该组件会触发什么事件,要实现什么功能;比如文中的发送Button,点击Button,就要将文本框的数据发送出去;然后再进行细化。
- 每完成一个小组件的事件处理器的编写,及时编译运行一下,早遇到问题早处理。
下一篇文章是【在没有下位机的情况下,如何对该串口助手进行测试】,感兴趣的朋友欢迎移步:
博主知识浅薄,文中如有不对之处,希望您在评论区指出,将感激不尽!
C#实现【串口助手】【入门级别】【小白进】相关推荐
- Visual Studio 2019 C# 上位机入门(2):写一个简单的串口助手
前言 本文记录一下用Visual Studio 2019 C# 写一个简单的串口助手的过程,由于没有先从小处学习,而是直接找相关资料就开始做,免不了很多奇怪的问题花了一些时间,基于此情况,我将尽可能整 ...
- Qt5学习笔记之串口助手四:增加16进制/ASCII切换、周期发送
目录 1. 概述 2. 16进制/ASCII发送 2.1 功能实现 2.2 界面修改 3. 接收框显示发送内容 3.1 以16进制/ASCII显示 3.1.1 界面修改 3.1.2 功能实现 3.2 ...
- MATLAB GUI 实现串口通信,制作串口助手(教材级别的宝藏内容!!)
使用matlab写了一个串口助手如下: app 文件链接如下: https://pan.baidu.com/s/1vLNekFZCdw1GSRg7sn_JZg 链接:https://pan.baidu ...
- 基于Qt5 的串口助手开发
目录 前言 一.最终效果图 二.操作方法 1.创建一个新的Widgets Appliaction工程 2.用Qt Designer 设计上位机的界面 3.代码部分 1.mainwindow.h文件内容 ...
- python写的串口助手并连接腾讯云服务器数据库
结合上一期的基于pyqt5开发的图书管理系统UI(带登录页面)文章做一个此章节的补充.因为老师说需要结合数据库实现登录系统.于是我就想起了自己在腾讯云上买的一个服务器.因此经过百度查询大量的资料,功夫 ...
- android灯光蜂鸣器控制节点指令代码,基于stm32发送串口指令控制LED,蜂鸣器等(串口助手+原理图+显示结果)...
本帖最后由 我累个去啊啊啊 于 2019-6-12 16:22 编辑 ///2019 6 12 更新 加入 :串口助手截图 简易问题说明 ///2019 6 11 更新 加入 : 使用的串口调试助 ...
- c++实现sscom串口助手循环发送_串口通讯你真的会了吗?不妨看看这些经验
点击上方「嵌入式大杂烩」,选择「置顶公众号」第一时间查看编程笔记! 平时使用串口打印出现乱码的绝大部分原因是串口波特率没对.那么我们怎么测量实际的波特率呢?在这之前,顺便一起回顾一下波特率的概念. 什 ...
- C# 学习笔记(13)自己的串口助手
C# 学习笔记(13)自己的串口助手 UI界面 界面部分参考野火串口助手,自己拖控件拖一个即可 功能实现 扫描串口 方法一 使用串口自带的get函数 比较简单实用 SerialPort.GetPort ...
- openmv串口数据 串口助手_Qt小项目之串口助手控制LED
前言 最近刚学了一点Qt开发上位机,尝试着做个小软件练练手.查找了很多资料,做了一个简单的串口助手,可以实现串口基本发送和接收功能,支持中文显示,还可以控制STM32开发板上的两个LED. 1.软件界 ...
最新文章
- 不知道为什么,很多优秀的产品知道人确很少
- 五大理由从Python转到Go语言
- 我用C++复刻了这款上世纪最伟大的游戏
- [Hyper-V]在Windows 8.1 操作系统中启用Hyper-V功能
- 如何在Linux下安装nginx
- DuiVision开发教程(19)-菜单
- Oracle查询所有序列;[oracle中如何创建表的自增ID(通过序列);oracle sql语句大全
- 04Linux与Unix的关系
- matlab 频率分布直方图_小猿圈Python开发之绘制频率分布直方图示例
- 【动手学深度学习】代码(持续更新)
- C# Emoji在Web端显示
- Unity插件——Odin 学习笔记(三)
- 方向余弦阵,欧拉角,四元数
- 磁盘分区助手使用心得
- 计算机主机hdmi接口是什么意思,笔记本电脑HDMI接口是干什么的
- 如何更改Windows桌面文件夹路径
- 梦三显示服务器列表,梦三国开服表_梦三国开服时间表_梦三国最新开服_9K9K手游网...
- Wireshark 用户使用手册 ———— 自定义 Wireshark
- 计算机分子模拟聚乙烯,高分子物理实验思考题@中科大.pdf
- mac php dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib 亲测有效