admin管理员组文章数量:1543692
在单片机项目开发中,上位机也是一个很重要的部分,主要用于数据显示(波形、温度等)、用户控制(LED,继电器等),下位机(单片机)与 上位机之间要进行数据通信的两种方式都是基于串口的:
USB转串口 —— 上位机和下位机通过USB转串口连接线直接相连进行数据交互;
串口转WIFI(ESP8266) —— 上位机和下位机基于TCP/IP协议通过WIFI传输数据;
串口转蓝牙(HC-06)—— 不多用,暂不介绍;
上位机软软件开发主要包括以下两种:
1、Windows上位机(EXE可执行程序)
在Windows上,最早用VB语言开发,后来由于C++的发展,采用MFC开发,近几年,微软发布了基于.NET框架的面向对象语言C#,更加稳定安全,再配合微软强大的VS进行开发,效率奇高;
另外,如果想要在Linux上跨平台运行,可以选用Qt;如果想要更加丰富好看的数据显示界面,可以选用Labview开发;
2、Android上位机(APP)
在Android操作系统上,主要采用Java语言,使用WIFI或者蓝牙基于TCP/IP协议传输数据,利用Android Studio开发;
在此,我们主要介绍如何通过VS + C#开发电脑上位机,其它上位机的开发暂且不论。
注:VS下载与安装参考这篇较详细的博客
https://blog.csdn/qq_36556893/article/details/79430133
上一篇大致了解了一下单片机实际项目开发中上位机开发部分的内容以及VS下载与安装,按照编程惯例,接下来就是“Hello,World!”
1、新建C#项目工程
首先选择新建Windows窗体应用(.NET Framework),然后选择项目保存位置,填写项目名称,这里因为我们不需要用git进行版本管理,所以不用新建GIT存储库;
框架是指框架,4以及4以下的.NET框架可以在xp上运行,4以上可以在win7/8/10上运行,鉴于当前大多数操作系统都是win7或win10,选择4.5版本。
2、窗体介绍及代码分析
这里我们双击窗体界面,这也是VS的特性,双击一个控件,就会进入对应代码文件部分,这些代码全由VS在生成项目时自动生成,下面进行详细的解释:
1 /*filename:Form1.cs*/
2 //使用命名空间
3 using System;
4 using System.Collections.Generic;
5 using System.ComponentModel;
6 using System.Data;
7 using System.Drawing;
8 using System.Linq;
9 using System.Text;
10 using System.Windows.Forms;
11
12 //用户项目工程自定义命名空间HelloWorld
13 namespace HelloWorld
14 {
15 //定义了一个名称为Form1的公共类,并且在定义类的同时创建了一个这个类的对象,名为Form
16 //partial关键字
17 public partial class Form1 : Form
18 {
19 //与类同名的构造方法
20 public Form1()
21 {
22 InitializeComponent();
23 }
24 //用户自定义方法,窗体加载时由Form对象调用
25 private void Form1_Load(object sender, EventArgs e)
26 {
27 }
28 }
29 }
命名空间(namespace):在C#中用命名空间将很多类的属性及其方法进行封装供调用,类似C语言中将变量和函数封装成一个个.h文件,调用的时候只需要#include "filepath + filename"就可以使用,比如刚开始时用关键字using声明了一些所需要的系统命名空间(line1-10);然后采用关键字namespace来自定义一个用户工程所需的命名空间HelloWorld,在我们定义的这个命名空间里就可以定义一些类和方法来进行下一步的实现;
类(class):C#是一门面向对象的编程语言,所以最基本的就是类和对象,对象的特征是具有属性(C语言中称为变量)和方法(C语言中称为函数),然后我们定义一个类来描述这个对象的特征,注意:这个时候定义的类不是真实存在的,所以不会分配内存空间,当我们用所定义的这个类去创建一个类的对象,这个对象是真实存在的,它会占用内存空间,比如在这个工程中定义了一个名称为Form1的公共类,并且在定义类的同时创建了一个这个类的对象,名为Form;
方法:前面已经说过,在面向对象编程中是没有变量和函数的,所有的函数都被封装在类中,属于对象的方法,最基本的是类的构造方法,该方法与类名同名,在用类创建一个具体对象时自动调用,不可缺少,比如Form1( );另外一种是自己定义的用户方法,比如该类中的Form1_Load()方法,就是在初始化窗口时,通过具体对象Form调用:Form.Form1_Load( );
访问修饰符:用来控制类、属性、方法的访问权限,常用有5个,默认私有,不能被外部访问;
私有的private,公共的public,受保护的protected,内部的internal,受保护内部的protect internal;
这里有一个重点,在定义Form1类的时候含有一个关键字partial,这里就不得不说C#语言设计一个重要的特性了,能作为大多数人开发上位机的首选,C#有一个特性就是设计的时候界面与后台分离,但是类名相同,首先看一下工程文件结构:
可以看到,Form1.cs文件下面包含了另一个Form1.Designer.cs文件,再打开Form1.Designer.cs这个文件,是不是很惊奇,和前面一模一样,再次定义了一个命名空间HelloWorld和Form1类,这个部分类中定义了我们使用的控件、事件委托以及如Dispose方法等。因为这里面的代码都是自动生成的,因此设计成了一个部分类。最关键的一点,这里类也是用partial关键字修饰的,可以看到,Partial是局部类型的意思,允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中,用partial定义的类可以在多个地方被定义,最后C#编译器编译时会将这些类当作一个类来处理;
1 /*@filename:Form1.Designer.cs */
2
3 namespace HelloWorld
4 {
5 partial class Form1
6 {
7 ///
8 /// 必需的设计器变量。
9 ///
10 private System.ComponentModel.IContainer components = null;
11
12 ///
13 /// 清理所有正在使用的资源。
14 ///
15 /// 如果应释放托管资源,为 true;否则为 false。
16 protected override void Dispose(bool disposing)
17 {
18 if (disposing && (components != null))
19 {
20 components.Dispose();
21 }
22 base.Dispose(disposing);
23 }
24
25 #region Windows 窗体设计器生成的代码
26
27 ///
28 /// 设计器支持所需的方法 - 不要修改
29 /// 使用代码编辑器修改此方法的内容。
30 ///
31 private void InitializeComponent()
32 {
33 this.SuspendLayout();
34 //
35 // Form1
36 //
37 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
38 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
39 this.ClientSize = new System.Drawing.Size(418, 331);
40 this.Name = "Form1";
41 this.Text = "Form1";
42 this.Load += new System.EventHandler(this.Form1_Load);
43 this.ResumeLayout(false);
44
45 }
46 #endregion
47 }
48 }
Main: 一切程序都有入口主函数main,C#也是如此,在Program.cs文件中定义了Program类,该类中拥有主函数main( ), 在main函数中,第三行代码是一切的开始,调用Form1类的构造函数,创建一个Form对象,一切由此开始,代码如下:
1 /* @filename: Program.cs */
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Windows.Forms;
6
7 namespace HelloWorld
8 {
9 static class Program
10 {
11 ///
12 /// 应用程序的主入口点。
13 ///
14 [STAThread]
15 static void Main()
16 {
17 Application.EnableVisualStyles();
18 Application.SetCompatibleTextRenderingDefault(false);
19 Application.Run(new Form1()); //调用Form1类的构造函数,创建一个Fo
版权声明:本文标题:c#串口缓存字节数_c#串口编程(转) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1727102844a1097935.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论