最詳細的VC串口上位機編程_第1頁
最詳細的VC串口上位機編程_第2頁
最詳細的VC串口上位機編程_第3頁
最詳細的VC串口上位機編程_第4頁
最詳細的VC串口上位機編程_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、vc+串口上位機編程串口通信,mcu跟pc通信經常用到的一種通信方式,做界面、寫上位機程序的編程語言、編譯環境等不少,vb、c#、labview等等,我會的語言很少,c語言用得比較多,但是還沒有找到如何用c語言來寫串口通信上位機程序的資料,在圖書管理找到了用vc+編寫串口上位機的資料,參考書籍,用自己相當蹩腳的c+寫出了一個簡單的串口上位機程序,分享一下,體驗一下單片機和pc通信的樂趣。編譯環境:vc+6.0操作系統:vmware虛擬出來的windows xp程序實現功能:1、 pc初始化com1口,使用n81方式,波特率57600與單片機通信。pc的com口編號可以通過如下方式修改:當然也可

2、以通過上位機軟件編寫,通過按鈕來選擇com端口號,但是此次僅僅是簡單的例程,就沒有弄那么復雜了。com1口可用的話,會提示串口初始化完畢。否則會提示串口已經打開port already open,表示串口已經打開,被占用了。2、 點擊開始轉換,串口會向單片機發送0xaa,單片機串口中斷接收到0xaa后啟動adc轉換一次,并把轉換結果adcl、adch共兩個字節的結果發送至pc,pc進行數值轉換后在窗口里顯示。(見文章末尾圖)3、 為防止串口被一只占用,點擊關閉串口可以關閉com1,供其它程序使用,點擊后按鈕變為打開串口,點擊可重新打開com1。程序的編寫:1、 打開vc+6.0建立基于對話框的

3、mfc應用程序test, 2、 在項目中插入mscomm控件:工程->增加到工程->components and controls->雙擊registered activex controls->選擇microsoft communications control, version 6.0->insert,按默認值添加,你會發現多了個電話圖標,這是增加后串口通信控件。3、 刪除確認、取消和提示框,添加“電話”、進程、靜態文本、按鈕、編輯框,拖動添加的控件,根據喜好布局。4、 右擊編輯框edit選擇屬性,在樣式里設置,勾選多行、垂直滾動,其它可按默認值。右擊靜態文本

4、text選擇屬性,在常規設置里,修改標題。右擊按鈕pushbutton選擇屬性,在在常規設置里,修改標題。修改后界面如下,程序寫出來運行時“電話”標志會自動消失。5、 查看->建立類向導mfc classwizard->member viariable,選擇classname為ctestdlg的類,control id為mscomm1,雙擊它,為它添加控制變量m_comm1。類似的,選擇idc_button2添加控制變量m_serial。(建立類向導也可以右擊然后在彈出的快捷菜單里選擇建立類向導)至此,基本框架已經出來了,編譯后運行可以看到如下所示的界面。(組建->全部組件,

5、然后 組建->執行)6、 點擊左側的視圖窗口,可以在三種模式下切換,第三個是打開我們的源代碼窗口,第一個是類,第二個是窗體的資源視圖。選擇file view,展開test files->header files,打開testdlg.h,在全局變量下添加如下代碼,然后保存:int gllen;/定義整型標量gllen,用于記錄接收數據的個數cprogressctrl * pbar; /指向進度條的指針,用于操作進度條cstring strrxddata; /編輯框顯示的文本,記錄歷次轉換值7、 點擊recourse view,展開test recourses->dialog,雙

6、擊idd_test_dialog,編輯我們的主界面對話框。雙擊擊“電話”,彈出如下對話框,按確認鍵:vc會進入源碼編輯窗口,這個函數是用來處理串口事件的,當pc串口接收到數據時,會產生一個數據緩沖區有數據的消息事件,然后調用執行這個函數。添加如下代碼,進行數據處理,窗口更新等操作:variant variant1;/定義variant型變量,用于存放接收到的數據colesafearray safearray;/定義safearray型變量long len,k;/定義長整型變量len,kbyte rxdata2048;/定義byte型數組cstring stremp1,stremp2;/定義兩個

