C#上位机——串口助手高级02

C#上位机——串口助手高级

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Text;
using System.Windows.Forms;namespace 串口助手
{public partial class Form1 : Form{private bool isOpen = false;//打开标志private bool isRxShow = true;//接收标志private List<byte> reciveBuffer = new List<byte>();//接收数据缓冲区private List<byte> sendBuffer = new List<byte>();//定义发送缓冲区private int reciveCount = 0;//计数接收到数据private int sendCount = 0;//计数发送出的数据//SerialPortpublic Form1(){InitializeComponent();Control.CheckForIllegalCrossThreadCalls = false;}private void Form1_Load(object sender, EventArgs e){//在设计页面已经预先添加了COM1 COM2 COM3 //this.port_cbb.Items.Add("COM4");//this.port_cbb.Items.Add("COM5");//this.port_cbb.SelectedIndex = 2;//this.baud_cbb.SelectedIndex = 1;//this.check_cbb.SelectedIndex = 0;//this.databit_cbb.SelectedIndex = 3;//this.stopbit_cbb.SelectedIndex = 0;// 给发送框添加预设文本//  this.send_rtb.Text = "我是发送框";// 给接收框添加预设文本//  this.recive_rtb.Text = "我是接收框";serialLoad();//加载串口的属性}//自动加载串口端口号private void serialLoad(){EncodingInfo[] encodingInfos = Encoding.GetEncodings();//支持的字符编码RegistryKey keyCom = Registry.LocalMachine.OpenSubKey(@"Hardware\DeviceMap\SerialComm");string[] sSubKeys = keyCom.GetValueNames();port_cbb.Items.Clear();foreach (var sValue in   sSubKeys){string portName = (string)keyCom.GetValue(sValue);port_cbb.Items.Add(portName);}this.port_cbb.SelectedIndex = 0;this.baud_cbb.SelectedIndex = 1;this.check_cbb.SelectedIndex = 0;this.databit_cbb.SelectedIndex = 3;this.stopbit_cbb.SelectedIndex = 0;}//发送数据private void sendData(){serialPort1.Write(sendBuffer.ToArray(),0,sendBuffer.Count);sendCount += sendBuffer.Count;recivecount_tssl.Text = sendCount.ToString();}private void send_btn_Click(object sender, EventArgs e){// 如果发送的数据不为空,则接收if (this.send_rtb.Text != "" && serialPort1.IsOpen){Console.WriteLine(Transform.ToHexString(sendBuffer.ToArray()));sendData();}else{MessageBox.Show("请先输入发送数据!");}}private void open_btn_Click(object sender, EventArgs e){try{if (serialPort1.IsOpen == false){serialPort1.PortName = port_cbb.Text;serialPort1.BaudRate = Convert.ToInt32(baud_cbb.Text);serialPort1.DataBits = Convert.ToInt32(databit_cbb.Text);switch (check_cbb.SelectedIndex){//  none  odd  even case 0:serialPort1.Parity = Parity.None;break;case 1:serialPort1.Parity = Parity.Odd;break;case 2:serialPort1.Parity = Parity.Even;break;default:serialPort1.Parity = Parity.None;break;}switch (stopbit_cbb.SelectedIndex){// 1 1.5 2case 0:serialPort1.StopBits = StopBits.One;break;case 1:serialPort1.StopBits = StopBits.OnePointFive;break;case 2:serialPort1.StopBits = StopBits.Two;break;default:serialPort1.StopBits = StopBits.One;break;}serialPort1.Open();isOpen = true;open_btn.Text = "关闭串口";}else{serialPort1.Close();isOpen = false;open_btn.Text = "打开串口";}}catch (Exception ex){MessageBox.Show(ex.ToString()+serialPort1.PortName.ToString());}}private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e){if (isRxShow == false) return;// 1,需要读取有效的数据 BytesToReadbyte[] dataTemp = new byte[serialPort1.BytesToRead];//将串口中的数据读出来serialPort1.Read(dataTemp,0,dataTemp.Length);//0表示偏移地址,dataTemp.Length表示数据长度reciveBuffer.AddRange(dataTemp);//将数据缓存到buff中reciveCount += dataTemp.Length;//进行接收计数//将buff中的数据更新到页面中,异步线程,更新UIthis.Invoke(new EventHandler(delegate{// 显示接收数据的长度recivecount_tssl.Text = reciveCount.ToString();if (!recivehex_chb.Checked)//如果没有选中{// 2, 编码格式的选择string str = Encoding.GetEncoding("gb2312").GetString(dataTemp);//gb2312编码格式来接收数据// 3,0x00 -> \0 结束 不会显示str =str.Replace("\0", "\\0");//发送00时,转译为\0recive_rtb.AppendText(str);// recive_rtb.AppendText(Encoding.GetEncoding("gb2312").GetString(dataTemp).Replace("\0", "\\0"));}else{//  十六进制是选中的状态下recive_rtb.AppendText(Transform.ToHexString(dataTemp, " "));}}));}private void stop_btn_Click(object sender, EventArgs e){if (isRxShow == true){isRxShow = false;stop_btn.Text = "取消暂停";}else{isRxShow = true;stop_btn.Text = "暂停";}}private void recivehex_chb_CheckedChanged(object sender, EventArgs e){if (recive_rtb.Text == "") return;if (recivehex_chb.Checked){recive_rtb.Text = Transform.ToHexString(reciveBuffer.ToArray()," ");//以十六进制的形式显示出来}else{recive_rtb.Text = Encoding.GetEncoding("gb2312").GetString(reciveBuffer.ToArray()).Replace("\0","\\0");//以字符串的形式显示出来}}private void clear_btn_Click(object sender, EventArgs e){reciveBuffer.Clear();recivecount_tssl.Text = "";recive_rtb.Text = "";}private void autoclear_chb_CheckedChanged(object sender, EventArgs e){if (autoclear_chb.Checked){timer1.Start();}else{timer1.Stop();}}private void timer1_Tick(object sender, EventArgs e){if (recive_rtb.Text.Length > 4096){reciveBuffer.Clear();recive_rtb.Text = "";recivecount_tssl.Text = "";}}private void send_rtb_Leave(object sender, EventArgs e){if (sendhex_chb.CheckState == CheckState.Checked){if (DataEncoding.IsHexString(send_rtb.Text.Replace(" ", ""))){sendBuffer.Clear();sendBuffer.AddRange(Transform.ToBytes(send_rtb.Text.Replace(" ", "")));}else{MessageBox.Show("请输入正确的十六进制数据!!");send_rtb.Select();}}else{sendBuffer.Clear();sendBuffer.AddRange(Encoding.GetEncoding("gb2312").GetBytes(send_rtb.Text));}}private void send_rtb_TextChanged(object sender, EventArgs e){// 十六进制切换 会出现问题  这问题就是0x00 转换}private void sendhex_chb_CheckedChanged(object sender, EventArgs e){if (send_rtb.Text == "") return;if (sendhex_chb.Checked == true){send_rtb.Text = Transform.ToHexString(sendBuffer.ToArray(), " ");//每一个字符以空格的形式隔开}else { send_rtb.Text = Encoding.GetEncoding("gb2312").GetString(sendBuffer.ToArray()).Replace("\0","\\0");}}private void sendclear_btn_Click(object sender, EventArgs e){sendBuffer.Clear();send_rtb.Text = "";sendCount = 0;recivecount_tssl.Text = "0";}}
}

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

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

相关文章

外部 Storage Provider - 每天5分钟玩转 Docker 容器技术(149)

如果 Kubernetes 部署在诸如 AWS、GCE、Azure 等公有云上&#xff0c;可以直接使用云硬盘作为 Volume&#xff0c;下面是 AWS Elastic Block Store 的例子&#xff1a; 要在 Pod 中使用 ESB volume&#xff0c;必须先在 AWS 中创建&#xff0c;然后通过 volume-id 引用。其他云…

C#上位机——串口助手高级03

C#上位机——串口助手高级03 using Microsoft.Win32; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO.Ports; using System.Text; using System.Windows.Forms;namespace 串口助手 …

为什么你申请信用卡总是被拒绝?是银行跟你有仇吗?

信用卡被拒是有很多原因的&#xff0c;正常来说如果你信用卡被拒绝&#xff0c;可以从以下几个方面找原因。一、征信问题如果最近两年征信逾期超过6次以上&#xff0c;或有超过90天以上不还款的记录&#xff0c;那基本没戏。除此之外&#xff0c;如果你最近半年之内查询征信的次…

在银行存款被吞了,怎么能快速解决?

存款被吞&#xff0c;估计绝大部分都会非常紧张&#xff0c;生怕被吞的存款就这样没了。在这个时候&#xff0c;很多人首先想到的是会给银行打电话&#xff0c;说自己的钱被ATM吞了&#xff0c;希望银行的人员能过来看一下&#xff0c;这个时候&#xff0c;银行客服人员估计会不…

C#上位机——父子窗口

C#上位机——父子窗口 创建一个类 第一步&#xff1a;主窗体建立委托 第二步&#xff1a;在主窗体的事件中使用委托 第三步&#xff1a;将副窗体中的方法赋给委托 using Microsoft.Win32; using System; using System.Collections.Generic; using System.ComponentModel; u…

余额宝好日子到头,以后不能随存随取了!

最近几日&#xff0c;支付宝、微信等等第三方支付机构被收编的新闻充斥着各大头条&#xff0c;根据网联涵&#xff08;2018&#xff09;42号文件相关要求&#xff0c;关于非银行支付机构网络支付清算平台渠道接入工作相关事宜的函中的要求代扣及直连将会被停止。对此大家都在热…

30几岁该有多少存款才算合格?

今年30几岁&#xff0c;定期存款没有&#xff0c;活期存款有一两千&#xff0c;贷款到是有几百万。那30岁应该有多少存款呢&#xff1f;我觉得这个没有一个固定的标准&#xff0c;因为每个人所处的地方&#xff0c;工作的单位&#xff0c;个人的资源&#xff0c;能力&#xff0…

C#上位机—事件传参

C#上位机—事件传参 主窗口的操作 子窗口的操作 using Microsoft.Win32; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO.Ports; using System.Text; using System.Windows.Forms…

PV PVC - 每天5分钟玩转 Docker 容器技术(150)

Volume 提供了非常好的数据持久化方案&#xff0c;不过在可管理性上还有不足。 拿前面 AWS EBS 的例子来说&#xff0c;要使用 Volume&#xff0c;Pod 必须事先知道如下信息&#xff1a; 当前 Volume 来自 AWS EBS。 EBS Volume 已经提前创建&#xff0c;并且知道确切的 volu…

扩展协议解析

扩展协议解析 解析数据帧的类

NFS PersistentVolume - 每天5分钟玩转 Docker 容器技术(151)

上一节我们介绍了 PV 和 PVC&#xff0c;本节通过 NFS 实践。 作为准备工作&#xff0c;我们已经在 k8s-master 节点上搭建了一个 NFS 服务器&#xff0c;目录为 /nfsdata&#xff1a; 下面创建一个 PV mypv1&#xff0c;配置文件 nfs-pv1.yml 如下&#xff1a; ① capacity 指…

最优化算法——常见优化算法分类及总结

之前做特征选择&#xff0c;实现过基于群智能算法进行最优化的搜索&#xff0c;看过一些群智能优化算法的论文&#xff0c;在此做一下总结。 最优化问题在生活或者工作中存在各种各样的最优化问题&#xff0c;比如每个企业和个人都要考虑的一个问题“在一定成本下&#xff0c;如…

DSP之CMD文件

DSP之CMD文件 用户希望将某一段&#xff0c;尤其是自定义段&#xff0c;放在什么存储器的什么位置&#xff0c;这也是链接器不知道的。为了告诉链接器&#xff0c;即将使用的芯片其内部存储空间的分配和程序各段的具体存放位置&#xff0c;这就需要编写一个配置文件&#xff0…

突发!央行确认支付宝3种违法违规行为,处罚18万元!

支付宝近段可谓是多事之秋&#xff0c;可把马云愁苦了&#xff0c;继余额宝限额、限时、银行直连被停之后&#xff0c;最近支付宝又被罚了。2018年3月22日中国人民银行杭州中心支行对支付宝做出行政处罚决定&#xff0c;支付宝(中国)网络技术有限公司因七项违规行为被合计罚款共…

杭州刚公布完摇号卖房新政,隔天就来个百亿地王,大家怎么看?

为了响应房子是用来住的而不是用来炒的的知指导&#xff0c;目前各地对如何限制房价使了浑身解数&#xff0c;各种手段不断推出&#xff0c;其中近段最热门的调控手段就是摇号卖房。目前已经有6个城市实施摇号卖房的政策&#xff0c;分别是上海、南京、长沙、成都、杭州、西安。…

DSP之寄存器映射和CDM文件

DSP之寄存器映射和CDM文件 RAM&#xff1a;程序运行速度快&#xff0c;关掉电源&#xff0c;程序会丢失。 Flash&#xff1a;程序运行速度慢&#xff0c;关掉电源&#xff0c;程序不会丢失。 所以&#xff0c;程序一般存到Flash中&#xff0c;在运行的时候&#xff0c;由CPU将…

为何穷人玩股票绝大多数会赔钱?

大家身边有炒股的朋友吗&#xff1f;他们是赚了还是赔了呢&#xff1f;反正小编我身边有几个炒股的穷朋友&#xff0c;都是几万块钱的玩&#xff0c;结果玩了几年也没有见到发大财的&#xff0c;而且大部分人都亏钱了。其实玩股票赢钱、亏钱都很正常&#xff0c;富人也有亏钱的…

回收 PV - 每天5分钟玩转 Docker 容器技术(152)

当 PV 不再需要时&#xff0c;可通过删除 PVC 回收。 当 PVC mypvc1 被删除后&#xff0c;我们发现 Kubernetes 启动了一个新 Pod recycler-for-mypv1&#xff0c;这个 Pod 的作用就是清除 PV mypv1 的数据。此时 mypv1 的状态为 Released&#xff0c;表示已经解除了与 mypvc1 …

PHP会话管理——Session和Cookie

会话管理包括&#xff1a;Session和Cookie&#xff0c;主要功能都是把客户端和服务器关联起来&#xff0c;用于管理和查看用户在网站中的状态。 背景Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕&#xff0c;客户端与服务器端的连接就会关闭…

ADC的本质与特性

ADC的本质与特性 模拟数字转换器即A/D转换器&#xff0c;或简称ADC&#xff0c;通常是指一个将模拟信号转变为数字信号的电子元件。 模拟信号 数字信号 芯片 采样、 保持、量化和编码 所谓采样就是将一个时间上连续变化的模拟量转化为时间上离散变化的模拟量。 将采样结果储存…