2022年5月7日【Jiawei_Z】C#公众号文章学习记录[从入门到放弃--制作一个串口助手 界面 和 逻辑调试] 03 04 05

制作一个串口助手 界面开发
在这里插入图片描述

初级阶段我认为还是用到什么学什么,光介绍不同的控件,语法可能学完了还是不知道能干什么,
在实践中不断的总结,练习,才能有所进步
成品界面
下面来一步步介绍它是如何完成的

首先将Window的Title=“MainWindow” 改成Title=“串口调试助手”
在这里插入图片描述
下面介绍最常用的布局元素Grid:定义由列和行组成的灵活的网格区域。

主要使用ColumnDefinitions(列定义)RowDefinitions(行定义)两个属性。
默认是从0行0列开始,如果是有0行或者0列可以不用Grid.Row和Grid.Column附加属性设定子元素在单元格中的位置。
在这里插入图片描述
下面先定义了一个两行两列的格子,其中Width="2
",Height="2
"代表比例是2份,Width=““,Height=”” 可以省略不写。
还可以是Auto是自动值,根据控件的大小自动调整比例,还可以填写数字代表着绝对值。
在这里插入图片描述
在默认的0行0列 再设置一个5行2列用于设置串口号、波特率、数据位、停止位、校验位。
在这里插入图片描述
Label 文本控件
Content=“串口号:” FontSize=“30” Content设置显示的内容,FontSize设置字体大小。
ComboBox 表示带有下拉列表的选择控件
Grid.Column=“1” Name=“Portname” Margin=“10” Name给控件起个名字,方便在代码处使用,Margin 约束控件与容器控件的边距,设置值分别代表左上右下,这里同时指定四个值。
在这里插入图片描述
用着同样的方法设置波特率、数据位、停止位、校验位。只需要修改行和列的位置,以及Name的名称即可。
在这里插入图片描述
下面对1行0列再设置一个三行,分别放置搜索串口,打开串口,发送数据三个按钮。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这期主要将串口号、波特率、数据位、停止位、校验位下拉列表赋值。
需要引用 System.IO.Ports (包含用于控制串行端口的类。 最重要的类 SerialPort 为同步和事件驱动 I/O 提供框架,提供对插针和中断状态的访问,以及对串行驱动程序属性的访问)命名空间,用户可以非常简单地编写少量代码就完成串口的信息收发程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
定义一个Window的加载事件 Window_Loaded 语法是Loaded=“Window_Loaded” 这样前台代码中多了private void Window_Loaded(object sender, RoutedEventArgs e) { }事件
在这里插入图片描述
在这里插入图片描述
需要引用System.IO.Ports 方式是前面加个
using System.IO.Ports
;
string[] ports = SerialPort.GetPortNames(); 获取当前计算机的串行端口名的数组保存在 ports这个字符串的数组中
通过
Configure Virtual Serial Port Driver** 虚拟串口软件,配置 com1~ com4 软件。
在这里插入图片描述
在这里插入图片描述
默认是空白的,没有串口被选中,我们一般会默认给他选中第一个。 this.Portname.SelectedIndex = 0;
在这里插入图片描述
设置波特率

string[] baudrate = new string[]{ “300”, “600”, “1200”, “2400”, “4800”, “9600”, “19200”, “38400”, “43000”,“56000”, “57600”, “115200” };
建一个常见波特率的字符串数据
this.Baudrate.ItemsSource = baudrate; 对波特率这个下拉列表赋值
this.Baudrate.SelectedIndex = 0; 默认选中第一个
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

首先添加一个串口类SerialCom
前面有讲过添加类,这里就不在赘述。
添加public static 修饰
添加static修饰主要是无需创建类的实例就能够访问的类中的字段和方法。
需要引用System.IO.Ports using System.IO.Ports;
public static SerialPort com { get; set; } = new SerialPort();
创建串口对象字段
依次设置 串口号、波特率、数据位、停止位、校验位
在这里插入图片描述
建一个串口收发数据的类
public class MyCom{}

