C#串口通信Seriaport和页面传值

news2025/2/24 5:37:59

串口通信

串口COM:是一种用于连接计算机和外设设备的接口,也叫串行接口,简称com,常见的串口有一半电脑应用的RS-232(使用25针或9针的

连接器)通俗来讲串口就是usb接口、鼠标串口。键盘串口

串口通讯:是指外设和计算机 通过数据信号线、地线等按照一定协议进行双向通信的方式。

c# 通过SerialPort类获取串口相关的数据 并且提供发送和接收数据的方法,需要引入using System.IO.Ports;命名空间

桌面

namespace 串口通信例子SeriaPort
{
    public partial class Form1 : Form
    {
       //创建一个全局的串口对象
        readonly SerialPort port = new SerialPort();
        public Form1()
        {
            InitializeComponent();

            //对串口添加以下配置,

            // 1 BaudRate 波特率:用于描述通信枚每秒传递数据的速度
            //单位是bit/s, 常见的波特率1s是9600bit,1Byte是8bit  9600bit/8 = 1200字节,也就是1s发送1200个字节
            // 注意波特率不能太大 也不能太小, 如果太大了传输的数据不稳定,如果俩端的波特率不一致会导致数据不一致,如果太小了
            //反应太慢
            port.BaudRate = 9600; //设置波特率


            //2 StopBits 停止位 :标志着传输一个字符的结束
            // StopBits是一个枚举类型,可选择有1位 1.5位 2位,默认值是1位
            port.StopBits = StopBits.One;

            //3 DataBits 数据位:通信中真正的有效信息,数据位可以双方通过约定进行控制 一般可以5 、6 、7、8
            //默认值是8位
            port.DataBits = 8;


            //4 Parity 奇偶校检位 只占1位,指的是逻辑高位是奇数或者偶数个,高位就是1,低位是0
            //可取值有 Parity.None不采用校检
            //Parity.Odd  奇数校检,保证传输过程中高位个数是奇数个
            //Parity.Even 偶数校检, 保证传输过程中高位个数是偶数个
            port.Parity = Parity.None;


            //5 PortName设置连接串口名
            port.PortName = "COM1";

            //6 Encoding 编码格式,设置显示以什么格式显示
            //默认16进制格式
            port.Encoding = Encoding.Default;


            //必须配置的 波特率和设置串口
            //11 接收数据的事件 有数据触发这个函数
            port.DataReceived += Port_DataReceived;

        }
        bool isDefault = false;//代表编码方式 true代表默认默认编码
        private void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            //接收数据并且显示,
            //13BytesToRead 从缓存区读取数据的长度
            byte[] bs = new byte[port.BytesToRead];

            //14.Read从缓存区读取数据
            port.Read(bs, 0, bs.Length);//从缓存区读取数据

            //
            string value = null;
            //以哪种编码方式展示数据
            this.Invoke((EventHandler)delegate
            {
                if (isDefault)
                {
                    //16进制显示 item就是其中一个16进制
                    foreach (var item in bs)
                    {
                        value += " " + item.ToString("X"); //x代表16进制
                    }
                }
                else
                {
                    //GetEncoding("gb2312") 国标2312编码格式
                    value = Encoding.GetEncoding("gb2312").GetString(bs);
                }
                richTextBox1.Text += value + "\r\n";
                richTextBox1.SelectionStart = richTextBox1.Text.Length;
                richTextBox1.ScrollToCaret();
                //15 DiscardInBuffer清空缓存区
                port.DiscardInBuffer(); //清空缓存区
            });


        }

        //打开串口
        private void button1_Click(object sender, EventArgs e)
        {
            //7IsOpen 当前串口是否是打开状态,
            // true 为打开状态
            //false 关闭状态
            if (!port.IsOpen) //没打开
            {
                //8 open 打开串口
                port.Open();
                //9 打开之后 要设置以下俩个属性为true
                //DtrEnable 为true,启用数据终端就绪,发送一个dtr信号。
                port.DtrEnable = true;

                //RtsEnable 为true 证明请求可以发送了,发送一个rts信号
                port.RtsEnable = true;
                button1.Text = "关闭串口";
            }
            else
            {
                button1.Text = "打开串口";

                //10 关闭串口
                port.Close();
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            byte[] bs = Encoding.UTF8.GetBytes(this.textBox1.Text);
            //12Write 发送数据
            port.Write(bs, 0, bs.Length);
        }
    }
}

