VS2022开发上位机流程

news2024/12/28 3:15:38

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、运行测试

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

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

相关文章

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

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

deepin23beta中SQLite3数据库安装与使用

SQLite 是一个嵌入式 SQL 数据库引擎&#xff0c;它实现了一个自包含、无服务器、零配置、事务性 SQL 数据库引擎。 SQLite 的代码属于公共领域&#xff0c;因此可以免费用于任何商业或私人目的。 SQLite 是世界上部署最广泛的数据库&#xff0c;其应用程序数量之多&#xff0c…

编译原理-实现识别标识符的词法分析器——沐雨先生

实验任务&#xff1a; 实现识别标识符的词法分析器 实验要求&#xff1a; 根据编译原理理论课教材中图2.3“标识符的转换图”&#xff0c;用C语言编写识别标识符的词法分析器&#xff0c;以文本文件为输入&#xff0c;控制台&#xff08;或文件&#xff09;输出识别出的每个…

别忽视平台的重要性

目录 前言&#xff1a; 与谁在一起&#xff0c;真的很重要 别把运气当才华&#xff0c;别把平台当本事 珍惜平台&#xff0c;用好平台 前言&#xff1a; 对于做技术开发的人来说&#xff0c;一头扎进技术里面去固然重要&#xff0c;但是很多时候&#xff0c;也要看看人际交…

springboot“爱相连”儿童慈善管理系统的设计与实现

摘要 随着网络科技的不断发展以及人们经济水平的逐步提高&#xff0c;网络技术如今已成为人们生活中不可缺少的一部分&#xff0c;而信息管理系统是通过计算机技术&#xff0c;针对用户需求开发与设计&#xff0c;该技术尤其在各行业领域发挥了巨大的作用&#xff0c;有效地促…

webpack5零基础入门-8清空前次打包文件与处理图标字体资源

