|
這是我第一次發(fā)帖子,發(fā)的不好多多擔(dān)待!這學(xué)期學(xué)校開(kāi)了單片機(jī)的課程,我從小就喜歡搗鼓一些小玩意,家里的電器設(shè)備基本上都拆過(guò),有些能裝上去,有些則裝不上去。上了大學(xué),經(jīng)濟(jì)條件寬裕了,加上網(wǎng)絡(luò)資源日漸豐富,更加喜歡玩電子了。沒(méi)有單片機(jī)課之前,玩的是Arduino.但是Arduino 根本學(xué)不到什么東西,里面用的函數(shù)庫(kù)文件都是別人封裝好的,直接拿來(lái)用罷了。而51單片機(jī)是從零基礎(chǔ)開(kāi)始的,相當(dāng)于造輪子,雖然也是別人研究出來(lái)的,但更接近于底層原理,學(xué)起來(lái)更加系統(tǒng)。由于有基礎(chǔ),所以并不是太難。調(diào)試單片機(jī)時(shí)用到串口調(diào)試軟件,發(fā)現(xiàn)網(wǎng)上有好多。就想著自己能不能也寫一個(gè)軟件。然后就自學(xué)了vb.雖然這個(gè)開(kāi)發(fā)環(huán)境是98年出版的。但是不得不說(shuō),微軟的東西確實(shí)很強(qiáng)大,兼容性沒(méi)話說(shuō)。于是就開(kāi)始了我的編程之路。
1.開(kāi)發(fā)環(huán)境搭建
網(wǎng)上下載VB6.0的安裝包,建議企業(yè)版!安裝軟件應(yīng)該沒(méi)啥問(wèn)題,裝完打開(kāi)我們的VB6.0
2.軟件界面設(shè)計(jì)
其實(shí)很簡(jiǎn)單,直接把左邊的控件拖放到主窗體里就行了,加一些組框可以使界面更整潔
3.代碼編寫
- Dim fasongcishu, jieshoucishu As Integer
- Dim fasongzijie, jieshouzijie, jieshouzijie1, fasongzijie1 As Byte
- Private Sub Command5_Click()
- List1.Clear
- StatusBar1.Panels(4).Text = "接收次數(shù):"
- StatusBar1.Panels(3).Text = "接收字節(jié):"
- StatusBar1.Panels(2).Text = "發(fā)送次數(shù):"
- StatusBar1.Panels(1).Text = "發(fā)送字節(jié):"
- End Sub
- Private Sub Form_Load()
- If Option1.Value = True Then
- MSComm1.InputMode = comInputModeText
- End If
- If Option2.Value = True Then
- MSComm1.InputMode = comInputModeBinary
- End If
- GetAvailablePorts
- Combo1.Text = "COM1"
- End Sub
- Private Sub Command1_Click()
- If MSComm1.PortOpen = True Then
- MsgBox "串口已經(jīng)打開(kāi)"
- Else
- Dim bote, shuju, tingzhi, jiaoyan, Seting As String
- bote = Combo2.Text
- shuju = Combo3.Text
- tingzhi = Combo4.Text
- jiaoyan = Combo5.Text
- Seting = bote & "," & jiaoyan & "," & shuju & "," & tingzhi
- MSComm1.CommPort = Split(Combo1.Text, "COM")(1)
- MSComm1.Settings = Seting
- MSComm1.OutBufferCount = 0
- MSComm1.InBufferCount = 0
- MSComm1.InputMode = 0
- MSComm1.InputLen = 0
- MSComm1.PortOpen = True
- Label6.Caption = "串口已經(jīng)連接"
- Shape1.BackColor = RGB(0, 200, 0)
- End If
- End Sub
- Private Sub Command2_Click()
- If MSComm1.PortOpen = False Then
- MsgBox "串口尚未打開(kāi)"
- Else
- MSComm1.PortOpen = False
- Label6.Caption = "串口已經(jīng)斷開(kāi)"
- Shape1.BackColor = RGB(200, 0, 0)
- End If
- End Sub
- Private Sub Command3_Click()
- If MSComm1.PortOpen = True Then
- MsgBox "串口已經(jīng)打開(kāi),請(qǐng)斷開(kāi)連接再刷新"
- Else
- GetAvailablePorts
- Combo1.Text = "COM1"
- End If
- End Sub
- Private Sub Command4_Click()
- If MSComm1.PortOpen = False Then
- MsgBox "串口尚未連接"
- Else
- If Option1.Value = True Then
- MSComm1.InputMode = comInputModeText
- End If
- If Option2.Value = True Then
- MSComm1.InputMode = comInputModeBinary
- End If
- Me.MSComm1.Output = Text1.Text
- List1.AddItem ("來(lái)自計(jì)算機(jī):" & Text1.Text)
- fasongzijie1 = LenB(StrConv(Text1.Text, vbFromUnicode))
- fasongzijie = fasongzijie + fasongzijie1
- StatusBar1.Panels(1).Text = "發(fā)送字節(jié):" & fasongzijie
- fasongcishu = fasongcishu + 1
- StatusBar1.Panels(2).Text = "發(fā)送次數(shù):" & fasongcishu
- Text1.Text = ""
- StatusBar1.Panels(5).Text = "發(fā)送成功!"
- End If
- MSComm1.OutBufferCount = 0
- MSComm1.InBufferCount = 0
- MSComm1.InputMode = 1
- MSComm1.InputLen = 0
- End Sub
- Private Sub GetAvailablePorts()
- Dim i As Integer
- Dim blnNoPort As Boolean
- With Combo1
- .Clear
- '嘗試打開(kāi)COM1到COM16
- For i = 1 To 16
- MSComm1.CommPort = i
- '打開(kāi)錯(cuò)誤陷阱
- On Error Resume Next
- MSComm1.PortOpen = True
- '如果串口被成功打開(kāi),則這個(gè)串口存在
- If Err.Number = 0 Then
- .AddItem "COM" & i
- .ItemData(.NewIndex) = i
- End If
- Err.Clear
- ' 關(guān)閉已打開(kāi)的串口
- If MSComm1.PortOpen Then MSComm1.PortOpen = False
- ' 關(guān)閉錯(cuò)誤陷阱
- On Error GoTo 0
- Next
- blnNoPort = .ListCount = 0
- End With
- If blnNoPort Then
- MsgBox "計(jì)算機(jī)上沒(méi)有串行通信接口"
- End If
- End Sub
-
- Private Sub MSComm1_OnComm()
- Dim CommData As String
- Dim BytReceived() As Byte
- Dim strBuff As String
- Dim i As Integer
- Select Case MSComm1.CommEvent '事件發(fā)生
- Case 2
- Cls
- MSComm1.InputLen = 0 '讀入緩沖區(qū)全部?jī)?nèi)容
- strBuff = MSComm1.Input '讀入到緩沖區(qū)
- If strBuff = "" Then
- Else
- If MSComm1.InputMode = comInputModeBinary Then
- BytReceived() = strBuff '如果是二進(jìn)制接收模式則進(jìn)行數(shù)據(jù)處理,否則直接顯示字符串
- For i = 0 To UBound(BytReceived)
- If Len(Hex(BytReceived(i))) = 1 Then
- strData = strData & "0" & Hex(BytReceived(i)) & " " '如果只有一個(gè)字符,則前補(bǔ)0,如F顯示0F,最后補(bǔ)空格
- Else '方便顯示觀察如: 00 0F FE
- strData = strData & Hex(BytReceived(i)) & " "
- End If
- Next
- CommData = strData
- strData = ""
- Else
- CommData = strBuff
- End If
-
- List1.AddItem ("來(lái)自單片機(jī):" & CommData)
- jieshoucishu = jieshoucishu + 1
- StatusBar1.Panels(4).Text = "接收次數(shù):" & jieshoucishu
- jieshouzijie1 = LenB(StrConv(CommData, vbFromUnicode))
- jieshouzijie = jieshouzijie + jieshouzijie1
- StatusBar1.Panels(3).Text = "接收字節(jié):" & jieshouzijie
- End If
- End Select
- End Sub
復(fù)制代碼
4.和另外一個(gè)串口調(diào)試軟件進(jìn)行連接通訊
窗體小一點(diǎn)的是我的軟件,后面的是某國(guó)產(chǎn)軟件。對(duì)了,在同一臺(tái)電腦上調(diào)試時(shí)需要虛擬串口軟件
COM2和COM3就是虛擬串口生成的端口。
分別對(duì)應(yīng)我們軟件里的串口COM2和COM3
差不多就是這些了,單片機(jī)里設(shè)置好了串口通訊的參數(shù),連接電腦,用我的軟件就可以調(diào)試了。最簡(jiǎn)單的可以控制LED 的亮滅。上位機(jī)軟件就是這樣開(kāi)發(fā)出來(lái)的,怎么樣,你Get到了嗎?
|
評(píng)分
-
查看全部評(píng)分
|