上位機軟件開發(fā)實例(上位機軟件開發(fā)教程)
本篇文章給大家談談上位機軟件開發(fā)實例,以及上位機軟件開發(fā)教程對應的知識點,希望對各位有所幫助,不要忘了收藏本站喔。
本文目錄一覽:
- 1、vb串口通信程序?qū)嵗?/a>
- 2、如何用c語言開發(fā)自己的上位機軟件
- 3、藍牙上位機app有哪些
- 4、【上下位機通信】:下位機(STM32)通過網(wǎng)口(DM9000之類的.)向上位機PC發(fā)送數(shù)據(jù)。求上位機例子程序~
- 5、利用電腦做上位機開發(fā)一個軟件,用單片機做下位機。在上位機上點擊軟件上的按鈕能使單片機輸出一路I/O口
If?Not?MSComm1.PortOpen?Then
??MSComm1.CommPort?=?7?'串口為7
??MSComm1.Settings?=?"9600,n,8,1"
??MSComm1.InBufferCount?=?0?'清除接收緩沖區(qū)
??MSComm1.OutBufferCount?=?0?'清除發(fā)送緩沖區(qū)
??MSComm1.InputMode?=?comInputModeBinary?'二進制接收
??MSComm1.InputLen?=?0?'讀取接收緩沖區(qū)的所有字符
??MSComm1.PortOpen?=?True??'打開串口
??MSComm1.RTSEnable?=?False?'置為發(fā)送狀態(tài)
End?If
Dim?pu()?As?Byte
Dim?strdata??As?String
Dim?crc_js()?As?Byte
ReDim?pu(7)??'這個數(shù)組是8位的查詢指令
pu(0)?=?"H00"?'溫度計地址
pu(1)?=?"H03"?'查詢指令
pu(2)?=?"H00"?'2、3為溫度計地址
pu(3)?=?"H00"?'2、3為溫度計地址
pu(4)?=?"H00"?'4、5為讀取寄存器長度
pu(5)?=?"H02"?'4、5為讀取寄存器長度
pu(6)?=?"HC5"?'6、7為CRC校驗碼?因為我們不知道設備的CRC校驗規(guī)則所以用測試軟件產(chǎn)生的校驗碼
pu(7)?=?"HDA"?'6、7為CRC校驗碼
MSComm1.Output?=?pu
'不做任何事情,僅僅允許其它應用程序處理它們的事件。
DoEvents
MSComm1.InBufferCount?=?0?'清除接收緩沖區(qū)
MSComm1.RThreshold?=?9?'所要接收的數(shù)據(jù)長度,我們通過COM檢測精靈看到了回傳數(shù)據(jù)一共是9字節(jié)
MSComm1.RTSEnable?=?True?'轉(zhuǎn)為接收狀態(tài)
End?Sub
Private?Sub?Command2_Click()
Timer1.Enabled?=?False
End?Sub
Private?Sub?Form_Unload(Cancel?As?Integer)
????If?MSComm1.PortOpen?Then
????????MSComm1.PortOpen?=?False??'關閉串口
????End?If
????Timer1.Enabled?=?False
End?Sub
Private?Sub?MSComm1_OnComm()?'COM事件
????Dim?PA()?As?Byte
????Dim?PB?As?String
Select?Case?MSComm1.CommEvent
?Case?comEvReceive
????????????MSComm1.InputLen?=?0?'讀取接收緩沖區(qū)的所有字符
????????????PB?=?MSComm1.Input
????????????PA()?=?PB
????????????For?i?=?0?To?UBound(PA())
????????????????'Print?"PA("??i??")";?PA(i)
????????????????If?Len(Hex(PA(i)))?=?1?Then
????????????????????strdata?=?strdata??"0"??Hex(PA(i))
????????????????Else
????????????????????strdata?=?strdata??Hex(PA(i))
????????????????End?If
????????????Next
????????????'回傳的數(shù)據(jù)串:000304012600000AC4,這9字節(jié)根據(jù)通訊協(xié)議我們進行拆分
????????????'00為協(xié)議內(nèi)回傳機號,03為讀命令,04為返回的數(shù)據(jù)長度?0126?為我要的溫度數(shù)據(jù)為十六進制表達,下面我進行數(shù)據(jù)處理
????????????wd?=?CLng("H"??Left(Right(strdata,?12),?4))?/?10??"℃"???'根據(jù)通訊協(xié)議換算成溫度
????????????Text1?=?Text1??vbCrLf??strdata??"??"??wd
????????????strdata?=?""
???MSComm1.PortOpen?=?False??'關閉串口
?End?Select
End?Sub
Private?Sub?Timer1_Timer()
Call?Command1_Click
End?Sub
這是我的測試結果。
下面是通訊協(xié)議
這個是我的軟件用檢測精靈檢測的結果
如何用c語言開發(fā)自己的上位機軟件
一般開發(fā)上位機軟件都是帶圖形界面的。C也能做出圖形界面的軟件,但是開發(fā)周期太長也不實用。所以最好還是需要會一些其他語言,例如C++,C#,Java這些做圖形界面開發(fā)周期短的語言。既然會C,那么學習其他語言也只是一個熟悉語法的過程。所以很快就能上手,因為語言都是相通的嘛??梢蚤_闊自己的視野去學習一下新的語言。不是說只會C有什么弊端,只是想說會的多才會知道語言之間的優(yōu)劣。
藍牙上位機app有哪些
做安卓手機APP通常使用高端大氣的Android Studio,開發(fā)語言是Java,該開發(fā)IDE就是體積大
學習成本高,入手慢,這里給大家推薦一款國產(chǎn)的軟件,體積小,運行和編譯速度快。最重要的是編程語言是中文
這個軟件就是E4A.
本次我將向大家介紹如何使用E4A開發(fā)BLE藍牙手機上位機APP。
當然,該軟件自帶了豐富的例子,也提供了一個BLE例子,大家可以借鑒。
由于沒有提供各種庫的說明文檔和幫助文件,學這個軟件可能有經(jīng)過一段摸索,這里我將向大家介紹我在開發(fā)這個軟件中
獲得的經(jīng)驗。
中文編程語言:易語言,采用中文作為關鍵字,但是編程的語法和思想和C語言是類似的
為了方便理解,這里我結合單片機開發(fā)的思路簡單介紹一下
變量要聲明類型
對象操作的函數(shù)稱為:方法
對象可觸發(fā)的中斷函數(shù)稱為:事件
對象可設置的參數(shù)稱為:屬性
-----------------------------------------------------------------------------------------
好接下來介紹 BLE藍牙庫
BLE(Bluetooth Low Energe)低功耗藍牙設備主要用于智能穿戴和物聯(lián)網(wǎng)。
BLE藍牙類庫,包含兩種操作:方法和事件
方法:
初始化
置可被發(fā)現(xiàn)
開始搜索
停止搜索
連接設備
斷開連接
釋放資源
是否可讀
是否可寫
是否可通知
讀取數(shù)據(jù)
寫入數(shù)據(jù)
事件:
創(chuàng)建完畢
發(fā)現(xiàn)設備
信號強度改變
發(fā)現(xiàn)服務
連接狀態(tài)改變
讀取數(shù)據(jù)完畢
通道數(shù)據(jù)改變
由于不存在可見的對象,因此藍牙沒有屬性設置。
了解方法和事件的用法可通過左側類庫目錄選中對應的條目,在下面的提示信息中查看
例如選中BLE藍牙庫的方法 初始化 條目后:
方法:初始化()為 邏輯型
分類:BLE藍牙類庫---BLE藍牙
注釋:初始化BLE藍牙設備,成功返回真,失敗返回假,BLE藍牙需要安卓4.3以上系統(tǒng)的支持。
另外 事件類似中斷函數(shù),因此在代碼中沒有先后順序,可以根據(jù)易讀的排列順序進行排版。
所有的動作均屬于觸發(fā)的事件,因此,方法通常在事件里面進行調(diào)用。
自己創(chuàng)建的函數(shù),需要自己實現(xiàn)該函數(shù)的具體過程,因此函數(shù)在這里稱為:過程
不過我們這里做BLE藍牙APP可以不用到過程。
好了,基本的概念已經(jīng)介紹了,我們可以開始整了。
-----------------------------------------------------------------------------------------
第一步,先根據(jù)我們的需要完成可視化的組件布局,并給添加的組件起上一個跟操作相關的名字,在組件的屬性對話框設置,同時可以設置組件的其他相關屬性。
?
第二步,使用中需要完成單擊響應的,我們可以在設計區(qū)直接雙擊組件,即可自動在代碼區(qū)生成一個空的事件(類似單片機開發(fā)中的中斷處理函數(shù),用于響應單擊事件),例如四個方向鍵的單擊事件。以下代碼我已經(jīng)填充了單擊后執(zhí)行的藍牙方法:寫入數(shù)據(jù),即發(fā)數(shù)據(jù)給連接到手機的藍牙模塊。
事件 按鈕上.被單擊()
BLE藍牙1.寫入數(shù)據(jù)(服務UUID,通道UUID,文本到字節(jié)("上\n","GBK"))
結束 事件
事件 按鈕下.被單擊()
BLE藍牙1.寫入數(shù)據(jù)(服務UUID,通道UUID,文本到字節(jié)("下\n","GBK"))
結束 事件
事件 按鈕左.被單擊()
BLE藍牙1.寫入數(shù)據(jù)(服務UUID,通道UUID,文本到字節(jié)("左\n","GBK"))
結束 事件
事件 按鈕右.被單擊()
BLE藍牙1.寫入數(shù)據(jù)(服務UUID,通道UUID,文本到字節(jié)("右\n","GBK"))
結束 事件
第三步,完成主窗口的創(chuàng)建工作,因為我們要使用藍牙庫,所以我們可以在APP啟動后就申請使用藍牙的權利,并初始化一個藍牙對象。
另外就是要實現(xiàn)軟件退出的操作,所以我們可以設置一個退出的按鈕,實現(xiàn)結束程序。內(nèi)容如下。
事件 主窗口.創(chuàng)建完畢()
'安卓6.0以上的系統(tǒng)需要動態(tài)申請權限,否則app可能無法正常運行
如果 權限操作1.取系統(tǒng)版本號()=23 則
權限操作1.申請全部權限()
結束 如果
變量 結果 為 邏輯型
結果 = BLE藍牙1.初始化()
彈出提示("初始化結果:" 結果)
結束 事件
事件 權限操作1.申請完畢(權限數(shù)組 為 文本型(),申請結果 為 整數(shù)型())
'可以把需要特殊權限的代碼寫在此處,當申請權限成功后再執(zhí)行相關代碼
結束 事件
事件 圖片框_返回.被單擊()
結束程序()
結束 事件
第四步,實現(xiàn)藍牙設備的搜索,從搜索到的藍牙信號中選出我們要的那個,另外在搜索的過程中顯示信號的強度
通過按鈕單擊實現(xiàn)搜索與停止搜索,并設定搜索時間為10秒,10秒后自動停止搜索。
通過發(fā)現(xiàn)設備事件,讀取搜到的設備,并匹配名稱是否為自己要找的信號。這里我內(nèi)置了信號名稱,也可以通過一個輸入框,實現(xiàn)敏感信號名稱的修改
如果發(fā)現(xiàn)的設備名稱是指定名字的信號,就將名稱和地址寫入到列表框的項目,同時給項目做個編號和標記,方便后面取出
使用信號強度改變事件讀取搜索中的信號強度,我們只讀取感興趣的那個名字的信號。
當列表中出現(xiàn)我們感興趣的那個信號名稱和地址時候,我們可以單擊列表中的該項,觸發(fā)連接設備,實現(xiàn)手機與藍牙模塊的連接。
同時通過顏色和文字提示是否連接上或者斷開了。這可以使用BLE藍牙對象的連接狀態(tài)改變事件實現(xiàn)。
事件 搜索按鈕.被單擊()
如果 搜索按鈕.標題 = "開始搜索" 則
位置傳感器1.開始監(jiān)測()
BLE藍牙1.開始搜索()
時鐘1.時鐘周期 = 10*1000
搜索按鈕.標題 = "停止搜索"
否則
BLE藍牙1.停止搜索()
時鐘1.時鐘周期 = 0
搜索按鈕.標題 = "開始搜索"
結束 如果
結束 事件
事件 時鐘1.周期事件()
BLE藍牙1.停止搜索()
搜索按鈕.標題 = "開始搜索"
時鐘1.時鐘周期 = 0
結束 事件
事件 BLE藍牙1.發(fā)現(xiàn)設備(名稱 為 文本型,地址 為 文本型,MajorID 為 整數(shù)型,MinorID 為 整數(shù)型,配對狀態(tài) 為 整數(shù)型)
如果 名稱 = "BT24" 則
'屏蔽掉沒有名稱的藍牙設備
彈出提示("發(fā)現(xiàn)設備")
列表框1.添加項目("名稱:" 名稱 "\n地址:" 地址)
列表框1.置項目標記(列表框1.取項目數(shù)()-1,地址)
結束 如果
結束 事件
事件 BLE藍牙1.信號強度改變(名稱 為 文本型,地址 為 文本型,信號強度 為 整數(shù)型)
如果 名稱 = "BT24" 則
列表框1.置項目內(nèi)容(0,"名稱:" 名稱 "\n地址:" 地址 "\n信號:" 信號強度)
結束 如果
結束 事件
事件 列表框1.表項被單擊(項目索引 為 整數(shù)型)
設備地址 = 列表框1.取項目標記(項目索引)
BLE藍牙1.連接設備(設備地址)
'BLE藍牙1.連接設備(列表框1.取項目標記(項目索引))
彈出提示("正在連接")
連接狀態(tài).標題 = "正在連接"
結束 事件
事件 BLE藍牙1.連接狀態(tài)改變(狀態(tài) 為 整數(shù)型)
如果 狀態(tài) = 1 則
連接狀態(tài).標題 = "已連接"
連接狀態(tài).背景顏色 = 綠色
否則
連接狀態(tài).標題 = "已斷開"
連接狀態(tài).背景顏色 = 紅色
結束 如果
結束 事件
第五步,通過服務提供的通道進行數(shù)據(jù)傳輸
連接上藍牙模塊后,就要建立通信的通道了,這需要通過服務來完成,因此我們要對連接的藍牙模塊索取服務的操作
這稱為發(fā)現(xiàn)服務 事件,由于藍牙模塊中有多個服務可選,我們要找到我們可以進行通信的那個,這個通常在模塊的手冊也給了相關的短ID
稱為服務UUID,每個服務又含有若干個通道UUID。因為模塊的出廠設定,只有能用的那個服務才能通信,其他的服務是不可完全可讀寫的
在產(chǎn)生BLE藍牙的發(fā)現(xiàn)服務事件后,會自動獲取到服務的所有信心,裝載到一個名字叫:服務信息的集合里,這個集合類型你就當類似C語言結構體數(shù)組的東西。
接下來為了驗證每個服務是否可讀寫,就要一個一個測試,這類似,從一個結構體數(shù)組先一個一個讀出來數(shù)組的元素,在數(shù)組元素的結構體里取結構體成員,
這就需要用到兩層的for循環(huán)了,E4A 的for循環(huán)用一對 判斷循環(huán)首---判斷循環(huán)尾,進行包圍。為了方便記,你可以給循環(huán)的變量起名字:i,j
然后就是測試對應的服務與通道是否可讀,可寫,可通知。如果三者都滿足,那就是我們要找的通道,實際上,在多組的服務中,只有廠家指定的那組是
滿足這三個條件的。其他的一般只能滿足可讀這一條。
找到合適的服務與通道后,想實現(xiàn)數(shù)據(jù)的接收,要執(zhí)行 讀取數(shù)據(jù)的方法,如果直接讀,那么系統(tǒng)沒有準備好呢,會導致讀失敗,后面就容易卡死。
這里就像初始化完單片機,要給系統(tǒng)以反應時間,等待個幾百毫秒,然后再進行后面的操作一樣。
這里就要用到定時器了,找到服務與通道后執(zhí)行一個1000ms定時器的啟動操作,在定時器計數(shù)滿了之后的事件中執(zhí)行讀取數(shù)據(jù)的方法,
同時接收框顯示服務和通道的ID,并關閉定時器。
事件 BLE藍牙1.發(fā)現(xiàn)服務(服務信息 為 集合)
如果 服務信息.取項目總數(shù)() 0 則
退出
結束 如果
變量 i 為 整數(shù)型
變量 j 為 整數(shù)型
變量 信息數(shù)組 為 文本型()
i = 0
判斷循環(huán)首 i 服務信息.取項目總數(shù)()
信息數(shù)組 = 服務信息.取項目(i)
j = 0
判斷循環(huán)首 j 取數(shù)組成員數(shù)(信息數(shù)組)
如果 j 0 則
如果 BLE藍牙1.是否可讀(信息數(shù)組(0),信息數(shù)組(j)) = 真 且 BLE藍牙1.是否可寫(信息數(shù)組(0),信息數(shù)組(j)) =真 且 BLE藍牙1.是否可通知(信息數(shù)組(0),信息數(shù)組(j)) =真 則
服務UUID = 信息數(shù)組(0)
通道UUID = 信息數(shù)組(j)
'BLE藍牙1.讀取數(shù)據(jù)(服務UUID,通道UUID)
'接收框.內(nèi)容 = 服務UUID "\n" 通道UUID
時鐘2.時鐘周期 = 1000
結束 如果
結束 如果
j = j + 1
判斷循環(huán)尾
i = i + 1
判斷循環(huán)尾
結束 事件
事件 時鐘2.周期事件()
BLE藍牙1.讀取數(shù)據(jù)(服務UUID,通道UUID)
接收框.內(nèi)容 = 服務UUID "\n" 通道UUID
時鐘2.時鐘周期 = 0
結束 事件
執(zhí)行完讀取操作后,系統(tǒng)會在通道內(nèi)有數(shù)據(jù)發(fā)送來的時候觸發(fā)通道數(shù)據(jù)改變的事件,在該事件中我們讀取數(shù)據(jù),另外也會觸發(fā)讀取完畢的事件
發(fā)送數(shù)據(jù)是通過單擊發(fā)送按鈕觸發(fā)寫入數(shù)據(jù)方法實現(xiàn)的,當完成寫入后可通過寫入數(shù)據(jù)完畢事件知道是否發(fā)送成功。
事件 BLE藍牙1.讀取數(shù)據(jù)完畢(結果 為 整數(shù)型,服務UUID 為 文本型,通道UUID 為 文本型,數(shù)據(jù) 為 字節(jié)型())
如果 結果 = 1 則
彈出提示("讀取數(shù)據(jù)成功:" 通道UUID "\n數(shù)據(jù):" 字節(jié)集到十六進制(數(shù)據(jù)))
否則
彈出提示("讀取數(shù)據(jù)失?。? 通道UUID "\n數(shù)據(jù):" 字節(jié)集到十六進制(數(shù)據(jù)))
結束 如果
結束 事件
事件 BLE藍牙1.通道數(shù)據(jù)改變(服務UUID 為 文本型,通道UUID 為 文本型,數(shù)據(jù) 為 字節(jié)型())
彈出提示("通道數(shù)據(jù)改變" 通道UUID "\n數(shù)據(jù):" 字節(jié)集到十六進制(數(shù)據(jù)))
接收框.加入文本(字節(jié)到文本(數(shù)據(jù),"GBK"))
結束 事件
事件 發(fā)送按鈕.被單擊()
BLE藍牙1.寫入數(shù)據(jù)(服務UUID,通道UUID,文本到字節(jié)(發(fā)送框.內(nèi)容,"GBK"))
結束 事件
事件 BLE藍牙1.寫入數(shù)據(jù)完畢(結果 為 整數(shù)型)
如果 結果 = 1 則
彈出提示("寫入數(shù)據(jù)成功")
否則
彈出提示("寫入數(shù)據(jù)失敗")
結束 如果
結束 事件
其他的操作可在以下完整代碼中查看
變量 服務UUID 為 文本型
變量 通道UUID 為 文本型
變量 設備地址 為 文本型
事件 主窗口.創(chuàng)建完畢()
'安卓6.0以上的系統(tǒng)需要動態(tài)申請權限,否則app可能無法正常運行
如果 權限操作1.取系統(tǒng)版本號()=23 則
權限操作1.申請全部權限()
結束 如果
變量 結果 為 邏輯型
結果 = BLE藍牙1.初始化()
彈出提示("初始化結果:" 結果)
結束 事件
事件 權限操作1.申請完畢(權限數(shù)組 為 文本型(),申請結果 為 整數(shù)型())
'可以把需要特殊權限的代碼寫在此處,當申請權限成功后再執(zhí)行相關代碼
結束 事件
事件 圖片框_返回.被單擊()
結束程序()
結束 事件
事件 搜索按鈕.被單擊()
如果 搜索按鈕.標題 = "開始搜索" 則
位置傳感器1.開始監(jiān)測()
BLE藍牙1.開始搜索()
時鐘1.時鐘周期 = 10*1000
搜索按鈕.標題 = "停止搜索"
否則
BLE藍牙1.停止搜索()
時鐘1.時鐘周期 = 0
搜索按鈕.標題 = "開始搜索"
結束 如果
結束 事件
事件 時鐘1.周期事件()
BLE藍牙1.停止搜索()
搜索按鈕.標題 = "開始搜索"
時鐘1.時鐘周期 = 0
【上下位機通信】:下位機(STM32)通過網(wǎng)口(DM9000之類的.)向上位機PC發(fā)送數(shù)據(jù)。求上位機例子程序~
?用?socket? 類? udp? tcp? ? ? ?我這?給你個? 最簡單的?例子? udp
服務器端
Imports?System.Net.Sockets
Imports?System.Net
Module?socketsever
? Sub?main()
? ? ? startserver()
? ? End?Sub
? Private?Sub?startserver()
? ? ? '創(chuàng)建服務器端的socket
? ? ? Dim?sServer?As?New?Socket(AddressFamily.InterNetwork,?SocketType.Dgram,?ProtocolType.Udp)
? ? ? Dim?myip?As?IPAddress
? ? ? '制訂本地回路的ip地址
? ? ? myip?=?IPAddress.Parse("10.13.115.105")
? ? ? '設置服務器端口號
? ? ? Dim?sServerep?As?New?IPEndPoint(myip,?2001)
? ? ? '設置客戶端的端口號
? ? ? Dim?clientep?As?New?IPEndPoint(myip,?2002)
? ? ? '將端口與socket綁定
? ? ? sServer.Bind(sServerep)
? ? ? While?True
? ? ? ? ? Try
? ? ? ? ? ? ? Dim?bytes(100)?As?Byte
? ? ? ? ? ? ? '等待客戶端的請求
? ? ? ? ? ? ? sServer.ReceiveFrom(bytes,?clientep)
? ? ? ? ? ? ? Dim?str?As?String?=?System.Text.Encoding.ASCII.GetString(bytes)
? ? ? ? ? ? ? '將字符轉(zhuǎn)化成大寫
? ? ? ? ? ? ? str?=?str.ToUpper
? ? ? ? ? ? ? bytes?=?System.Text.Encoding.ASCII.GetBytes(str)
? ? ? ? ? ? ? '返回結果
? ? ? ? ? ? ? sServer.SendTo(bytes,?clientep)
? ? ? ? ? Catch?e?As?SocketException
? ? ? ? ? End?Try
? ? ? End?While
? End?Sub
End?Module
客戶端
界面? 和程序
Imports?System.Net.Sockets
Imports?System.Net
Public?Class?Form1
? Inherits?System.Windows.Forms.Form
? Private?Sub?bsend_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?bsend.Click
? ? ? '創(chuàng)建客戶端的socket
? ? ? Dim?cClient?As?New?Socket(AddressFamily.InterNetwork,?SocketType.Dgram,?ProtocolType.Udp)
? ? ? '指定本地回路的ip地址
? ? ? Dim?myip,?myip1?As?IPAddress
? ? ? myip?=?IPAddress.Parse("10.13.115.105")
? ? ? myip1?=?IPAddress.Parse("10.13.115.136")
? ? ? '設置服務器端口號
? ? ? Dim?Serverep?As?New?IPEndPoint(myip1,?2001)
? ? ? '設置客戶端的端口號
? ? ? Dim?clientep?As?New?IPEndPoint(myip,?2002)
? ? ? '將端口與socket綁定
? ? ? cClient.Bind(clientep)
? ? ? Try
? ? ? ? ? Dim?str?As?String?=?Textinput.Text
? ? ? ? ? Dim?bytes()?As?Byte?=?System.Text.Encoding.ASCII.GetBytes(str)
? ? ? ? ? '向服務器發(fā)出請求
? ? ? ? ? cClient.SendTo(bytes,?Serverep)
? ? ? ? ? Dim?bytes2(100)?As?Byte
? ? ? ? ? '接受服務器的響應結果
? ? ? ? ? cClient.ReceiveFrom(bytes2,?Serverep)
? ? ? ? ? str?=?System.Text.Encoding.ASCII.GetString(bytes2)
? ? ? ? ? '將結果顯示在文本框中
? ? ? ? ? Textdisplay.Text?=?Textdisplay.Text??vbNewLine??str
? ? ? Catch?er?As?SocketException
? ? ? ? ? MsgBox(er.ToString)
? ? ? End?Try
? ? ? cClient.Close()
? End?Sub
End?Class
利用電腦做上位機開發(fā)一個軟件,用單片機做下位機。在上位機上點擊軟件上的按鈕能使單片機輸出一路I/O口
主要涉及到單片機基礎知識,重點是串口通信,上位機可以考慮vc和.net,這兩種都可以。.net使用c#語言,感覺比較好上手,我也可以給你點視頻教程,一學就會。
關于上位機軟件開發(fā)實例和上位機軟件開發(fā)教程的介紹到此就結束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。