串口助手(简洁版)上位机软件零基础教程( C# + visual studio2019)

news2024/9/27 23:32:35

最近在开发一个项目,需要串口通信,所以学习怎么自己做一个串口通信助手
1.工程的建立
打开vs软件 -》 左上角 “文件”选项 -》 新建 -》 项目 ,弹出对话框如下:
在这里插入图片描述
点击visual c# 选项卡 -》 1. 选择 Windows 桌面 -》 2.选择Windows 窗体应用(.NET framework)
在这里插入图片描述
1.编辑项目名称 - 》 2.定义项目储存位置 -》 3. 框架修改为.NET Framework 4.5 -》 最后单击确定
注意: 框架4.0以下,不能在Windows xp系统中运行。
在这里插入图片描述
至此,工程项目已经创建好,如下图所示:
此时,单击工具栏中的 “启动”按钮,可以看见debug下的调试窗口。像windows普通窗口一样,可以拖动,点击右上方关闭按钮可以关闭并退出调试。

同时窗体也可以用鼠标对准其边线,调整窗口的大小,以满足用户的需求,试一试!!
在这里插入图片描述
2.软件的图形化窗体设计
串口助手(简洁版)相关的图形化窗体设计,我们需要用到 “工具箱 ” ,如“果在工程中没有找到 "工具箱"窗口,可以在软件上方菜单栏 “ 视图” -》 “工具箱” 中,进行打开。

工具箱中我们常用到三个部分,分别是 公共控件,容器 和 组件 选项卡。
在这里插入图片描述
第一 ,添加标号控件。 选择 工具箱 -》 公共控件 -》 Label (标号控件),单击选择到窗体中(先单击控件名称,再单击窗口助手窗体空白处)。然后对准图标,点击鼠标右键,选择 ‘属性’,弹出属性窗口,可设置控件相关属性。大家可以自己去尝试更改属性看看效果,不懂可以百度,亲们!

提醒:在属性窗口打开后,点击我们正在设计的串口助手窗体空白处,可设置整个窗体的属性哦!!

例如:在 Name 属性栏中,可查看标号控件名字(所有,一切的一切,控件都有自己的名字,在程序编写时会用到,最好不要去修改!)在这里插入图片描述
在 Font 属性栏中,可修改文本的字体,大小。
在这里插入图片描述
在 Text 属性栏中,可修改具体显示出来的文字。
在这里插入图片描述
按相同方法,我们设计出如下四个标号控件,布好局:在这里插入图片描述第二,添加下拉组合框控件。 选择 工具箱 -》 公共控件 -》 comboBox(组合框控件),单击选择到窗体中。然后对准鼠标右键,选择 ‘属性’,弹出属性窗口。
在这里插入图片描述

在 Items 属性栏中,可添加组合框下拉菜单内容。 注:本次串口助手软件 端口组合框 会在程序中添加下拉菜单内容,不用在属性栏中手动添加。而波特率组合框 直接在属性中添加下拉菜单内容。
在这里插入图片描述

我们设计出如下窗体:

在这里插入图片描述

第三,添加单选按钮控件。 选择 工具箱 -》 公共控件 -》 RadioButton(单选按钮控件),单击选择到窗体中。在单选按钮的属性窗口中,更改单选按钮文本(Text 栏),文字大小(Font)等参数。
注意:发送模式下的两个单选按钮为一组,接收模式下的单选按钮为另一组。为了发送和接收单选按钮相互独立,需将其划分组别,因此要引入容器控件。选择 工具箱 -》 容器 -》Panel(容器控件),将同组别单选按钮划分在一起。先放置容器控件,再往其中填入
在这里插入图片描述
第四,添加按键控件。 选择 工具箱 -》 公共控件 -》 Button(按钮控件),单击选择到窗体中。可在按钮的属性窗口中,更改单选按钮文本(Text 栏),文本大小(Font栏),背景颜色(BackColor栏)等参数。在这里插入图片描述第五,添加文本框控件。 下面的文本框用于储存待发送数据,右边文本框用于储存串口接收到的数据。选择 工具箱 -》 公共控件 -》 TextBox(文本框控件),单击选择到窗体中。可在文本框的属性窗口中,更改为多行显示(multiline 栏)(否则无法纵向拉伸);纵向拓展或横向拓展或双向拓展(Scrollbars栏)(文本框边上有没有拖动条)
在这里插入图片描述
第六,添加串口控件 。既然要做串口助手,串口肯定是少不了的。选择 工具箱 -》 组件 -》 SerialPort(串口控件),单击选择到窗体中。这时细心的你会发现窗体中没有串口图标,不要担心,它在你的窗体下方,因为他是一个隐式(不可见的)(后台的)控件。
在这里插入图片描述
在串口的属性窗口中,我们发现可以设置波特率、串口号、停止位、校验位等参数。在这里我们保持默认值就好,下节我们会在程序中进行设置。所以亲们在这里就不用管啦,是不是很开心??

第七,添加定时器控件。有人会问为什么串口助手会用定时器,难不成是自动发送功能??答案为否。这里我们是想通过定时器做一个500ms定时周期性中断,这样就可以不停检测电脑的可用串口,然后将它放在端口的组合框控件的下拉菜单中。这样我们就不用去调用设备管理器,看咱们该调成哪个串口号了,是不是很高级!!

选择 工具箱 -》 组件 -》 Timer(定时器控件),单击选择到窗体中。他也是一个隐式控件。在定时器的属性窗口中,我们需要设置中断时间为500ms(Interval 栏);设置定时器使能(Enabled 栏)(就是软件一运行,定时器就开始工作,咱们就不用程序里再去打开他的开关了)。在这里插入图片描述至此,可视化窗体已经做完了,我们点击 “”启动按钮“进行测试,查看具体的效果,发现按钮可以点击,组合框可以下拉,文本框可以输入字符,两组单选按钮各自工作正常。。。。。。关闭窗口。

后面我们将进入程序部分的编写,就比较难了,不过没关系,一步一步来。

我们完成了串口助手(简洁版)可视化窗体的设计,并且单击启动后可以运行。但是光有外壳,没有灵魂。所以接下来我们将继续一步一步来编写上位机软件的程序部分。

首先,我谈一下自己所理解的C#上位机软件程序编写的中心思想。以串口助手(简洁版)为例,所有程序都是以 “事件” 为核心来进行的,对应的 “事件”发生了,那软件就去执行 我们自己编写的 对应事件中的 程序。

    按键按下,算一个事件吧    -----》》》》 执行这个按键按下对应的程序

    串口突然收到数据 ,算一个事件吧   -----》》》执行串口收到数据时对应的程序

    定时器中断来了,也是个事件    ----》》》》执行定时器中断发生时对应的程序

1.窗口加载时事件(程序)
窗体刚刚加载出来,就是弹出软件窗口的一瞬间,算个事件吧。那怎么去编写这一段的程序呢?我们到上一章编好的可视化窗体中,去双击窗体的空白处,就跳转到对应的事件发生程序中去了。比如双击这里: 1.窗口加载时事件(程序)在这里插入图片描述然后就跳转到这个代码段中来了:
`、、、 C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 串口助手_简洁版_
{
public partial class Form1 : Form
{
/默认存在/
public Form1()
{
InitializeComponent();
}

    private void Form1_Load(object sender, EventArgs e)
    {

    }

}

} 函数 Form1_Load() 就会在窗体加载的时候被调用一次。上方的 Form1() 函数会默认存在,暂时不用理会。在其中加入代码:
‘’’ C#

    /*窗体加载时被调用*/
    private void Form1_Load(object sender, EventArgs e)
    {
        Updata_Serialport_Name(comboBox1);  //调用更新可用串口函数,comboBox1为 端口 组合框名字

        radioButton1.Checked = true;   //函数中选择发送模式 为“数值”发送模式。 radioButton1为单选按钮属性(name)名字
        radioButton3.Checked = true;   //函数中选择接收模式 为“数值”接收模式。 radioButton3为单选按钮属性(name)名字

        button2.Text = "打开串口";     // 确保 “打开串口”按键文本属性为 “打开串口”
    }

    /*用户自定义更新可用串口函数*/
    private void Updata_Serialport_Name(ComboBox MycomboBox)
    {
        string[] ArryPort = SerialPort.GetPortNames();  //定义字符串数组,数组名为 ArryPort
                                                        //SerialP ort.GetPortNames()函数功能为获取计算机所有可用串口,以字符串数组形式输出
        MycomboBox.Items.Clear();       //清除当前组合框下拉菜单内容                  

        for (int i = 0; i < ArryPort.Length; i++)
        {
            MycomboBox.Items.Add(ArryPort[i]);   //将所有的可用串口号添加到  端口 对应的组合框中
        }
    }`

总结:

  1. 1.在窗体加载事件中,我们设置 发送和接收模式都默认选择 “”数值“”模式, 同时 调用自定义的串口号更新函数 Updata_Serialport_Name (), 来更新一下 “端口” 组合框下拉菜单中的串口信息。
    2. SerialPort.GetPortNames() 函数,用来查询所有的可用串口号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/129479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

互联网全面回暖?2023年主线任务:搞钱

2022年尾声将近&#xff0c;不知道大家最近有没有感受到一股「春风」&#xff0c;防疫政策不断放开&#xff0c;上下班地铁渐渐恢复了往日的繁忙和拥挤&#xff0c;经济正在加速复苏...... 作为职场人&#xff0c;大家最关心的问题就是&#xff0c;2023年就业形势是否会回暖&a…

CAN工具 - ValueCAN - 基础介绍

CAN/CANFD通讯广泛存在于整个车载网络中&#xff0c;几乎每一块软硬件的开发都需要用到CAN工具&#xff0c;除了我们所熟知的CANoe之外&#xff0c;今天我们来介绍一下另外一个CAN工具ValueCAN&#xff0c;这个工具个人认为应该在PCAN之上CANoe之下&#xff08;好用程度&#x…

Two Coupled Rejection Metrics Can Tell Adversarial Examples Apart

实现鲁棒性的一种补充方式是引入拒绝选项&#xff0c;允许模型不返回对不确定输入的预测&#xff0c;其中confidence是常用的确定性代理。 与此例程一起&#xff0c;我们发现置信度和校正置信度&#xff08;R-Con&#xff09;可以形成两个耦合的拒绝度量&#xff0c;这可以证明…

SQL Server2008数据库升级至SQL Server2012

文章目录引言升级步骤安装SQL Server 2008 R2 sp2清除处于非活动状态的SQL Server实例一些体会引言 今天接到了一个需求&#xff0c;服务器上的数据库需要从SQL Server2008升级到2012。根据之前的经验&#xff0c;感觉是一个非常有意思的过程&#xff08;事实上也是。这个过程…

离散数学—数理逻辑

数理逻辑部分数理逻辑命题逻辑逻辑连接词命题符号化命题公式命题公式的等价矛盾式与重言式※重言关系蕴含式的证明※重言关系等价式的证明析取范式与合取范式主析取范式主合取范式对于两种范式&#xff0c;我的一些看法命题逻辑推理直接推理间接推理谓词逻辑谓词演算的等价式和…

解决Ubuntu/Fedora/Arch有些位置无法切换输入法输入中文

在使用Linux的时候&#xff0c;往往会遇到有些位置无法输入中文的情况&#xff0c;这是怎么造成的呢&#xff1f; 类似下图这种位置&#xff0c;我想搜一下文件&#xff0c;但是发现无法切换输入法&#xff0c;不能输入中文&#xff0c;现在我们来解决一下。 首先安装gedit&…

86.分隔链表

给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1&#xff1a; 输入&#xff1a;head [1,4,3,2,5,2], x 3 输出&am…

数据结构(链表2)

链表图中的“^”符号表示所储存内容为空。 单循环链表 末结点的next不再指向空&#xff0c;而是指向头结点。 空单向循环链表&#xff0c;只有头结点。 优点&#xff1a;从表中任何一个结点出发&#xff0c;都可以顺next指针访问到所有结点。 不带头结点的单循环链表 为了循…

文件操作(五)—— 文件重定向(dup2)

1、什么是文件重定向&#xff1f; 简单来说&#xff0c;文件重定向可以理解为文件描述符重新选定自己的指向。 2号文件描述符和3号文件描述符原本的指向如下。2号文件描述符之所以指向了stderr&#xff0c;是因为数组下标为2的元素填充的是stderr结构体的地址 发生文件重定向…

Spring Cloud 配置中心多环境 bootstrap.yml

常见的配置类型&#xff1a; 服务配置&#xff1a;数据库配置、缓存配置、消息队列配置 开关配置&#xff1a;功能开发、业务开关、服务开关 业务配置&#xff1a;模块A、模块B bootstrap.yml 定义系统级别参数配置; 应用于&#xff1a; Spring Cloud Config 配置中心配置&…

SpringBoot2-5

先解决一个问题【报错1】java: 无效的目标发行版: 17 修改位置&#xff1a;maven的配置需要改为选取本地maven所在目录(这些都是java指定了1.8比较低但是又都用的版本导致) 再解决一个问题【报错2】 java: 无法访问org.springframework.boot.SpringApplication 错误的类文件…

【模型部署】人脸检测模型DBFace C++ ONNXRuntime推理部署(2)

系列文章目录 【模型部署】人脸检测模型DBFace C ONNXRuntime推理部署&#xff08;0&#xff09; 【模型部署】人脸检测模型DBFace C ONNXRuntime推理部署&#xff08;1&#xff09; 【模型部署】人脸检测模型DBFace C ONNXRuntime推理部署&#xff08;2&#xff09; 文章目录…

Git小本

一、Git 概述 Git 是 Linus Torvalds 为了帮助管理 Linux内核开发的一个开源的版本控制软件。 Linux之父(Linus Torvalds)的代表作&#xff1a;Linux、Git。 1. 为什么要用Git&#xff1f; Git是一个分布式版本控制工具&#xff0c;主要用于管理开发过程中的源代码文件&#xf…

CRC(Cyclic Redundancy Check) 循环冗余校核

最近准备开始更新一个算法系列&#xff0c;这个系列嘛就是别管有没有用先学为敬系列&#xff08;或者现学现卖系列&#xff09;。那么这个系列的第一篇就用我这两天看的CRC算法当作开篇吧。 1&#xff09;什么是CRC呢&#xff1f; 如百度所诉&#xff0c;好像是一个十分有用的…

pandas学习笔记(1)

学习网址&#xff1a;kaggle 注&#xff1a;本文仅为个人总结&#xff0c;不作为任何学习资料 一、在pandas里有两种Core objects&#xff1a;DataFrame和Series DataFrame的使用方法&#xff1a; DataFrame有两个方向&#xff0c;纵向为index,横向为column 定义一个DataFrame的…

vue3 antd项目实战——Form表单提交和校验【v-model双向绑定input输入框、form表单数据】

vue3 ant design vue项目实战——Form表单【v-model双向绑定数据实现form表单数据的提交】上期文章回顾【UI界面渲染】场景复现&#xff08;源代码附在文章最后&#xff09;实现需求1.表单数据及其类型的定义2.表单及各部分数据的双向绑定3.表单提交功能4.校验输入内容不为空5.…

计算机组成原理实训报告(附电路图)

实训一&#xff1a;运算器组成实验 目的要求&#xff1a; 掌握FA全加器的工作原理掌握行波进位的补码加法/减法器的工作原理了解ALU运算器的工作原理 掌握FA全加器的工作原理&#xff1a; 实验步骤&#xff1a;创建一个叫做FA的电路&#xff0c;然后开始绘制。 放一个或门&a…

记一次内网渗透过程学习|天磊卫士

一、靶场说明 此靶场共有3台主机 Win7为双网卡&#xff0c;桥接为模拟外网ip&#xff08;192.168.1.220&#xff09;&#xff0c;nat&#xff08;192.168.52.142&#xff09;模拟内网域环境&#xff0c;处于DMZ区域的web服务器 Win2013为内网域控成员&#xff08;nat&#xff…

[综][PDPTW]A survey on pickup and delivery problems

相关数据集的下载:https://www.sintef.no/projectweb/top/pdptw/100-customers/ 由于Li&Lim生成测试实例的方式&#xff0c;这些实例中的任务数量不同&#xff0c;略高于标称值。 在这里&#xff0c;您可以找到Li&Lim的PDPTW基准问题的100个任务实例的实例定义和最著名…

哗啦啦疑似暴雷之后,平台老板们开始迫切寻求二清合规监管办法

&#xff08;图源百度后台&#xff0c;侵删&#xff09; 最近一则“哗啦啦资金链断裂 导致餐饮店无法提现”的帖子在餐饮人中疯传&#xff0c;引起了业内不小的轰动。据很多餐饮商户反馈&#xff0c;近一个多月以来&#xff0c;哗啦啦系统一直延期提现&#xff0c;网上舆论迅速…