C#串口通訊程式SerialPort類

來源:互聯網
上載者:User

上篇文章主要是關於串口通訊中單片機部分的程式編寫。在實際應用中,常常還要有上位機的配合才能完成工作。寫串口通訊的上位機程式,常常應用的程式設計語言有C++,VB,C#等。VB沒有學過,C++編寫視窗應用程式接觸也不多,暑假自己看了一些C#的書,也有了一些瞭解,所以就用C#寫視窗應用程式,用來作上位PC機的串口通訊程式。在寫的過程中,主要參見了這篇部落格http://blog.csdn.net/wuyazhe/article/details/5598945,感謝這位博主。

C#中的串口通訊編程主要用到了SerialPort類,它位於命名空間System.IO.Ports下,所以在程式開始要包含這個命名空間。

先上運行時的視窗介面,很簡陋,也只實現了收發的基本的功能,但是可以在這個上面擴充。

由於注釋寫的比較詳細,所以下面的程式一般只貼出了代碼。

 

成員變數有兩個,一個是C#提供的SerialPort類,是物理上的串口在程式中的映射。

另一個為可變字串類型StringBuilder,用於字串的處理。

         //串口類        private SerialPort comm = new SerialPort();        //可變字串類,用於儲存接收到的字元        private StringBuilder Builder = new StringBuilder();

 

Form視窗的Load事件回應程式法

  //註冊視窗初始化事件        private void Form1_Load_1(object sender, EventArgs e)        {            #region 初始化下拉串口名稱列表框            //擷取單片機與電腦串連的連接埠號碼            string[] ports = SerialPort.GetPortNames();               Array.Sort(ports);                        //將其顯示到comboPorName控制項中去            comboPortName.Items.AddRange(ports);            comboPortName.SelectedIndex = comboPortName.Items.Count > 0 ? 0 : -1;                       //傳輸速率預設為9600bps,可以通過下拉選項進行調節            comboPortBaudrate.SelectedIndex = comboPortBaudrate.Items.IndexOf("9600");#endregion                        //下面這句還不太懂,先照著做            comm.NewLine = "\r\n";            //與設定RTS訊號有關,雖不明,但覺厲,照著做            comm.RtsEnable = true;            //註冊對串口接收資料的回應程式法            comm.DataReceived += new SerialDataReceivedEventHandler(comm_DataReceived);               }

接收資料的回應程式法

 void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)        {            //擷取接收緩衝區中資料的位元組數            int n = comm.BytesToRead;            byte[] buf = new byte[n];                        //將資料讀入buf數組中            comm.Read(buf, 0, n);            //先清空            Builder.Clear();            //因為要訪問ui資源,所以需要使用invoke方式同步ui            this.Invoke((EventHandler)(delegate            {                //委託方法在txGet控制項中顯示接收到的字元                Builder.Append(Encoding.ASCII.GetString(buf));                this.txGet.AppendText(Builder.ToString());            }));        }

“開啟串口”按鈕的滑鼠點擊相應方法:

    //開啟按鈕的事件響應        private void BtnOpen_Click(object sender, EventArgs e)        {            //如果串口已經是開啟狀態,則此按鈕關閉串口            if (this.serialPort.IsOpen)            {                this.serialPort.Close();            }             //串口關閉狀態,開啟之            else            {                //設定好連接埠名和傳輸速率                comm.PortName = this.comboPortName.Text;                comm.BaudRate = int.Parse(this.comboPortBaudrate.Text);                                try                {                    comm.Open();                }                //開啟失敗,拋出異常                catch(Exception ex)                    {                        comm = new SerialPort();                        MessageBox.Show(ex.Message);                    }            }            //按鈕顯示文字轉變            this.BtnOpen.Text = comm.IsOpen ? "關閉串口" : "開啟串口";                        //發送按鈕功能使能            this.BtnSend.Enabled = comm.IsOpen;        }

點擊“發送”按鈕將資料送入IO的資料緩衝區中,代碼如下:

  //點擊發送按鈕事件的回應程式法        private void BtnSend_Click(object sender, EventArgs e)        {                //調用封裝的wirte方法,將txSend中的文本發送到IO的緩衝區,傳給單片機            comm.Write(this.txSend.Text);        }

 

如此這樣,加上UI介面上控制項的添加,就可以實現一個簡單的串口通訊程式了。
最後附上VS2010開發環境下的完整代碼,猛擊此處

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.