C#學習與上位機開發之串口通信模塊介紹

来源:http://www.cnblogs.com/flyingjun/archive/2017/04/22/6748272.html
-Advertisement-
Play Games

串口通信模塊(SerialPort) (1)模塊簡介 使用此模塊需要首先包含一些文件IO相關文件 using System.IO;using System.IO.Ports; 圖標如下圖1所示,將其拖拽到面板。會顯示在最下方,其參數有如下: BaudRate 波特率 DataBits 數據位 Par... ...


 

串口通信模塊(SerialPort)

(1)模塊簡介

使用此模塊需要首先包含一些文件IO相關文件

using System.IO;
using System.IO.Ports;

 

圖標如下圖1所示,將其拖拽到面板。會顯示在最下方,其參數有如下:

BaudRate 波特率
DataBits 數據位
Parity 奇偶校驗位
PortName 埠號
StopBits 停止位
ByteToRead 獲取輸入緩衝區的
IsOpen 獲取是否開啟串口
   
   

 

以上是我們做串口通信上位機需要用到的(如圖2所示)。

image          image 

     圖1   串口模塊圖                             圖2    串口模塊參數圖

串口通信模塊的事件有三個,如圖3所示。

DataReceived     串口接收函數

ErrorReceived     串口數據接收錯誤

PinChanged       串口號發生改變

雙擊即可建立函數。

image

常見的方法還有

方 法 名 稱

說  明

Open 打開串口.
Close 關閉串口
Read 從SerialPort 輸入緩衝區讀
ReadByte 從SerialPort 輸入緩衝區讀一個位元組
ReadChar 從SerialPort 輸入緩衝區讀一個字元
Write 寫入到輸出緩衝寄存器

(2)代碼編寫

image

1、串口初始化函數

初始化函數以按鍵點擊函數為起點。需要將各控制項的參數幅值給串口各項參數,具體代碼如下:

private void button1_Click(object sender, EventArgs e)
        {
           // if(Button_on == 1)
            if (!serialPort1.IsOpen)//如果串口是開
            {
                serialPort1.PortName = comboBox1.Text;
                serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text, 10);
                float f = Convert.ToSingle(comboBox3.Text.Trim());
                if (f == 0)//設置停止位
                    serialPort1.StopBits = StopBits.None;
                else if (f == 1.5)
                    serialPort1.StopBits = StopBits.OnePointFive;
                else if (f == 1)
                    serialPort1.StopBits = StopBits.One;
                else if (f == 2)
                    serialPort1.StopBits = StopBits.Two;
                else
                    serialPort1.StopBits = StopBits.One;
                //設置數據位
                serialPort1.DataBits = Convert.ToInt32(comboBox4.Text.Trim());
                //設置奇偶校驗位
                string s = comboBox5.Text.Trim();
                if (s.CompareTo("無") == 0)
                    serialPort1.Parity = Parity.None;
                else if (s.CompareTo("奇校驗") == 0)
                    serialPort1.Parity = Parity.Odd;
                else if (s.CompareTo("偶校驗") == 0)
                    serialPort1.Parity = Parity.Even;
                else
                    serialPort1.Parity = Parity.None;
                try
                {
                    serialPort1.Open();     //打開串口
                    button1.Text = "關閉串口";
                    comboBox1.Enabled = false;//關閉使能
                    comboBox2.Enabled = false;
                    comboBox3.Enabled = false;
                    comboBox4.Enabled = false;
                    comboBox5.Enabled = false;
                }
                catch
                {
                    MessageBox.Show("串口打開失敗!");
                }
            }
            else//如果串口是打開的則將其關閉
            {
                serialPort1.Close();
                button1.Text = "打開串口";
                comboBox1.Enabled = true;//使能配置
                comboBox2.Enabled = true;
                comboBox3.Enabled = true;
                comboBox4.Enabled = true;
                comboBox5.Enabled = true;
            }          

        }

 

2、串口寫函數

寫函數主要用於發送數據,用到serialPort.write函數

