【C#】--第二章:定时器和串口应用等

说明:初步接触C#用其作为上位机,因为工作和学习都是C,用的比较多是Linux系统。所以在学习C#时候。带有很多C语言的思想,但是要知道所有语言都是相通的。改变的仅仅是量没有达到所谓的质变,所以上手比较快速的。
平台:

window10

开发软件:Visual Studio 2019

下载:https://visualstudio.microsoft.com/zh-hans/vsz

个人使用C#原因仅仅是要写一个串口的上位机,通过串口调式嵌入式设备。

目录

一、定时器的介绍和应用
二、串口的介绍和应用
三、关于整体遍历TextBox(全局遍历)
四、获取系统时间

一、定时器的介绍和应用

直接省略之间的建立工程等步骤,直接进入到定时器介绍章节,首先要了解一下C#的定时器。
定时器:作为计算时间的一个组件(成员)。
简单的意思就是,你可以用这个定时器调一个或者多个时间,然后时间到了让系统做相应的事情,例如调一个一次性的闹钟,例如定时间去刷新查找一下有没有USB设备插进电脑,或者定时间就去访问一下外部的服务器。
定时器的组图:
在这里插入图片描述![在这里插入图片描述]在这里插入图片描述

当拖动这个定时器组件的时候,它会以在系统后的方式存在属于一种不可见的组件。这个组件比较特别,拖动之后一定要人为去开启定时器,并且设定指定的时间,然后时间到了就会执行对应的回调方法。

要想使用定时器先到属性这边将其打开,然后设定指定的时间。可以看到的是,
Enabled 是为假的 ,需要选择为真。
interval是定时的时间,级别为毫秒。

在这里插入图片描述
想要在时间到的时候进行触发,那么就需要到事件的里面设置对应的触发回调方法。其实里面就是只有一个时间,当时间到了就将这个时间触发。还可以选择当前主窗体的其他事件,这是一个可以选择的框。
当前我选择的就是定时器本身自带的回调方法。 然后在里面对一TextBox赋值。双击点进去里面,就可以看到系统为你自带一个回调方法。

在这里插入图片描述
简单的代码,要是想实现这个方法,你还要在主窗体里面拉动一个TextBox的组件。然后直接调用就可以了。就是在1S时间内,不断的自加1然后赋值给TextBox打印。

在这里插入图片描述

二、串口的介绍和应用

串口:不是熟悉嵌入式或者是搞过相对硬件的对串口可能会相对陌生,但是USB应该都知道,可以里面串口类似USB的接口一样的设备。简单的类似,两样东西本质差好多的,都是用于设备间有线通信的一种。但是现在都是USB转串口的比较多了。不过多解释请自行百度。

官方引用:
串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口

串口设备组件的图示:
在工具箱的位置和拉动到主窗体位置的。名字可以随意修改。
熟悉串口工具都知道,串口一般都需要设置几个参数。波特率,奇偶校验位,数据位,停止位。只有这个几个位都一一对齐了数据才能完整识别,如果以上参数有误差,还是可以接收到数据的,但是会错乱码。

在这里插入图片描述

下面查看一下属性的配置里面也会有对应的配置。要注意下面属性的整体参数配置是一套完整的串口协议的配置。除去上面重要的配置,其他的属性还是默认就行。不用深究其细节,有一些参数被抛弃

在这里插入图片描述

并且在设置串口数据的时候,一般是在主窗体和其他组件构成。

在这里插入图片描述里面的代码结构大改如下:

 string[] strCOM = System.IO.Ports.SerialPort.GetPortNames();
 if (strCOM == null) 
  {
            MessageBox.Show("本机没有插入设备  请检查串口设备","Exit");
            return}
 else{               
   try               
   {                  
	string uaerPort = cbUartPort.SelectedItem.ToString();
	serialPort.PortName = uaerPort;
	string strBaudRate = cbBaudrate.Text;       //波特率                    
	string strDataBits = cbDatabits.Text;       //数据位                    
	string strStopBits = cbStopBits.Text;       //停止位                    
	/***************** 以下串口配置参数都为默认 *****************/                    
	serialPort.BaudRate = Convert.ToInt32(strBaudRate); //波特率                    
	serialPort.DataBits = Convert.ToInt32(strDataBits);
	switch (cbStopBits.Text)                    
	{                        
		case "1":                           
		serialPort.StopBits = StopBits.One;                          		
		break;                       
		case "1.5":                            
		serialPort.StopBits = StopBits.OnePointFive;                            
		break;                       
		case "2":
		serialPort.StopBits = StopBits.Two;                            
		break;                        	
		default:
		MessageBox.Show("Error :参数不正确!", "ERROR");                            
		break;                    
	}  
       switch (cbCheck.Text)                             
	{                       
		case "无":                  
		serialPort.Parity = Parity.None;                            
		break;                       
		case "奇校验":                            
		serialPort.Parity = Parity.Odd;                            
		break;                      
		case "偶校验":                            
		serialPort.Parity = Parity.Even;                 
		break;                       
		default:                            
		MessageBox.Show("Error: 参数不正确", "ERROR");                           
		break;                    
	}
    }          
    catch (System.Exception ex)               
    {                  
	MessageBox.Show("Device open failend " + ex.Message, "Error");               
                 
    }            
}
/*粗糙的伪代码  请勿下重手*/

三、关于整体遍历TextBox(全局遍历)


方法一、主页使用。
		foreach(Control ctl in this.Controls)
		{
			 if (ctl is TextBox)
			 {
			 	 TextBox t = (TextBox)ctl;
			 	 if(t.Name == "Textbox1") 
			 	 {
			 	 	t.Text = "ABCD";
			 	 }
			 }
		}
		
方法二、新创建一个类文件得时候,将一些零散方法实现。不放在主页面。这样遍历全部得TextBox
       public void fotTextBox(Control.ControlCollection ct,TextBox OUT_WIN)
        {
            foreach (Control ctl in ct)
            {
                if (ctl is TextBox)
                {
                    TextBox t = (TextBox)ctl;
                    if (t.Name != "uint_FTY" && t.Name != "OuputWindos" && t.Name != "ReceiWindos")
                    {
                        UART_Dev.Write(t.Name + "=" +t.Text + "\r\n");
                        OUT_WIN.AppendText(t.Name + "=" + t.Text + "\r\n");
                    }
                }
                if (ctl.HasChildren)
                {
                    fotTextBox(ctl.Controls, OUT_WIN);
                }
            }
        }


调用这个方法:

XXXClass.fotTextBox(this.Controls, OUT_WIN);

四、获取系统时间

有时候像获取系统的当前日期和时间。避免到处查找,自己做一个笔记算了。

  public string  Heanld_GetSystemTimer()
    {
        string Timer = DateTime.Now.Year.ToString() + "-" 
                + DateTime.Now.Month.ToString().PadLeft(2, '0')
                + "-" + DateTime.Now.Day.ToString().PadLeft(2, '0') + "." 
                + DateTime.Now.Hour.ToString().PadLeft(2, '0')
                + "." + DateTime.Now.Minute.ToString().PadLeft(2, '0') 
                + "." + DateTime.Now.Second.ToString().PadLeft(2, '0');
      return Timer;
    }
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值