




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、31w當我們在用 VS 進行串口編程時,在打開串口前,經常想知道當前 PC 存在多少個串口, 哪些串口可用?哪些串口已經打開了,最好是在一個 Combo Box 中列表系統(tǒng)當前所有可用 的串口以供選擇,然而如何獲取系統(tǒng)當前可用的串口有哪些呢?這里介紹的方法也是最簡單也是最笨的一種方法,即一個一個去試,試完了就知道了。至于 還有沒有其它更好的方法,暫不在本文所討論的范圍之內。一個在對話框的 OnlnitDialog 函數(shù)內做如下操作:1初始化時檢測串口1BOOL Ctbox_debug_viewDlg:OnInitDialog()23CDialogEx:OnInitDialog();44/ Ad
2、d About menu item to system menu6/ IDM_ABOUTBOX must be in the system command range.8ASSERT(IDM_ABOUTBOX & OxFFFO) = IDM_ABOUTBOX);9ASSERT(ID卜LABOUTBOX AppendMenu(MF_SEPARATOR);21pSysMenu-AppendMenu(MF_STRINGJIDM_ABOUTBOX, strAboutMenu);22232425/Set the icon for this dialogThe framework does thi
3、s automatically26/when the applications main window is not a dialog27Setlcon(m_hlcon TRUE);/ Set big icon28Setlcon(m_hlcon,F(xiàn)ALSE);/ Set small icon29w30/TOGO: Add extra initialization hereW32 AddCom();/向紹r忝加串口設備m_CombolPortSetCurSel(O);34/.35AddCom 函數(shù)如下左義:void Ctbox_debug_viewDlg:AddCom(void)uicounte
4、r = portseGetSize();/如果個數(shù)大于0if(uicounter 0)545556EnumerateSerialPorts 函數(shù)如下:57void Ctbox_debug_viewDlg:EnumerateSerialPorts(CUIntArray& ports, CUIntArray& portse, CUIntArray&portsu)5859晴除串口數(shù)組內容60portsRemoveAll();61portseRemoveAll();62portsuRemoveAll();63因為至多有255個串口 所以依次檢査各串口是否存在3637383940
5、41EnumerateSerialPortsCportsportseportsu); unsignedshort uicounter;unsigned short uisetcom;CString str;4243獲取可用串口個數(shù)4445464748/初始化串口列表框495051for(int i=0; iuicounter; i+)5253uisetcom = portseElementAt(i);str.Format(_T(COM%d ”)uisetcom);m_CombolPortAddString(str);w64/如果能打開某一串口,或打開串口不成功.但返回的是ERROR_ACCES
6、S_DENIED錯誤信息.65都認為串口存在,只不過后者表明串口已經被占用66否則串口不存在67for (int i=l; iSetWindowText (_T(“打開”);106ShouInfo(_T(H關閉串 口成功! ”);107m_OpenStatus =false;108return;109110UpdateData(TRUE);111mOpenStatus =true;112當前端口號113int curPort =portse.ElementAt(m_CombolPort.GetCurSel();114mmscomm. put_CommPort(curPort); /端口115m
7、_mscomm. put_InBufferSize(1024);/接收緩沖區(qū)116m_mscomm.put_OutBufferSize(1024);/發(fā)送緩沖區(qū)119117m_mscomm. put_InputLen(0);/*,zi BU接收區(qū)數(shù)據(jù)長度為0.表示全部瀆取118m_mscommput_InputMode(1.);/以-進制方弋謨數(shù)抑:119m_mscomm. put_RThreshold( 1); / /沖區(qū)有1個及1個以上字符時,將引發(fā)接收數(shù)押;的OnComm爭件123124125120/波特率121DWORD baudrate;122switch(m_CombolBaudr
8、ate.GetCurSel()123124case 0:125baudrate=115200;126break;127case 1:128baudrate=9600;129break;130default:131ASSERT(FALSE);132break;133134CString setting;w135setting. Format (_T(”d,8J1M)baudrate);136m_mscomm.put_Settings(setting/_T(M115200n8?lM)/);/波特率,無校驗,8個 數(shù)據(jù)位,1個停止1位143137m_mscommput_PortOpen (TRUE)
9、; /打開串口138GetDlgltem (IDC_BT_OPEN) - SetWindowText(_T(M關閉“);139ShoMlnfo(_T(u打開串 口成功! ”);147140 3串口熱拔插時檢測串口這里主要利用 Cwnd 的 ON_WM_DEVICECHANGE 消息來處理。ON_WM_DEVICECHANGE 消息在 VS2010 中好像只能通過手動來添加,反正我沒找到可 以通過對話的形式來添加的,后續(xù)有知道的兄臺麻煩告知我一下。因此,首先得手動添加 ON_WM_DEVICECHANGE 消息:第一步:在消息映射 BEGIN_MESSAGE_MAP(Ctbox_debug_vi
10、ewDlg, CDialogEx)中添力 II:141 ON_WM_DEVICECHANGE()第二步:在頭文件類的立義中添加函數(shù)聲明:142 afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD dwData);第三步:實現(xiàn)函數(shù)143 BOOL Ctbox_debug_viewDlg:OnDeviceChange(UINT nEventTypeDWORD dwData)144 145/DEV_BROADCAST_DEVICEINTERFACE* dbd = (DEV_BROADCAST_DEVICEINTERFACE*)dwData;146sw
11、itch (nEventType)147148caseDBTDEVICEREMOVECOMPLETE:/移除設備149caseDBT_DEVICEARRIVAL:/添加設備W150RefreshCom();/刷新組合框的內容151break;160161default:162break;163164164return TRUE;166167 RefreshCom 函數(shù)如下:16S void Ctbox_debug_viewDlg:RefreshCom(void)169 170int count =m_CombolPort.GetCount();171171for(int i=0;icount;
12、i+)172173m_CombolPort.DeleteString(count -1 -i);174175AddCom();176m_CombolPort.SetCurSel(0);177 第四步:在 cpp 文件中包含頭文件178 #include 這是因為 DEV_BROADCAST_DEVICEINTERFACE,DBT_DEVICEREMOVECOMPLETE, DBT_DEVICEARRIVAL 這幾個東東在頭文件 Dbt.h 中泄義的,這樣才能編譯通過。而 AddCom 函數(shù)已經在之前講到過,回過頭去看看。這里的思想是通過檢測到設備的插入和拔出時刷新組合框的內容,是通過重新測試串口的方 式來實現(xiàn)的。列:需要注總的是,當插入和拔出設備時,系統(tǒng)會檢測
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園家委會工作計劃
- 計劃運營發(fā)展前景
- 糖業(yè)年度培訓計劃
- 福特項目開發(fā)計劃
- 人教版高中物理選擇性必修第二冊電磁感應中的電路和圖像問題課件
- 2025至2030年中國固定刀數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國吊裝袋數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國六棱砌塊成型機數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國兒童四輪車數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國一次性胸腔閉式引流水封瓶數(shù)據(jù)監(jiān)測研究報告
- 借哪吒精神燃開學斗志 開學主題班會課件
- 學校教職工代表大會全套會議會務資料匯編
- 新部編版小學六年級下冊語文第二單元測試卷及答案
- 2025年山東傳媒職業(yè)學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 《中醫(yī)基礎理論》課件-中醫(yī)學理論體系的基本特點-整體觀念
- 2025年廣東省深圳法院招聘書記員招聘144人歷年高頻重點提升(共500題)附帶答案詳解
- GB/T 45107-2024表土剝離及其再利用技術要求
- 一年級家長會課件2024-2025學年
- 2024年海南省??谑行∩鯏?shù)學試卷(含答案)
- 廣東省五年一貫制語文試卷
- 新版北師大版小學3三年級數(shù)學下冊全冊教案完整(新教材)
評論
0/150
提交評論