页面传值

①页面

namespace 页面传值
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //由Form1跳转Form2界面 把form1输入框内容传递form2的label,再把form2的输入框内容传递给form1
            //1从父级传递子级 可以通构造函数传参传递数据
            Form2 f2 = new Form2(this.textBox1.Text);
            f2.ShowDialog();

            //2 从子级传递父级界面 可以把子级的控件的modifiers属性修改成public ,在外=部进行访问
            //缺点 必须写在ShowDialog();后面
            this.textBox1.Text = f2.textBox1.Text;

        }

        private void button2_Click(object sender, EventArgs e)
        {
            Form3 f3 = new Form3();
            f3.h1 += F3_h1;
            f3.ShowDialog();
        }

        private void F3_h1(string obj)
        {
            textBox2.Text = obj;

        }
        // 第二种父传子 子传父 
        //使用委托 ,可以在子级界面创建一个委托函数,在本界面给委托函数赋值,再子级界面调用


    }
}



②页面

public Form2(string s)
{
    InitializeComponent();
    this.label1.Text = s;
}

③页面

桌面只用放一个textbox

namespace 页面传值
{
    public partial class Form3 : Form
    {

        //定义事件
        public event Action<string> h1;
              
        public Form3()
        {
            InitializeComponent();
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            h1?.Invoke(textBox2.Text);
        }
    }
}

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

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

相关文章

【MySQL】Linux下MySQL的目录结构、用户、权限与角色

一、Linux下MySQL的目录结构 1、MySQL相关目录 数据库文件存放路径&#xff1a;/var/lib/mysql数据库命令存放路径&#xff1a;/user/bin和/user/sbin配置文件目录&#xff1a;/usr/share/mysql-8.0/、/usr/share/mysql/和/etc/my.cnf 2、假设我们创建了一个数据库dbtest1&a…

uniapp 安卓、IOS、H5、微信小程序实现PDF在线预览

在使用uniapp开发移动端时&#xff0c;微信开发者工具里webview能正常打开后端接口返回的pdf文件流。正式发布后&#xff0c;在配置了业务域名和服务器域名的前提下&#xff0c;预览pdf文件却只能看到白屏&#xff0c;因此我猜测微信小程序不能通过webview读取文件流。这个想法…

论文阅读_基于嵌入的Facebook搜索

英文名称&#xff1a;Embedding-based Retrieval in Facebook Search 中文名称&#xff1a;基于嵌入式检索的Facebook搜索 时间&#xff1a;Wed, 29 Jul 2020 (v2) 地址&#xff1a;https://arxiv.org/abs/2006.11632 作者&#xff1a;Jui-Ting Huang, Ashish Sharma, Shuying …

09_计算机网络模型

目录 OSI/RM七层模型 OSI/RM七层模型 各层介绍及硬件设备 传输介质 TCP/IP协议簇 网络层协议 传输层协议 应用层协议 完整URL的组成 IP地址表示与计算 分类地址格式 子网划分和超网聚合 无分类编址 特殊含义的IP地址 IPv6协议 过渡技术 OSI/RM七层模型 OSI/RM七…

《昇思25天学习打卡营第6天 | 函数式自动微分》

《昇思25天学习打卡营第6天 | 函数式自动微分》 目录 《昇思25天学习打卡营第6天 | 函数式自动微分》函数式自动微分简单的单层线性变换模型函数与计算图微分函数与梯度计算Stop Gradient 函数式自动微分 神经网络的训练主要使用反向传播算法&#xff0c;模型预测值&#xff0…

LeetCode题练习与总结:重排链表--143

一、题目描述 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进…

centos 7.9 离线环境安装GPU服务环境

文章目录 centos 7.9 离线环境安装GPU服务环境系统配置更新 gcc更新内核安装显卡驱动安装cuda安装docker 和 nvidia-container-runtime验证 centos 7.9 离线环境安装GPU服务环境 基于centos 7.9 离线安装gpu 服务基础环境&#xff0c;用于在docker 中运行算法服务 系统配置 …

python open函数中文乱码怎么解决

首先在D盘下新建一个html文档&#xff0c;接着在里面输入含有中文的Html字符&#xff0c;使用中文格式对读取的字符进行解码&#xff0c;再用utf-8的模式对字符进行编码&#xff0c;然后就能正确输出中文字符。 代码如下&#xff1a; # -*- coding: UTF-8 -*- file1 open(&quo…