1.配置output中的clean属性为true output: {/**文件输出路径 绝对路径*///__dirname 表示当前文件的文件夹目录path: path.resolve(__dirname, dist),//所有文件的输出目录/**文件名 */filename: static/js/dist.js,//入口文件输出文件名clean: true,//在打包前将path整个目录内…

Cesium 显示实时鼠标位置和视角信息

根据鼠标移动的位置计算鼠标所在位置的经纬度 监听视角变化情况显示视高、方位角、俯仰角 监测底图切片等级来显示当前地图缩放等级 showMapData() {let _this thislet handler new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)handler.setInputAction(function (mo…

Soft Robotics 变结构手掌和变刚度手指的仿人软体手的人机交互操作-武科大ESIR课题组师兄成果

一、引言 在当今的机器人技术领域&#xff0c;人类对机器人的需求日益增长&#xff0c;涉及到工业生产、医疗护理、服务业等各个领域。然而&#xff0c;由于任务的多样性和复杂性&#xff0c;单独依靠自主机器人操作往往难以满足实际需求。为了解决这一问题&#xff0c;人机协作…

软件设计和体系结构

软件设计和体系结构 一、引言 软件 定义&#xff1a;一系列按照特定顺序组织的计算机数据、指令的集合 特点&#xff1a; 软件不是生产制造&#xff0c;是设计开发软件不会磨损和老化软件需要根据实际情况进行定制开发 软件设计的基本原则 抽象方法 过程抽象&#xff1a;是指…

【物联网】Modbus 协议及Qinghub物联网平台应用

Modbus 协议简介 QingHub设计器在设计物联网数据采集时不可避免的需要针对Modbus协议的设备做相关数据采集&#xff0c;这里就我们的实际项目经验分享Modbus协议 你可以通过QingHub作业直接体验试用&#xff0c;也可以根据手册开发相应的代码块。 qinghub项目已经全面开源。 …

从 VNCTF2024 的一道题学习QEMU Escape

说在前面 本文的草稿是边打边学边写出来的&#xff0c;文章思路会与一个“刚打完用户态 pwn 题就去打 QEMU Escape ”的人的思路相似&#xff0c;在分析结束以后我又在部分比较模糊的地方加入了一些补充&#xff0c;因此阅读起来可能会相对轻松。&#xff08;当然也不排除这是…

数据结构知识点总结00-知识点目录

专栏主页&#xff1a; 数据结构算法程序设计基础C语言知识点总结https://blog.csdn.net/seeker1994/category_12585732.html C语言知识点总结00-C语言知识点目录 最优算法100例00-最优算法100例目录 ...... 数据结构知识点目录 要求&#xff1a; &#xff08;1&#xff…

什么蓝牙耳机最好?2024年五大优质品牌机型,真实评测助你决策

​随着科技的进步&#xff0c;无线蓝牙耳机已经取代了传统的有线耳机&#xff0c;成为新的趋势。尽管无线蓝牙耳机种类繁多&#xff0c;挑选合适的款式并不容易。我整理了几款表现不错的蓝牙耳机&#xff0c;希望这篇文章能帮助你找到适合自己的真无线蓝牙耳机。 一、挑选蓝牙耳…

C语言中,可以在子函数中动态申请一个指向二维数组的内存给调用函数使用么——看ChatGPT的回答——

下面是ChatGPT的回答&#xff0c;太专业了&#xff0c;比网上查的资料都好很多可能。 是的&#xff0c;可以在子函数中动态申请一个指向二维数组的内存&#xff0c;然后将其传递给调用函数使用。在C语言中&#xff0c;可以通过以下方式实现&#xff1a; #include <stdio.h…

英国伦敦交易所股票清单列表数据API接口

# Restful API https://tsanghi.com/api/fin/stock/XLON/list?token{token}更新时间&#xff1a;收盘后3~4小时。 更新周期&#xff1a;每天。 请求方式&#xff1a;GET。 # 测试&#xff1a;返回不超过10条数据&#xff08;2年历史&#xff09; https://tsanghi.com/api/fin/…

IO Watch:用 Arduino UNO 制造的可编程手表

MAKER:mblaz/译:趣无尽 Cherry(转载请注明出处) 关于手表的项目,之前我们已经介绍过一款《Arduino + 3D 打印 DIY 电子手表》。本期的项目同样的一款基于 Arduino UNO 的可编程的手表,相比之下制造门槛更高一些。同时它更成熟、实用,外形也很有设计感,非常的漂亮! 这…

TEAM标签管理体系是什么?如何进行数据权益的保护?

TEAM标签管理体系是什么&#xff1f;如何进行数据权益的保护&#xff1f; 导读一、数据权益保护的难点及解决思路二、数据权益保护的“TEAM”管理体系1、Tagging&#xff08;打标&#xff09;&#xff1a;为数据资源提供全生命周期跟踪保护2、Ensuring&#xff08;保障&#xf…

将复数的实部和虚部或数值的符号都取反operator.neg(num)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将复数的实部和虚部 或数值的符号都取反 operator.neg(num) [太阳]选择题 关于operator.neg()的功能说法正确的是&#xff1f; import operator print("【执行】operator.neg(34j)"…

无硫防静电手指套:高科技产业的纯净与安全新选择

随着科技的飞速发展&#xff0c;高科技产业对于生产环境的纯净度和产品的防静电要求日益严格。为了满足这一高标准的需求&#xff0c;无硫防静电手指套应运而生&#xff0c;以其独特的无硫特性和出色的防静电功能&#xff0c;迅速成为了高科技产业中的纯净与安全新选择。 无硫手…

react中JSX的详解

目录 JSX的本质及其与JavaScript的关系探究 一、JSX的本质 二、JSX与JavaScript的关系 三、为什么要使用JSX 四、不使用JSX的后果 五、JSX背后的功能模块 JSX的本质及其与JavaScript的关系探究 在React开发中&#xff0c;JSX是一个不可或缺的部分。那么&#xff0c;JSX的…