实现串口打开的方法:public void ComOpen() { }

判断串口是否已经打开 if(SerialCom.OpenState == false){}

设置串口名、波特率、数据位、停止位、校验位。
在这里插入图片描述

SerialCom.com.PortName = SerialCom.com_name;
SerialCom.com.BaudRate = SerialCom.com_Bound;
SerialCom.com.DataBits = SerialCom.com_DataBit;
if (SerialCom.com_StopBit == "1") SerialCom.com.StopBits = System.IO.Ports.StopBits.One;
if (SerialCom.com_StopBit == "2") SerialCom.com.StopBits = System.IO.Ports.StopBits.Two;
if (SerialCom.com_Verify == "None") SerialCom.com.Parity = System.IO.Ports.Parity.None;
if (SerialCom.com_Verify == "Odd") SerialCom.com.Parity = System.IO.Ports.Parity.Odd;
if (SerialCom.com_Verify == "Even") SerialCom.com.Parity = System.IO.Ports.Parity.Even;
SerialCom.com.NewLine= "\r\n"; 接收或者发送数据回车显示
Comthread(); 启动线程

否则的话 关闭串口,同时串口的状态为false。
  SerialCom.comdata.Add("关闭串口");
  SerialCom.com.Close();
  SerialCom.OpenState = false;    

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

SerialCom.comdata.Add("打开串口完成");
 SerialCom.OpenState = true;
if (buf.Length > 0)  {
string str = Encoding.Default.GetString(buf);
SerialCom.comdata.Add(str);}    如果收到数据则输出
catch {  SerialCom.OpenState = false; SerialCom.com.Close(); }   异常则关闭串口

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

public void WriteData(byte[] bytes){}
  if (SerialCom.OpenState && bytes != null) 
  { 
     SerialCom.com.Write(bytes, 0, bytes.Length);
}

在这里插入图片描述

private void Comthread()
{
  SerialCom.com.Open();打开串口
  SerialCom.com.Encoding = Encoding.GetEncoding("GB2312");设置编码格式
  Thread thread = new Thread(ReadDada); 实例化一个线程
  thread.IsBackground = true; 设置线程为后台线程
  thread.Start();       启动线程  
}

添加定时器所用的命名空间
using System.Windows.Threading;
DispatcherTimer dtimer = new DispatcherTimer();实例化一个定时器
private MyCom mCom = new MyCom(); 实例化一个串口类
在这里插入图片描述

在窗口加载事件中添加定时间隔/开启定时器
dtimer.Interval = TimeSpan.FromMilliseconds(100); 设置定时间隔为100ms
dtimer.Tick += new EventHandler(timer_Tick); 注册定时中断事件
dtimer.Start(); 定时器开启
在这里插入图片描述

private void Send_Click(object sender, RoutedEventArgs e)
  {
            mCom.WriteData(Encoding.UTF8.GetBytes(Senddata.Text));
  }

在这里插入图片描述

private void Open_Click(object sender, RoutedEventArgs e)
        {
            SerialCom.com_name = Portname.Text; // 串口号
            SerialCom.com_Bound = int.Parse(Baudrate.Text); // 波特率
            SerialCom.com_DataBit = int.Parse(Databit.Text); // 数据位
            SerialCom.com_StopBit = Stopbit.Text;// 停止位
            SerialCom.com_Verify = Parity.Text;// 校验位
            mCom.ComOpen();
        }

在这里插入图片描述
需要通过nuget 安装System.Text.Encoding.CodePages包
在这里插入图片描述
同时我们需要对引用的编码使用 Encoding.RegisterProvider 函数进行注册

System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

在这里插入图片描述
网上下载一个串口调试助手,设置相同的波特率、数据位、停止位、校验位。一个发送,一个接收效果如下:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JIAWEI_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值