Python | Leetcode Python题解之第207题课程表

题目&#xff1a; 题解&#xff1a; class Solution:def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:edges collections.defaultdict(list)indeg [0] * numCoursesfor info in prerequisites:edges[info[1]].append(info[0])indeg[info[…

【Web3项目案例】Ethers.js极简入门+实战案例:实现ERC20协议代币查询、交易

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 目录 简介 前景科普-ERC20 Ethers极简入门教程&#xff1a;HelloVitalik&#xff08;非小白可跳&#xff09; 教程概览 开发工具 V…

LeetCode-刷题记录-二分法合集(本篇blog会持续更新哦~)

一、二分查找概述 二分查找&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;适用于有序数组或列表。&#xff08;但其实只要满足二段性&#xff0c;就可以使用二分法&#xff0c;本篇博客后面博主会持续更新一些题&#xff0c;来破除一下人们对“只有有…

44 - 50题高级字符串函数 / 正则表达式 / 子句 - 高频 SQL 50 题基础版

目录 1. 相关知识点2.例子2.44 - 修复表中的名字2.45 - 患某种疾病的患者2.46 - 删除重复的电子邮箱2.47 - 第二高的薪水2.48 - 按日期分组销售产品2.49 - 列出指定时间段内所有的下单产品2.50 - 查找拥有有效邮箱的用户 1. 相关知识点 相关函数 函数含义concat()字符串拼接upp…

[AIGC] Shell脚本在工作中的常用用法

Shell脚本是一种为 shell 编写的脚本程序。商业上的 Unix Shell 一般都配备图形界面&#xff0c;主要包括&#xff1a;Bourne Shell&#xff08;/usr/bin/sh或/bin/sh&#xff09;、Bourne Again Shell&#xff08;/bin/bash&#xff09;、C Shell&#xff08;/usr/bin/csh&…

专题三:Spring源码中新建module

前面我们构建好了Spring源码&#xff0c;接下来肯定迫不及待来调试啦&#xff0c;来一起看看大名鼎鼎ApplicationContext 新建模块 1、基础步骤 1.1 自定义模块名称如&#xff1a;spring-self 1.2 选择构建工具因为spring使用的是gradle&#xff0c;所以这边需要我们切换默认…

KV260视觉AI套件--PYNQ-DPU

目录 1. 简介 2. DPU 原理介绍 2.1 基本原理 2.2 增强型用法 3. DPU 开发流程 3.1 添加 DPU IP 3.2 在 BD 中调用 3.3 配置 DPU 参数 3.4 DPU 与 Zynq MPSoC互联 3.5 分配地址 3.6 生成 Bitstream 3.7 生成 BOOT.BIN 4. 总结 1. 简介 在《Vitis AI 环境搭建 &…

爬虫中如何创建Beautiful Soup 类的对象

在使用 lxml 库解析网页数据时&#xff0c;每次都需要编写和测试 XPath 的路径表达式&#xff0c;显得非常 烦琐。为了解决这个问题&#xff0c; Python 还提供了 Beautiful Soup 库提取 HTML 文档或 XML 文档的 节点。 Beautiful Soup 使用起来很便捷&#xff0c;…

数据结构-期末复习题

数据结构-期末复习题 一、选择题 1、在数据结构中&#xff0c;与所使用的计算机无关的是数据的&#xff08; ) 结构。 A. 存储B. 物理C. 逻辑D. 物理和存储 【答案】C 【解析】暂无解析2、算法分析的两个主要方面是 ( )。 A. 正确性和简单性B. 可读性和文档性C. 空间复杂度…

拼多多滑块逆向

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言(lianxi …

onInterceptTouchEvent() 与 onTouch() 事件分析

前言 本文主要分析 onTouch() 与 onTouchEvent() 事件的差异 正文 先看布局文件&#xff1a; <?xml version"1.0" encoding"utf-8"?> <com.longzhiye.intercepttouch.MyFrameLayout xmlns:android"http://schemas.android.com/apk/res…

Big Data Tools插件

一些介绍 在Jetbrains的产品中&#xff0c;均可以安装插件&#xff0c;其中&#xff1a;Big Data Tools插件可以帮助我们方便的操作HDFS&#xff0c;比如 IntelliJ IDEA&#xff08;Java IDE&#xff09; PyCharm&#xff08;Python IDE&#xff09; DataGrip&#xff08;SQL …