最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c# 實現(xiàn)簡單的串口通訊

 更新時間:2021年03月12日 09:03:55   作者:月井石  
這篇文章主要介紹了c# 如何實現(xiàn)簡單的串口通訊,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下

本文提供一個用C#實現(xiàn)串口通訊實例,親自編寫,親測可用!

開發(fā)環(huán)境:

VS2008+.net FrameWork3.5(實際上2.0應該也可以)

第一步

創(chuàng)建一個WinForm窗體,拉入一些界面元素

重點就是,圖中用紅框標出的,工具箱——組件——SerialPort,做.net串口通訊,這是必備控件

第二步

設置SerialPort控件屬性

用C#向串口發(fā)送數(shù)據(jù)沒什么特別的,就是調用SerialPort的Write方法往串口寫數(shù)據(jù)就行

但是從串口那里接收數(shù)據(jù)的方式就比較特別了

首先,需要在代碼里聲明一個特別的事件函數(shù)

private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
  {
   this.Invoke(new EventHandler(UpdateUIText));
  }

此函數(shù)是用來綁定到SerialPort控件的DataReceived事件

顧名思義,這個事件就是在接收到串口返回的數(shù)據(jù)時觸發(fā),里面就一句代碼

對這句代碼有興趣的可以私下再去研究,這里就不贅述了

總之,這句代碼的用途就是用來調動另一個函數(shù),對界面UI元素的值進行更新(當然你也可以在里面執(zhí)行其他操作)

private void UpdateUIText(object s, EventArgs e)
  {
   try
   {
    //必須要阻塞線程一段時間,以免在交易超時的情況下,由于read太快導致讀取不完整
    System.Threading.Thread.Sleep(500);
    string txt = serialPort.ReadExisting();
    txt_Received.Text = txt;
   }
   catch (Exception ex)
   {
    MessageBox.Show(ex.Message.ToString());
   }   
  }

第三步

開始寫邏輯代碼,廢話不多說,直接貼上來

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WinForm串口通訊
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
             
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            string[] ports = System.IO.Ports.SerialPort.GetPortNames();
            if (ports.Length == 0)
            {
                MessageBox.Show("本機沒有串口!");
            }
            Array.Sort(ports);
            serialPort.PortName = ports[0];//串口號COM3
            serialPort.BaudRate = 115200;//波特率
            serialPort.DataBits = 8;//數(shù)據(jù)位
            serialPort.StopBits = System.IO.Ports.StopBits.One;//停止位
            serialPort.Encoding = System.Text.Encoding.GetEncoding("GB2312");//此行非常重要,解決接收中文亂碼的問題
 
            // 打開串口
            try
            {
                serialPort.Open();
            }
            catch (Exception ex)
            {
                //捕獲到異常信息,創(chuàng)建一個新的comm對象,之前的不能用了。  
                serialPort = new System.IO.Ports.SerialPort();
                //將異常信息傳遞給用戶。  
                MessageBox.Show(ex.Message);
                return;
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {          
            string msgOrder = txt_Msg.Text;
            //MessageBox.Show(msgOrder);
            serialPort.Write(msgOrder);           
        }
 
 
        private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            this.Invoke(new EventHandler(UpdateUIText));
        }
 
        private void UpdateUIText(object s, EventArgs e)
        {
            try
            {
                //必須要阻塞線程一段時間,以免在交易超時的情況下,由于read太快導致讀取不完整
                System.Threading.Thread.Sleep(500);
                string txt = serialPort.ReadExisting();
                txt_Received.Text = txt;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
             
        }
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                if (serialPort != null && serialPort.IsOpen)
                {
                    serialPort.Close();
                    serialPort.Dispose();
                }
            }
            catch (Exception ex)
            {
                //將異常信息傳遞給用戶。  
                MessageBox.Show(ex.Message);
                return;
            }
        }
 
         
    }
}

至此,一個簡單完整的串口通訊就完成了,希望對你們有所幫助

以上就是c# 實現(xiàn)簡單的串口通訊的詳細內(nèi)容,更多關于c# 串口通訊的資料請關注腳本之家其它相關文章!

相關文章

最新評論

陇西县| 翁源县| 大石桥市| 山西省| 古蔺县| 河西区| 佛山市| 富宁县| 仁寿县| 鄂托克前旗| 南溪县| 肃北| 武城县| 庆安县| 禄丰县| 塘沽区| 廊坊市| 长春市| 太和县| 清涧县| 元阳县| 宾川县| 庆城县| 贵州省| 宝兴县| 都江堰市| 黔东| 方正县| 古交市| 和硕县| 普兰县| 库车县| 岚皋县| 禹州市| 侯马市| 周至县| 宜春市| 蕲春县| 长子县| 南岸区| 抚顺县|