VS2022开发上位机流程

1、生成串口调试助手的主要控件

2、生成串口对象

3、书写代码

3.1 串口的选择

跳转到图形化界面,然后双击空白位置,会自动生成From1_Load,此函数的作用是会更新串口的选择,然后加入代码,combox控件就可以识别串口

        /* 新增自定义函数:更新可用串口 */
        private void Updata_Serialport_Name(System.Windows.Forms.ComboBox MycomboBox)
        {
            string[] ArryPort;                               // 定义字符串数组,数组名为 ArryPort
            ArryPort = SerialPort.GetPortNames();            // SerialPort.GetPortNames()函数功能为获取计算机所有可用串口,以字符串数组形式输出
            MycomboBox.Items.Clear();                        // 清除当前组合框下拉菜单内容                  
            for (int i = 0; i < ArryPort.Length; i++)
            {
                MycomboBox.Items.Add(ArryPort[i]);           // 将所有的可用串口号添加到端口对应的组合框中
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Updata_Serialport_Name(portNameCB); // 调用更新可用串口函数,portcomboBox为端口号组合框的名称
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;//设置该属性 为false
        }

3.2 打开串口

跳转到图形化界面,然后双击打开串口按钮,会自动跳转到openSerialPortButton_Click函数,然后加入下面代码

 private void openSerialPortButton_Click(object sender, EventArgs e)
 {
     if (openSerialPortButton.Text == "打开串口")                                  // 如果当前是串口设备是关闭状态
     {
         try                                                          // try 是尝试部分,如果尝试过程中出现问题,进入catch部分,执行错误处理代码  
         {
             SerialPort.PortName = portNameCB.Text;
             SerialPort.BaudRate = Convert.ToInt32(baudRateCB.Text);
             SerialPort.Parity = (Parity)Enum.Parse(typeof(Parity), parityCB.Text);
             SerialPort.DataBits = Convert.ToInt32(dataBitCB.Text);
             switch (stopBitCB.Text)
             {
                 case "1":
                     SerialPort.StopBits = StopBits.One;
                     break;
                 case "2":
                     SerialPort.StopBits = StopBits.Two;
                     break;
             }
             SerialPort.Open();                                      // 打开串口,如果打开了继续向下执行,如果失败了,跳转至catch部分

             baudRateCB.Enabled = false;                               
             portNameCB.Enabled = false;
             parityCB.Enabled = false;
             dataBitCB.Enabled = false;
             stopBitCB.Enabled = false;

             openSerialPortButton.BackColor = Color.Red;                           // 将串口开关按键的颜色,改为红色
             openSerialPortButton.Text = "关闭串口";                               // 将串口开关按键的文字改为“关闭串口”
         }
         catch
         {
             MessageBox.Show("打开串口失败,请检查串口", "错误");     // 弹出错误对话框
         }
     }
     else                                             // 如果当前串口设备是打开状态
     {
         try
         {
             SerialPort.Close();                     // 关闭串口
             baudRateCB.Enabled = true;                
             portNameCB.Enabled = true;                
             parityCB.Enabled = true;
             dataBitCB.Enabled = true;
             stopBitCB.Enabled = true;

             openSerialPortButton.BackColor = Color.Lime;          // 将串口开关按键的颜色,改为青绿色
             openSerialPortButton.Text = "打开串口";               // 将串口开关按键的文字改为“打开串口”
         }
         catch
         {
             MessageBox.Show("关闭串口失败,请检查串口", "错误");   // 弹出错误对话框
         }
     }
 }

3.3 串口接收

private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    string str = SerialPort.ReadExisting();   // 读取串口接收缓冲区字符串
    receiveTB.AppendText(str + "");             // 在接收文本框中进行显示
}

3.4 串口发送

双击串口发送按钮,然后发送数据(数据只会以字符ASCII的形式发出)

 private void sendButton_Click(object sender, EventArgs e)
 {
     if (SerialPort.IsOpen)            // 如果串口设备已经打开了
     {
             char[] str = new char[1];  // 定义一个字符数组,只有一位
             try
             {
                 for (int i = 0; i < sendTextBox.Text.Length; i++)
                 {
                     str[0] = Convert.ToChar(sendTextBox.Text.Substring(i, 1));  // 取待发送文本框中的第i个字符
                     SerialPort.Write(str, 0, 1);                            // 写入串口设备进行发送
                 }
             }
             catch
             {
                 MessageBox.Show("串口字符写入错误!", "错误");   // 弹出发送错误对话框
                 SerialPort.Close();                          // 关闭串口
                 openSerialPortButton.BackColor = Color.Lime;               // 将串口开关按键的颜色,改为青绿色
                 openSerialPortButton.Text = "打开串口";                    // 将串口开关按键的文字改为“打开串口”
             }
     }
 }

3.5 清除接收和发送窗口

点击对应的按钮,加入代码即可

        private void clearSendButton_Click(object sender, EventArgs e)
        {
            sendTextBox.Text = "";
        }

        private void clearReceiveButton_Click(object sender, EventArgs e)
        {
            receiveTB.Text = "";
        }

4、运行测试

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows系统版本是win11 运行程序显示windows版本是win10,

在Windows 11系统中运行程序时显示的Windows版本是Windows 10&#xff0c;这种现象可能是由以下几个原因导致的&#xff1a; 程序兼容性问题&#xff1a; 某些程序可能尚未更新以识别Windows 11操作系统&#xff0c;因此它们仍然报告系统为Windows 10。程序读取的是遗留的系统信…