7、字符串if(m_comm1.getcommevent()=2) /判斷引起oncomm時間的原因/如果是接收到特定個字節數,則讀取接收到的數據variant1 = m_comm1.getinput();/把接收到的數據存放到variant型變量里safearray = variant1;/variant型變量轉換為colesafearray型變量len = safearray.getonedimsize();for(k=0;k<len;k+)safearray.getelement(&k,rxdata+k); /得到接接收到的數據放到byte型數組rxdata里for(k=0;k

8、<len;k+)byte bt = (*(unsigned char*)(rxdata+k); /讀取ad轉換的高字節if(k%2)=0)if(k+1)<len)gllen+;/全局的變量,對接收到的轉換結果的個數進行計算stremp2.format("第%d次轉換結果:",gllen);/顯示第幾次轉換int temp = bt*4+(*(unsigned char *)(rxdata+k+1)>>6); /高低字節合并成實際的轉換結果,注意轉換結果是左對齊 stremp1.format("%2.2f",(2.56*temp/1

9、024);/計算成實際電壓值setdlgitemtext(idc_static,("當前電壓值為: "+stremp1+" v"); /更新靜態文本控件pbar -> setpos(temp);/更新進度條的當前位置strrxddata += stremp2;/把新的數據放到全局的字符串里 strrxddata += stremp1;strrxddata += " vrn"/字符串加單位v后換行setdlgitemtext(idc_edit1,strrxddata);/更新文本控件的顯示這時重新編譯一下,看會不會有什么錯誤,出現

10、下面提示,可以選擇全部組建來清除。link : lnk4073: cannot create map for .ilk file; linking nonincrementally出現下面錯誤,請關閉運行的test.exe后重試。link : fatal error lnk1104: cannot open file "debug/test.exe"出現下面錯誤兩種錯誤,是由于空間編號問題引起的,當我們添加了編輯框或者“電話”后再添加,其編號自動加一,就會出現控件沒定義。z:vc+串口上位機testtestdlg.cpp(32) : error c2065: 'id

11、c_mscomm1' : undeclared identifierz:vc+串口上位機testtestdlg.cpp(139) : error c2065: 'idc_edit1' : undeclared identifier解決方法是,在recourseview里,打開窗體idd_test_dialog,右擊“電話”或者編輯框等其它出錯的控件,右擊選擇屬性,在常規里修改id,這里的程序,除button有1、2兩個之外,其它都是1全部組建編譯一下,看看有沒有錯誤,沒有錯誤就可以運行一下,可以看到界面更原來是一樣的。有錯誤就修改一下,省得弄多了,錯在哪里都不知道,查起

12、來麻煩。8、 在源碼編輯里,打開testdlg.cpp文件,進行窗口初始化函數的編寫。找到bool ctestdlg:oninitdialog()函數,在seticon(m_hicon, false); / set small icon/ todo: add extra initialization here后面添加如下初始化代碼:gllen = 0; /記錄轉換次數全局變量清零if(! m_comm1.getportopen()/判斷串口是否已經打開m_comm1.setcommport(1); /選擇串口號1m_comm1.setportopen(true); /打開串口m_comm1.s

13、etrthreshold(2); /收到兩個字節引發oncomm事件m_comm1.setinputmode(1);/輸入模式選為二進制m_comm1.setsettings("57600,n,8,1"); /設置串口參數,波特率57600,無奇偶校驗,1位停止位,8位數據位messagebox("串口初始化完畢","提示"); /提示串口成功初始化else messagebox("串口被占用","提示"); /如果已經打開串口,消息框提醒pbar = (cprogressctrl*)getdl

14、gitem(idc_progress1);/獲得指向idc_progress1的指針pbar -> setrange(0,1023);/設置進度條的范圍01023pbar -> setpos(0);/當前位置為0m_serial.setwindowtext("關閉串口");/按鈕顯示狀態改變可以看到,串口的參數等等都在在這里初始化的,可以根據自己的需要修改的,具體可以查看vc+里的詳細介紹,看看有哪些參數可以給我們修改來用。添加后再編譯一下,運行后可以看到多了一個串口初始化的提示信息窗口。至此,我們已經完成了主要的串口操作及界面,剩下的就是兩個按鈕的操作了。9、

15、 回到資源視圖的idd_test_dialog窗口,雙擊開始轉換按鈕,給它添加事件,點擊后pc通過串口發送0xaa出來,給單片機接收。添加如下代碼:cbytearray m_array; /定義字節數組m_array.removeall(); /字節數組清空m_array.setsize(1); /設定維數為1m_array.setat(0,0xaa); /給m_array0賦值0m_comm1.setoutput(colevariant(m_array);/由于setoutput函數的參數為variant型,必須強制轉換后才能發送同樣地,雙擊另外一個按鈕,給串口操作按鈕添加代碼,用于關閉或者

16、打開串口。添加如下代碼:if(! m_comm1.getportopen()/判斷串口是否已經打開 m_comm1.setportopen(true); /如果串口是關閉的,則打開串口m_serial.setwindowtext("關閉串口"); /按鈕顯示狀態改變elsem_comm1.setportopen(false); /如果已經打開串口,則關閉串口m_serial.setwindowtext("打開串口");/按鈕顯示狀態改變至此,一個簡單的串口上位機軟件編寫完成了,可以用來測試下,通過單片機往串口里發送數據,可以看到主窗口的的轉換結果,已經進

17、度條顯示電壓值變化。要把這個程序拿出來用,只需把vc+串口上位機testrelease的test.exe拷出來用就行。release可以在編譯窗口里選擇win32 release,然后重新編譯一下就出來了。參考書籍:陳冬云、杜敬倉、任柯燕等,atmega128單片機原理與開發指導,2005,機械工業出版社。and performance test copies of the record. if necessary, review should be carried out; 4) for spring hangers (included simple spring, hangers and

18、constant support hangers) it should also be recognized as setting and locking of loads. 5) check the surface quality, folded layering and without cracks, rust and other defects. 5) after completion of the test and control drawing number one by one, by series baled. color alloy steel parts, the parts

19、 marking installation location and rotation about the direction you want. 7.3.14. hangers installation 7.3.14.1 hanger layout a. a clear design of hanger should be installed strictly in accordance with the drawings and designs shall not be installed wrong, missing, etc. b. own arrangement of piping

20、support and hanger set and selection should be based on comprehensive analysis of general layout of piping systems; cold installation of steam pipe with particular attention reserved for compensation of thermal expansion displacement and orientation. c. support systems should be rational to withstand pipe loads, static load and incidental load; reasonable piping displacement; guaranteed under various conditions, stress are within the allowed range. strength, stiffness, and meet requirements to prevent vibration and soot

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論