本例以滑鼠點擊按鍵觸發寫函數,代碼如下:

 

private void button_send_Click(object sender, EventArgs e)
        {//發送數據
            if(serialPort1.IsOpen)
            {//如果串口開啟
                if (textBox2.Text.Trim() != "")//如果框內不為空則
                {
                    serialPort1.Write(textBox2.Text.Trim());//寫數據
                }
                else
                {
                    MessageBox.Show("發送框沒有數據");
                }
            }
            else
            {
                MessageBox.Show("串口未打開");
            }
        }

3、串口讀函數

串口讀函數主要用於讀取串口緩衝區的數據。

此處用到post_DataReceived事件

這裡增減了兩種顯示方式:

1十六進位顯示    2字元串顯示

private void post_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
           
            if (!radioButton1.Checked)
            {
                string str = serialPort1.ReadExisting();//字元串方式讀
                textBox_receive.AppendText(str);

            }
            else
            {
                byte data;
                data = (byte)serialPort1.ReadByte();
                string str = Convert.ToString(data, 16).ToUpper();//
                textBox_receive.AppendText("0x" + (str.Length == 1 ? "0" + str : str) + "  ");

            }
        }

 

 

未完待續…下一節介紹(C#學習與上位機開發之串口協議接收數據)

 

源碼可以訪問我GITHUB下載

https://github.com/Harryjun/Csha_demo

 

參考博客如下:

1、C#中顯現串口通信SerialPort類

http://www.cnblogs.com/BookCode/p/5583853.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 當目前為止呢,個人對Mysql的函數沒有進行過統一的學習使用,都是用到了再去學習。而近日開始學習Linux了,所以為了防止這段時期結束後,將此階段期間遇到的Mysql函數遺忘,開始在此對其做一個簡單的記錄。 昨天下班前朋友呢讓幫忙看一個sql,是關於生日提醒的,實際應用中呢是要實現提前一天提醒用戶生 ...
  • 查看快速恢復區參數 SYS@Riven hey~J->show parameter recover NAME TYPE VALUE db_recovery_file_dest string db_recovery_file_dest_size big integer db_unrecoverable ...
  • 本文將介紹如何用Qemu虛擬機玩樹莓派最新系統(截止2017年4月10日) ...
  • 雖然我是搞asp.net的 但是十分欣賞php,php有很多開源的博客程式 比如大名鼎鼎的Wordpress.還有各種獨立博客大牛使用的z-blog,以及短小精悍的emblog。 wordpress臃腫不堪,pass!其他的不喜歡,所以就選擇國人開發的typecho開源博客系統,優點就是簡單好用,支... ...
  • 一、實驗目標 1、本次實驗在“Linux基礎網路搭建實驗”的基礎上,在外網虛擬機上搭建WEB服務,並分別配置外網和網關的防火牆規則,使內網能夠訪問WEB服務 2、Linux基礎網路搭建實驗:http://www.cnblogs.com/liaoyuanyang/p/6749416.html 3、實驗 ...
  • 一、實驗目標 利用3台虛擬機,搭建vmnet2和vmnet3兩個host-only網路,實現兩個網路的互聯 二、實驗環境 eth0:192.168.0.254/24 eth1:202.3.4.254/24 三、實驗步驟 1、添加VMnet2和VMnet3,並取消其DHCP功能 2、內網虛擬機的設置 ...
  • 首先要下載一個wps的bantu版的安裝包(.deb文件)網址:http://community.wps.cn/download/ 這裡推薦一個安裝工具:gdebi (受阿笨貓<qq1531072114>指點,非本人發現,謝謝!) 終端:sudo apt install gdebi 下載完wps的. ...
  • 一、問題描述 虛擬機克隆後,由於網卡信息不一致的問題,導致不能上網或者執行“sercice network restart”命令失敗 二、原因分析 由於克隆後的系統,系統只是修改了虛擬機的名字和MAC等,併在/etc/udev/rules.d/70-persistent-net.rules文件中增加 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...