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

串口通信

串口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.mfbz.cn/a/751349.html

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

相关文章

Spring Clude 是什么?

目录 认识微服务 单体架构 集群和分布式架构 集群和分布式 集群和分布式区别和联系 微服务架构 分布式架构&微服务架构 微服务的优势和带来的挑战 微服务解决方案- Spring Cloud 什么是 Spring Cloud Spring Cloud 版本 Spring Cloud 和 SpringBoot 的关系 Sp…

VScode远程连接时卡住

将报错文件删除 ### 查找文件(base) ~ find /home -name 5c3e652f63e798a5ac2f31ffd0d863669328dc4c /home/cszx/.vscode-server/data/clp/99e4e0e4dad86d47de9777231596fd92.zh-cn/5c3e652f63e798a5ac2f31ffd0d863669328dc4c ### 删除(base) ~ rm -rf /home/cszx/.vscode-ser…

centOS7网络配置_NAT模式设置

第一步&#xff1a;查看电脑网卡 nat模式对应本地网卡的VMnet 8 &#xff0c;查看对应的IP地址。 第二步&#xff1a;虚拟网络编辑器 打开VMWare&#xff0c;编辑--虚拟网络编辑器&#xff0c;整个都默认设置好了&#xff0c;只需要查看对应的DHCP设置中对应的IP的起始&#…

MySQL数据类型、运算符以及常用函数

MySQL数据类型 MySQL数据类型定义了数据的大小范围&#xff0c;因此使用时选择合适的类型&#xff0c;不仅会降低表占用的磁盘空间&#xff0c; 间接减少了磁盘I/O的次数&#xff0c;提高了表的访问效率&#xff0c;而且索引的效率也和数据的类型息息相关。 数值类型 浮点类型…

01.Ambari自定义服务开发-项目初始化

文章目录 基础环境在PyCharm中初始化项目配置项目相关依赖在PyCharm中导入依赖 基础环境 PyCharmPython 2.7已经安装完成的Ambari服务端 在PyCharm中初始化项目 项目名称就是我们要安装服务的名称&#xff0c;要求名称为全大写&#xff0c;如&#xff1a;DORIS创建Python2.7…

AUTOSAR以太网之IPv4

系列文章目录 返回总目录 文章目录 系列文章目录一、IPv4报文格式二、主要函数1.IPv4_Init()2.IPv4_Receive()3.IPv4_Transmit() 一、IPv4报文格式 二、主要函数 1.IPv4_Init() 这个函数除了对模块配置进行初始化&#xff0c;如果有分包和组包使能&#xff0c;则会对一些相关…

【高级篇】分区与分片:MySQL的高级数据管理技术(十三)

引言 在上一章,我们探讨了MySQL的主从复制与高可用性,这是构建健壮数据库架构的基石。现在,让我们深入到更高级的主题——分区与分片,这些技术对于处理大规模数据集和提升数据库性能至关重要。我们将详细介绍表分区的概念、类型及分片技术的应用,为下一章讨论MySQL集群与…

2.5 MAC扫描器

MAC扫描器是一款专门用来获取网卡物理地址的网络管理软件&#xff0c;相对于Windows系统的getmac命令&#xff0c;MAC扫描器功能更加强大&#xff0c;它不仅可以获取局域网计算机的MAC地址&#xff0c;还可以获取 Internet 中网卡的MAC地址。MAC扫描器通常被用来管理本地网络中…

22 Shell编程之免交互

目录 22.1 Here Document免交互 22.1.1 Here Document概述 22.1.2 Here Document免交互 22.1.3 Here Document变量设定 22.1.4 Here Document格式控制 22.1.5 Here Document多行注释 22.2 expect免交互 22.2.1 expect概述 22.2.2 expect安装 22.2.3 基本命令介绍 22.2.4expec…

Python操作MySQL数据库--使用pymysql模块

Python操作MySQL数据库--使用pymysql模块 一、新建数据库和数据表1.1 新建book数据库1.2 新建bookprice数据表二、连接数据库2.1 建立数据库连接三、新增数据3.1 新增单条数据3.2 新增多条数据3.3 批量新增四、修改数据4.1 修改单条数据4.2 修改多条数据五、删除数据5.1 删除单…

Java基础(四)——字符串、StringBuffer、StringBuilder、StringJoiner

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…

配置 Cmder 到鼠标右键

win Q 快捷键搜索 cmd&#xff0c;以管理员身份运行 在命令行输入 cmder.exe /REGISTER ALL

浏览器插件利器-allWebPluginV2.0.0.14-beta版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX插件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持谷歌、火狐等浏…

推荐系统三十六式学习笔记:原理篇.模型融合14|一网打尽协同过滤、矩阵分解和线性模型

目录 从特征组合说起FM模型1.原理2.模型训练3.预测阶段4.一网打尽其他模型5.FFM 总结 在上一篇文章中&#xff0c;我们讲到了使用逻辑回归和梯度提升决策树组合的模型融合办法&#xff0c;用于CTR预估&#xff0c;给这个组合起了个名字&#xff0c;叫“辑度组合”。这对组合中&…

Arduino平台软硬件原理及使用——SR04超声波传感器的使用

文章目录&#xff1a; 一、超声波传感器工作原理 二、SR04超声波库的使用 三、SR04超声波传感器在Arduino中的使用 一、超声波传感器工作原理 如上图所示&#xff1a;HCSR04超声波传感器拥有4个针脚&#xff0c;除了VCC接正极、GND接负极外&#xff0c;还有两个引脚“Trig”及“…

SuperCopy解决文档不能复制问题

有一些文档&#xff0c;我们要使用时&#xff0c;总是面临收费的情况&#xff0c;让我们不能复制&#xff0c;让人头疼不已&#xff01;&#xff01;&#xff01; SuperCopy就可以解决这个问题。 获取SuperCopy步骤 1. 打开浏览器&#xff0c;点击右上角的三个点 2. 找到扩…

代码随想录算法训练营:14/60

非科班学习算法day14 | LeetCode266:翻转二叉树 &#xff0c;Leetcode101: 对称二叉树&#xff0c;Leetcode100:相同的的树 &#xff0c;LeetCode572:另一颗树的子树&#xff0c;LeetCode104&#xff1a;二叉树的最大深度&#xff0c;LeetCode559&#xff1a;N叉树的最大深度 目…

Spring响应式编程之Reactor介绍

Reactor介绍 1、异步执行技术2、实现方式 响应式编程&#xff08;Reactive Programming&#xff09;是一种面向数据流和变化传播的编程范式。Java中的Reactor是一个用于响应式编程的库&#xff0c;它建立在Reactive Streams规范之上&#xff0c;旨在帮助开发者构建非阻塞的、高…

无门槛代理SSL证书入门指南

随着网络安全问题日益凸显&#xff0c;SSL证书作为保障网络数据传输安全的重要手段&#xff0c;其市场需求也在持续增长。因此&#xff0c;成为SSL证书代理不仅具有巨大的商业价值&#xff0c;更是提升网络安全保障能力的关键步骤。本文将为您介绍如何快速无门槛代理SSL证书的方…

使用API有效率地管理Dynadot域名,为文件夹中的域名设置域名转发

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…