資源描述:
《最詳細的vc串口上位機編程》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、VC++串口上位機編程串口通信,MCU跟PC通信經(jīng)常用到的一種通信方式,做界面、寫上位機程序的編程語言、編譯環(huán)境等不少,VB、C#、LABVIEW等等,我會的語言很少,C語言用得比較多,但是還沒有找到如何用C語言來寫串口通信上位機程序的資料,在圖書管理找到了用VC++編寫串口上位機的資料,參考書籍,用自己相當蹩腳的C++寫出了一個簡單的串口上位機程序,分享一下,體驗一下單片機和PC通信的樂趣。編譯環(huán)境:VC++6.0操作系統(tǒng):VMWare虛擬出來的WindowsXP程序?qū)崿F(xiàn)功能:1、PC初始化C
2、OM1口,使用n81方式,波特率57600與單片機通信。PC的COM口編號可以通過如下方式修改:當然也可以通過上位機軟件編寫,通過按鈕來選擇COM端口號,但是此次僅僅是簡單的例程,就沒有弄那么復(fù)雜了。COM1口可用的話,會提示串口初始化完畢。否則會提示串口已經(jīng)打開Portalreadyopen,表示串口已經(jīng)打開,被占用了。2、點擊開始轉(zhuǎn)換,串口會向單片機發(fā)送0xaa,單片機串口中斷接收到0xaa后啟動ADC轉(zhuǎn)換一次,并把轉(zhuǎn)換結(jié)果ADCL、ADCH共兩個字節(jié)的結(jié)果發(fā)送至PC,PC進行數(shù)值轉(zhuǎn)換后在窗
3、口里顯示。(見文章末尾圖)3、為防止串口被一只占用,點擊關(guān)閉串口可以關(guān)閉COM1,供其它程序使用,點擊后按鈕變?yōu)榇蜷_串口,點擊可重新打開COM1。程序的編寫:1、打開VC++6.0建立基于對話框的MFC應(yīng)用程序Test,2、在項目中插入MSComm控件:工程->增加到工程->ComponentsandControls->雙擊RegisteredActiveXControls->選擇MicrosoftCommunicationsControl,version6.0->Insert,按默認值添加,你
4、會發(fā)現(xiàn)多了個電話圖標,這是增加后串口通信控件。3、刪除確認、取消和提示框,添加“電話”、進程、靜態(tài)文本、按鈕、編輯框,拖動添加的控件,根據(jù)喜好布局。4、右擊編輯框Edit選擇屬性,在樣式里設(shè)置,勾選多行、垂直滾動,其它可按默認值。右擊靜態(tài)文本Text選擇屬性,在常規(guī)設(shè)置里,修改標題。右擊按鈕PushButton選擇屬性,在在常規(guī)設(shè)置里,修改標題。修改后界面如下,程序?qū)懗鰜磉\行時“電話”標志會自動消失。5、查看->建立類向?qū)FCClassWizard->MemberViariable,選擇Cla
5、ssName為CTestDlg的類,ControlID為MSCOMM1,雙擊它,為它添加控制變量m_comm1。類似的,選擇IDC_BUTTON2添加控制變量m_serial。(建立類向?qū)б部梢杂覔羧缓笤趶棾龅目旖莶藛卫镞x擇建立類向?qū)В┲链耍究蚣芤呀?jīng)出來了,編譯后運行可以看到如下所示的界面。(組建->全部組件,然后組建->執(zhí)行)6、點擊左側(cè)的視圖窗口,可以在三種模式下切換,第三個是打開我們的源代碼窗口,第一個是類,第二個是窗體的資源視圖。選擇FileView,展開testfiles->Hea
6、derFiles,打開testDlg.h,在全局變量下添加如下代碼,然后保存:intgllen;//定義整型標量gllen,用于記錄接收數(shù)據(jù)的個數(shù)CProgressCtrl*pbar;//指向進度條的指針,用于操作進度條CStringstrRXDdata;//編輯框顯示的文本,記錄歷次轉(zhuǎn)換值7、點擊RecourseView,展開testrecourses->Dialog,雙擊IDD_TEST_DIALOG,編輯我們的主界面對話框。雙擊擊“電話”,彈出如下對話框,按確認鍵:VC會進入源碼編輯窗口,
7、這個函數(shù)是用來處理串口事件的,當PC串口接收到數(shù)據(jù)時,會產(chǎn)生一個數(shù)據(jù)緩沖區(qū)有數(shù)據(jù)的消息事件,然后調(diào)用執(zhí)行這個函數(shù)。添加如下代碼,進行數(shù)據(jù)處理,窗口更新等操作:VARIANTvariant1;//定義VARIANT型變量,用于存放接收到的數(shù)據(jù)COleSafeArraysafearray;//定義safearray型變量LONGlen,k;//定義長整型變量len,kBYTErxdata[2048];//定義BYTE型數(shù)組CStringstremp1,stremp2;//定義兩個字符串if(m_co
8、mm1.GetCommEvent()==2)//判斷引起OnComm時間的原因{//如果是接收到特定個字節(jié)數(shù),則讀取接收到的數(shù)據(jù)variant1=m_comm1.GetInput();//把接收到的數(shù)據(jù)存放到VARIANT型變量里safearray=variant1;//VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量len=safearray.GetOneDimSize();for(k=0;k