机器学习-04-分类算法-02贝叶斯算法

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中分类算法&#xff0c;本篇为分类算法与贝叶斯算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程…

Linux服务器(RedHat、CentOS系)安全相关巡检shell脚本

提示&#xff1a;巡检脚本可以使用crontab定时执行&#xff0c;人工根据执行结束时间点统一收集报告文件即可。 #!/bin/bash# Define output file current_date$(date "%Y%m%d") # Gets the current date in YYYYMMDD format echo >server_security_inspection_r…

【C++ RB树】

文章目录 红黑树红黑树的概念红黑树的性质红黑树节点的定义红黑树的插入代码实现总结 红黑树 AVL树是一颗绝对平衡的二叉搜索树&#xff0c;要求每个节点的左右高度差的绝对值不超过1&#xff0c;这样保证查询时的高效时间复杂度O( l o g 2 N ) log_2 N) log2​N)&#xff0c;…

openwrt下部署clouddrive2

在启动项上增加启动参数 在exit 0前面增加 mount --make-shared /mnt/data480g注意&#xff0c;后面的/mnt/data480g要替换成你设置的共享映射券。 拉取镜像 docker pull cloudnas/clouddrive2启动镜像 一定要用ssh在后台用docker run命令启动&#xff0c;因为openwrt前台…

Windows 安装配置 RabbitMQ 详解

目录 1、安装前准备2、安装Erlang2.1 安装2.2 配置环境变量 3、安装RabbitMQ3.1 安装3.2 配置环境变量3.3 安装rabbitmq_management插件3.4 启动RabbitMQ服务 4、常用命令 本文将详说如何在Windows系统中安装RabbitMQ。 1、安装前准备 因为RabbitMQ服务器是用Erlang语言编写的…

AQY214S固态继电器:用于控制各种应用中的模拟信号的紧凑解决方案

AQY214S是一款多功能固态继电器&#xff0c;是一款经过精心设计的精致固态继电器&#xff0c;可在多种应用中与低电平模拟信号共舞。在这次探索中&#xff0c;我们将揭开AQY214S的复杂性&#xff0c;重点介绍其独特的功能&#xff0c;并深入研究其在不同行业中的应用的迷人挂毯…

MySQL MHA故障切换

目录 一、案例分析 1.1、案例概述 1.2、案例前置知识点 1&#xff09;什么是 MHA 2&#xff09;MHA 的组成 3&#xff09;MHA 的优势 4&#xff09;MHA 现状 1.3、案例环境 1&#xff09;本案例环境 ​编辑 2&#xff09;案例需求 3&#xff09;案例实现思路…

基于springboot的七彩云南文化旅游网站的设计与实现(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装七彩云南文化旅游网站软件来发挥其高效地信息处理的作用&am…

web学习笔记(三十三)

目录 1.严格模式 1.1严格模式的概念&#xff1a; 1.2严格模式在语义上更改的地方&#xff1a; 1.3如何开启严格模式 1.4严格模式应用上的变化 2.原型链 1.严格模式 1.1严格模式的概念&#xff1a; 严格模式有点像es5向es6过渡而产生的一种模式&#xff0c;因为es6的语法…

蓝桥杯决赛2023 RE CyberChef2

思路很清晰&#xff0c;爆IV 但是题目出的有点屎&#xff0c;六位字符串&#xff0c;62的6次方&#xff0c;要我爆到猴年马月&#xff1f; 就当练习脚本吧 #Cyber2 wp from Crypto.Cipher import DES, AES from Crypto.Util.Padding import pad, unpad key_des b0a0b0c0…

从零开始利用MATLAB进行FPGA设计(三)将Simulink模型转化为定点数据类型

文章灵感来源于MATLAB官方免费教程&#xff1a;HDL Coder Self-Guided Tutorial 考虑到MATLAB官网的英文看着慢&#xff0c;再加上视频讲解老印浓浓的咖喱味&#xff0c;我决定记录利用MATLAB&Simulink&SystemGenerator进行FPGA数字信号处理的学习过程。 往期回顾&am…

【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里

【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Span)

作为Text组件的子组件&#xff0c;用于显示行内文本的组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件从API Version 10开始支持继承父组件Text的属性&#xff0c;即如果子组件未设置…

linux内存介绍

一、linux内存框图 二、meminfo信息说明 cat /proc/meminfo MemTotal: 2017504 kB //所有可用的内存大小&#xff0c; 物理内存减去预留位和内核使用。系统从加电开始到引导完成&#xff0c;firmware/BIOS要预留一 些内存&#xff0c;内核本身要占用一些内存&#xff0…

微信小程序云开发教程——墨刀原型工具入门(表单组件)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

16.旋转图像

给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&…

【PyTorch】基础学习:在终端中打印当前虚拟环境下的Pytorch版本信息

【PyTorch】基础学习&#xff1a;在终端中打印或查看当前虚拟环境下的Pytorch版本信息 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程…

springboot 动漫周边商城的设计与实现

摘 要 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这一…

Selenium控制已运行的Edge和Chrome浏览器——在线控制 | 人机交互(详细启动步骤和bug记录)

文章目录 前期准备1. 浏览器开启远程控制指令&#xff08;1&#xff09;Edge&#xff08;2&#xff09;Chrome 2. 执行python代码&#xff08;1&#xff09;先启动浏览器后执行代码&#xff08;2&#xff09;通过代码启动浏览器&#xff08;3&#xff09;Bug问题记录1&#xff…