24h購物| | PChome| 登入
2007-06-10 17:45:51 | 人氣168| 回應0 | 上一篇 | 下一篇
推薦 0 收藏 0 轉貼0 訂閱站台

【VB2005】RS232串列通訊

 

分類:網路相關
2007/05/11 21:55

表單佈局:
需要Timer1,menuStrip1,serialPort1及圖示中的TextBox(屬性:multiLine)
Button及Label

檔案下載:從Hinet下載



Public Class Form1
    Dim baud, baud1, baud2, baud3 As Integer
    Dim com, com1, com2 As String

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        com1 = "COM1"                               '各Port變數
        com2 = "COM2"
        baud1 = "19200"                             '各Baud變數
        baud2 = "9600"
        baud3 = "4800"
        Call InitSerialPort()                       '初始化
        lblSendMsg.Visible = False
        lblReceMsg.Visible = False
        Timer1.Enabled = True
    End Sub
    Private Sub InitSerialPort()
        SerialPort1.PortName = com1                 '內定COM1
        SerialPort1.BaudRate = baud2                '鮑率9600 bps
        SerialPort1.DataBits = 8                    '資料長度8 Bits
        SerialPort1.Parity = 0                      '不檢查同位元
        SerialPort1.StopBits = 1                    '結束位元 1
        SerialPort1.Open()                          '開啟
    End Sub


    Private Sub mnuEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEnd.Click
        End
    End Sub

    Private Sub mnuPORT_COM1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _
                                                                    mnuPORT_COM1.Click, mnuPORT_COM2.Click
        '桌上型電腦至少配有COM1,但不一定有COM2,若試圖開啟COM2,可能造成錯誤!"
        On Error GoTo err
        Dim portName As String
        '-------------------------------------------
        '功能表選項-串列埠選擇之顯示切換


        portName = sender.ToString
        Select Case portName
            Case "COM1"                             '當按下com1
                mnuPORT_COM1.Checked = True         'COM1打勾
                mnuPORT_COM2.Checked = False
                com = com1
            Case "COM2"
                mnuPORT_COM1.Checked = False
                mnuPORT_COM2.Checked = True         'COM2打勾
                com = com2
        End Select
        If SerialPort1.IsOpen Then
            SerialPort1.Close()             '關閉目前開啟的Port
        End If
        SerialPort1.PortName = com
        SerialPort1.Open()
err:
        MsgBox("無法開啟通訊埠COM2!,可能是沒有這個通訊埠或已開啟。", MsgBoxStyle.Critical, "開啟錯誤")
        SerialPort1.PortName = "COM1"
        SerialPort1.Open()
        mnuPORT_COM1.Checked = True
        mnuPORT_COM2.Checked = False

    End Sub

    Private Sub mnuBaud19200_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _
                                            mnuBaud19200.Click, mnuBaud9600.Click, mnuBaud4800.Click
        Dim item As String
        item = sender.ToString
        '功能表選項-鮑率選擇之顯示切換

        Select Case item
            Case baud1
                mnuBaud19200.Checked = True
                mnuBaud9600.Checked = False
                mnuBaud4800.Checked = False
            Case baud2
                mnuBaud19200.Checked = False
                mnuBaud9600.Checked = True
                mnuBaud4800.Checked = False
            Case baud3
                mnuBaud19200.Checked = False
                mnuBaud9600.Checked = False
                mnuBaud4800.Checked = True
            Case Else
                item = baud2
        End Select

        SerialPort1.BaudRate = item

    End Sub

   
    Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
        SerialPort1.WriteLine(txtSend.Text)
        txtSend.Text = Nothing
    End Sub

    Private Sub btnRecieve_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRecieve.Click
        On Error GoTo RECerr
        txtRecieve.Text = SerialPort1.ReadLine
RECerr:
        MsgBox("無法接收資料!請確定是否正確連線。", MsgBoxStyle.Critical, "接收錯誤")
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        If SerialPort1.CDHolding Then
            lblReceMsg.Text = "偵測到載波輸入,要求讀取!"
            lblReceMsg.Visible = Not lblReceMsg.Visible
        Else
            lblReceMsg.Visible = False
        End If
        If Len(txtSend.Text) <> 0 Then
            lblSendMsg.Text = "緩衝區有資料尚未傳送!"
            lblSendMsg.Visible = Not lblSendMsg.Visible
        Else
            lblSendMsg.Visible = False
        End If

    End Sub

End Class

 

台長: Kenny
人氣(168) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 教育學習(進修、留學、學術研究、教育概況) | 個人分類: 程式設計 |
此分類下一篇:RS232串列埠通訊
此分類上一篇:加密與解密

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文