VC0MFC串口通信編寫全過程_第1頁
VC0MFC串口通信編寫全過程_第2頁
VC0MFC串口通信編寫全過程_第3頁
VC0MFC串口通信編寫全過程_第4頁
VC0MFC串口通信編寫全過程_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余13頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實(shí)用標(biāo)準(zhǔn)其于MFC的串口調(diào)試助手編輯過程、新建翻開VC6.0 文件一新建 工程 一 MFC AppWiardexe 位置選擇保存 工程位置一工程名稱輸入工程名XXXX 確定 一選擇根本對話框 一下一步 一下一步下一步選擇CXXXXDlg= 完成 一確定在生成的基 本對話框內(nèi)將不需要按鈕及提示框自動生成的“確定 “取消 及提示框刪除或修 改使用,至此根本框架完成如下列圖:一一 IM SCTMItSI OliLW (Dialog鄉(xiāng)文件叩 地 神,工程0 起建圜 布局拶 工具工加 9 招助單眄母 H 0 |.品宴0 總,昭國 W 強(qiáng)|CDgg習(xí)|匐CScommTestDIgi 三 網(wǎng)1 日為s>

2、; mEinbe司引| *CS&omrnTESitDlg三虱,|翻 看 | >1* _| Dialog* _| Icom* _| Siring Table* _| Version小控 匕 止 叫斗膾日團(tuán)咽 等4三但或填G-K組建眼試,在汨中查我、存中查找h結(jié)果入箱L n+可小同/)ffl圈I送I口就緒T:驟添加進(jìn) 來的串口 控件二、往生成的根本框架中添加控件1、由于控件列表框內(nèi)沒有串口通信用到的通信控件,所以要先添加到控件列表框內(nèi)再 將控件添加到根本框內(nèi)使用,步驟如下:菜單欄一工程一添加到工程一 Components and controls RegisteredActiveX

3、Controls -選擇"Microsoft Communications Control, version 6.0 " - Insert - 確定一OK 關(guān)閉此子窗口完成添加操作標(biāo)志如上圖所示.2、將剛剛添加添加到控件列表框內(nèi)的串口控件添加到根本框架內(nèi)點(diǎn)擊控件列表框內(nèi)的串口控件,此時光標(biāo)變?yōu)椤笆?在根本框架內(nèi)隨意劃取一矩形區(qū)域,即可以添加串口控件,不需要修改此控件的大小及位置,由于程編譯運(yùn)行后 此控件是看不到的,步驟結(jié)果如下列圖:文檔大全實(shí)用標(biāo)準(zhǔn)3、繼續(xù)往根本框架內(nèi)添加用于編輯發(fā)送數(shù)據(jù)的輸入編輯框及輸出編輯框,同理選擇控 件列表框內(nèi)的“編輯框控件,以相同的操作即可添加兩

4、個編輯窗口及一個按紐控件如卜圖所示:選擇其中任意一個作為輸入編輯框及輸出編輯Euttcnl這兩個窗口需要修改大小及位置,由于程序運(yùn)行后將會顯示而串口通信控件那么不顯示, 上圖是運(yùn)行后的效果.4、對以上四個控件編程步驟如下:a、右擊串口通信控件一建立類向?qū)б籑ember variables - Control IDS 中選擇 IDC_MSCOMM1 add variable -M Member variable name 中輸入控件變量名 m_ctrlComm 變量名可以隨意選取,但程序中應(yīng)與所取變量名一致一 OL確定文檔大全實(shí)用標(biāo)準(zhǔn)b、右擊編輯框、屬性、常規(guī)、 ID:中輸入ID號,此編輯框用于

5、接U顯示數(shù)據(jù)的其ID號為IDC_EDIT_RXDATA (可以隨意選取,但程序中應(yīng)與所取ID號一致),再在此窗口的樣式中勾選“多行,同時將“自動水平滾動(T)勾選去掉,再勾選“垂直滾動(V),此勾選操作是用于垂直多行顯示的,按回車后即可輸入;同理右擊另一編輯框輸入ID號為IDC_EDIT_TXDATA此編輯框用于編輯發(fā)送數(shù)據(jù)的,同樣也選上用于垂直多行顯示,發(fā)送框可以不用垂直多行顯示;再為按鈕控件添加ID號,為 IDC_BUTTON_MANUALSEND ,并將標(biāo)題中的“ Buttonl 改為“發(fā)送,功能是按一 次就把發(fā)送編輯框中的內(nèi)容發(fā)送一次.C、為以上兩個編輯框添加變量,與串口通信控件一樣添

6、加,為 IDC_EDIT_RXDATA添 力口 CString 型變量 m_strRXData ;為 IDC_EDIT_TXDATA 添力口 CString 型變量 m_strTXData .說明:m_strRXData和m_strTXData分別用來放入接收和發(fā)送的字符 數(shù)據(jù).D、添加串口事件消息處理函數(shù)OnComm()翻開 ClassWizard >Message Maps,選擇IDC_MSCOMM1 ,雙擊消息 OnComm,將彈出的對話框中將函數(shù)名改為OnComm ,(好記而已)OK.這個函數(shù)是用來處理串口消息事件的,如每當(dāng)串口接收到數(shù)據(jù),就會產(chǎn)生一個串口接收數(shù)據(jù)緩沖區(qū)中有字符的

7、消息事件,我們剛剛添加的函數(shù)就會執(zhí)行, 我們在OnComm()函數(shù)參加相應(yīng)的處理代碼就能實(shí)現(xiàn)自已想要的功能了.在函數(shù)中參加如下代碼:提示1:此句以下才是我們要添加 的語句J代碼段1:void CScommTestDlg:OnComm() / TODO: Add your control notification handler code hereVARIANT variant_inp;/ 定義一個 VARIANT 類對象COleSafeArray safearray_inp; 定義一個 COleSafeArray 對象LONG len,k;BYTE rxdata2048;/ 設(shè)置 BYTE 數(shù)

8、組 AN 8 intterthat is not signed.CString strtemp;if (m_ctrlComm.GetCommEvent()=2) 事件值為2表示接收緩沖區(qū)內(nèi)有數(shù)據(jù) /以下你可以根據(jù)自己的通信協(xié)議參加處理代碼variant_inp=m_ctrlComm.GetInput(); 讀緩沖區(qū)safearray_inp=variant_inp;/V ARIANT 型變量轉(zhuǎn)換為 ColeSafeArray 型變量 len=safearray_inp.GetOneDimSize();for(k=0;k<len;k+)safearray_inp.GetElement(&a

9、mp;k,rxdata+k);/ 轉(zhuǎn)換為 BYTE 型數(shù)組/提示2:此三句是、 下面用于是否是十 六進(jìn)制發(fā)送的,暫 時可以不用理會Ifor(k=0;k<len;k+)將數(shù)組轉(zhuǎn)換為 Cstring型變量 BYTE bt=*(char*)(rxdata+k);if(m_ctrlHexSend.GetCheck() 如果是 HEX 顯示那么轉(zhuǎn)為 16 進(jìn)制/ strtemp.Format("%02x ",bt); 將 16 進(jìn)制數(shù)送入臨時變量 strtemp 存放/ else文檔大全實(shí)用標(biāo)準(zhǔn)strtemp.Format("%c",bt);/將字符送入臨時

10、變量 strtemp存放 m_strRXData+=strtemp;/參加接收編輯框?qū)?yīng)字符串UpdateData(FALSE);/更新編輯框內(nèi)容(主要是接收編輯框中的)到目前為止還不能在接收編輯框中看到數(shù)據(jù),由于我們還沒有翻開串口, 但運(yùn)行程序不應(yīng)該有任何錯誤,不然,你肯定哪兒沒看仔細(xì),由于我是翻開 VC6對照著做一步寫一 行的,運(yùn)行試試.沒錯吧?那么做下一步:E、翻開串口和設(shè)置串口參數(shù)你可以在你需要的時候翻開串口,例如在程序中做一個開始按鈕,在該按鈕的處理函數(shù)中翻開串口.現(xiàn)在我們在主對話框的CSCommTestDlg:OnInitDialog() 翻開串口,參加如下代碼:代碼段2:BOOL

11、 CSCommTestDlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL) CSt

12、ring strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty() pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING , IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically / when the application's main window is

13、 not a dialogSetIcon(m_hIcon, TRUE);/ Set big icon提布 4:此 5 SetIcon(m_hIcon, FALSE); / Set small icon句是我們下面要用到的 / TODO: Add extra initialization here 一暫時可以不 / m_ComboBox.SetCurSel(0);/翻開軟件時串口選擇框默認(rèn)顯示COM1用理會 .提示3:此句以下才 是我們要添加的語 句/ m_BaudRate_M.SetCurSel(0);/翻開軟件時波特率選擇框默認(rèn)顯示9600'/m_Date_Select_M.SetC

14、urSel(0);/翻開軟件時數(shù)據(jù)位選擇框默認(rèn)顯示8/ m_StopBit_M.SetCurSel(0);/翻開軟件時停止位選擇框默認(rèn)顯示1/ m_ParityCheck_M.SetCurSel(0);/翻開軟件時奇偶校驗(yàn)選擇框默認(rèn)顯示無校驗(yàn)N文檔大全實(shí)用標(biāo)準(zhǔn)/下面if語句用于翻開默認(rèn)串口/*/if(m_ctrlComm.GetPortOpen() ( m_ctrlComm.SetPortOpen(FALSE);/ 關(guān)閉串口 )m_ctrlComm.SetCommPort(1);/ 翻開軟件時默認(rèn)使用COM1 串口if(!m_ctrlComm.GetPortOpen()(m_ctrlComm.

15、SetPortOpen(TRUE);/ 翻開串 口) else(AfxMessageBox("cannot open serial port");)/*/m_ctrlComm.SetSettings("9600,n,8,1");/翻開軟件時端口設(shè)置默認(rèn)為波特率9600,無校驗(yàn)位,8位數(shù)據(jù),1位停止位m_ctrlComm.SetInputMode(1); /1 :表示以二進(jìn)制方式檢取數(shù)據(jù)m_ctrlComm.SetRThreshold(1); 參數(shù)1表示每當(dāng)串口接收緩沖區(qū)中有多于或等于1個字符時將引發(fā)一個接收數(shù)據(jù)的OnComm事件m_ctrlComm.Se

16、tInputLen(0); /設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長度為0m_ctrlComm.GetInput(); /先預(yù)讀緩沖區(qū)以去除殘留數(shù)據(jù)return TRUE; / return TRUE unless you set the focus to a control )F、發(fā)送數(shù)據(jù),先為發(fā)送按鈕添加一個單擊消息即BN_CLICKED處理函數(shù),翻開ClassWizard >Message Maps ,選擇 IDC_BUTTON_MANUALSEND ,雙擊 BN_CLICKED 添加OnButtonManualsend()函數(shù),并在函數(shù)中添加如下代碼:代碼段3:void CSCommTestDlg

17、:OnButtonManualsend() (/ TODO: Add your control notification handler code hereUpdateData(TRUE); / 讀取編輯框內(nèi)容m_ctrlComm.SetOutput(COleVariant(m_strTXData);發(fā)送數(shù)據(jù))此時運(yùn)行程序,在發(fā)送編輯框中隨意輸入數(shù),單擊發(fā)送按鈕,假設(shè)出錯那么修改后再測試, 直到成功再進(jìn)行以下操作.5、添加兩個“組框或“靜態(tài)文本控件,調(diào)整位置及大小,在標(biāo)師處輸入提示文字, 這兩個控件不用編程,效果如下列圖:文檔大全接收數(shù)據(jù)區(qū):實(shí)用標(biāo)準(zhǔn)發(fā)送數(shù)據(jù)輸入:6、添加5個“靜態(tài)文本控件并由

18、屬性修改其標(biāo)題,均不用編程,效果如下列圖:接收數(shù)據(jù)區(qū):串口號:波特率:骸據(jù)位:停止位:發(fā)送數(shù)據(jù)輸入:7、添加5個“組框控件,效果如下列圖:文檔大全實(shí)用標(biāo)準(zhǔn)逐一對各個組框?qū)傩跃庉嬋缦拢捍谔枺撼R?guī) ID : IDC_COMBO_CommSelect數(shù)據(jù)輸入列表框工程 N: COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9 注意每輸入一個數(shù)據(jù)選項(xiàng)以Ctrl+Enter回車后再輸入下一個數(shù)據(jù)選項(xiàng)樣式將“分類勾選去掉進(jìn)入類向?qū)砑幼兞?為 IDC_COMBO_CommSelect添加一個 value類int型變量 m_Index,點(diǎn)擊 OK 后,再添加一個 Co

19、ntrol 類 CComboBox 型變量 m_ComboBox 點(diǎn) 擊OK最后“確定波特率:常規(guī) ID : IDC_COMBO_BaudRate_Select數(shù)據(jù)輸入列表中S工程N(yùn): 9600、14400、19200、38400、56000、57600、115200、 128000 、 256000樣式將“分類勾選去掉進(jìn)入類向?qū)砑幼兞?為 IDC_COMBO_BaudRate_Select 添加一個 value類int型變量 m_ BaudRate 點(diǎn)擊 OK 后,再添加一個 Control 類 CComboBox 型變量 m_ BaudRate_M 點(diǎn)擊OK最后“確定數(shù)據(jù)位:常規(guī) ID

20、: IDC_COMBO_Date_Select數(shù)據(jù) 輸入列表中S工程N(yùn): 8、7、6、5、4樣式將“分類勾選去掉進(jìn)入類向?qū)砑幼兞?為 IDC_COMBO_Date_Select 添加一個 value 類int型變量 m_Date_Select 點(diǎn)擊 OK 后,再添加一個 Control 類 CComboBox 型變量 m_Date_SelectM點(diǎn)擊OK最后“確定文檔大全實(shí)用標(biāo)準(zhǔn)停止位:常規(guī) ID : IDC_COMBO_StopBit數(shù)據(jù)輸入列表中g(shù)工程(N): 1、2樣式將“分類勾選去掉進(jìn)入類向?qū)砑?變量,為IDC_COMBO_StopBit 添 加一個 value 類int型變量 m

21、_StopBit 點(diǎn)擊 OK 后,再添加一個 Control 類 CComboBox 型變量 m_StopBit_M 點(diǎn)擊 OK最后“確定奇偶校驗(yàn)位:常規(guī) ID : IDC_COMBO_ParityCheck數(shù)據(jù) 輸入列表中S工程(N): N、O、E、樣式將“分類勾選去掉進(jìn)入類向?qū)砑幼兞?為IDC_COMBO_ParityCheck 添加一個 value 類int型變量m_ParityCheck 點(diǎn)擊 OK 后,再添加一個 Control 類 CComboBox 型變量 m_ParityCheck_M 點(diǎn)擊 OK 最后“確定說明:以上數(shù)據(jù)配置添加的Control類CComboBox型變量可能

22、用不到,但value類必須為int型 8、為各個列表框添加處理函數(shù):A、在建立類向?qū)е?Message Maps , object IDs 中選中 IDC_COMBO_CommSelect 再 在Messages中選中CBN_SELCHANG雙擊后單擊 OK,再在 Member funtions 中雙擊剛剛生 成的函數(shù)進(jìn)入程序編輯頁面,添加程序代碼如下: 代碼段4:void CSCommTestDlg:OnSelchangeCOMBOCommSelect()/ TODO: Add your control notification handler code herem_Index=(CComb

23、oBox*)GetDlgItem(IDC_COMBO_CommSelect)->GetCurSel();/ 當(dāng)前選 中而行(CComboBox*)GetDlgItem(IDC_COMBO_CommSelect)->SetCurSel(m_Index);/ 設(shè)置當(dāng) 前選中的行的內(nèi)容為顯示的內(nèi)容if(m_ctrlComm.GetPortOpen()當(dāng)要改變時那么要先關(guān)閉用口才可以用按鍵進(jìn)行翻開, 先判而當(dāng)前申是否翻開/如果是翻開的那么先關(guān)閉m_ctrlComm.SetPortOpen(FALSE);/慶閉用 口添加串口打開或關(guān)閉按鈕后將用到此將用到此判斷及以下SetDlgItemTex

24、t(IDC_BUTTON1,"翻開用口 ")7/將翻開或關(guān)才按鈕改為"翻開用口 "顯示狀 態(tài)B、同理為IDC_COMBO_BaudRate_Select添加處理函數(shù)程序代碼如下:代碼段5:void CSCommTestDlg:OnSelchangeCOMBOBaudRateSelect() / TODO: Add your control notification handler code hereUpdateData(true);m_BaudRate=(CComboBox*)GetDlgItem(IDC_COMBO_BaudRate_Select)-&

25、gt;GetCurSel();/文檔大全實(shí)用標(biāo)準(zhǔn)/當(dāng)前選中的行/*/ /根據(jù)當(dāng)前選中的值進(jìn)行波特率設(shè)置*/* switch(m_BaudRate) (.case 1: m_ctrlComm.SetSettings("14400,");break;case 2: m_ctrlComm.SetSettings("19200,");break;case 3: m_ctrlComm.SetSettings("38400,");break;case 4: m_ctrlComm.SetSettings("56000,");br

26、eak;case 5: m_ctrlComm.SetSettings("57600,");break;case 6: m_ctrlComm.SetSettings("115200,");break;case 7: m_ctrlComm.SetSettings("128000,");break;case 8: m_ctrlComm.SetSettings("256000,");break;default:m_ctrlComm.SetSettings("9600,"); break;Il*HHUpd

27、ateData(false);C、同理為IDC_COMBO_Date_Select添加處理函數(shù)程序代碼如下:代碼段6:void CSCommTestDlg:OnSelchangeCOMBODateSelect() (/ TODO: Add your control notification handler code hereUpdateData(true);m_Date_Select=(CComboBox*)GetDlgItem(IDC_COMBO_Date_Select)->GetCurSel();士前選而的行/* */ /* */ switch(m_Date_Select)文檔大全實(shí)

28、用標(biāo)準(zhǔn)case 1: m_ctrlComm.SetSettings(",7,"); break;case 2: m_ctrlComm.SetSettings(",6,"); break;case 3: m_ctrlComm.SetSettings(",5,"); break;case 4: m_ctrlComm.SetSettings(",4,"); break;default:m_ctrlComm.SetSettings(",8,"); break;/*UpdateData(false);D、

29、同理為IDC_COMBO_StopBit添加處理函數(shù)程序代碼如下:代碼段6:void CSCommTestDlg:OnSelchangeCOMBOStopBit()(/ TODO: Add your control notification handler code hereUpdateData(true);m_StopBit=(CComboBox*)GetDlgItem(IDC_COMBO_StopBit)->GetCurSel(); 當(dāng)前選中 的行/* */ /*/switch(m_StopBit) (.case 1: m_ctrlComm.SetSettings(",2&

30、quot;);break;default:m_ctrlComm.SetSettings(",1");break;*/UpdateData(false);E、同理為IDC_COMBO_ParityCheck添加處理函數(shù)程序代碼如下:代碼段7:void CSCommTestDlg:OnSelchangeCOMBOParityCheck()文檔大全實(shí)用標(biāo)準(zhǔn)(/ TODO: Add your control notification handler code hereUpdateData(true);m_ParityCheck=(CComboBox*)GetDlgItem(IDC_

31、COMBO_ParityCheck)->GetCurSel();/ 當(dāng)前選中的行/*/*/switch(m_ParityCheck) (case 1: m_ctrlComm.SetSettings(",O,");break;case 2: m_ctrlComm.SetSettings(",O,");break;default:m_ctrlComm.SetSettings(",N,");break;H*/UpdateData(false);此時應(yīng)將代碼段2:提示4中所指的那5個語句前的“ /刪除9、串口添加翻開或關(guān)閉按鈕以同樣的方

32、式添加按鈕,并將標(biāo)題修改為“關(guān)閉串口字樣,為此按鈕添加處理函 數(shù)程序代碼如下:代碼段8:void CSCommTestDlg:OnButton1Start()(/檢查是否改變默認(rèn)的串口值,沒有改變m_Index的值是0的,否那么那么不為0if(m_Index<0)/用口的默認(rèn)值沒有改變switch(m_ctrlComm.GetPortOpen()/點(diǎn)擊翻開或關(guān)閉串口按鍵時,根據(jù)當(dāng)前串口 是否翻開進(jìn)行相應(yīng)操作(1:case產(chǎn)*關(guān)閉用口前先將自動發(fā)送功能關(guān)閉*/文檔大全實(shí)用標(biāo)準(zhǔn)SetDlgItemText(IDC_BUTTON_AutoSend,"自動發(fā)送");/更改按鍵

33、指 KillTimer(1);/*/當(dāng)前用口是翻開的那么進(jìn)行關(guān)串口操作m_ctrlComm.SetPortOpen(FALSE);/慶閉用 口SetDlgItemText(IDC_BUTTON1,"翻開用口 ");/更改按鍵指UpdateData(FALSE);/使新按鍵狀態(tài) break;case 0:必前用口是關(guān)閉的那么進(jìn)行開審口操作m_ctrlComm.SetCommPort(1);儂口果要翻開用口那么應(yīng)先選擇哪個串口 m_ctrlComm.SetPortOpen(TRUE);/fJ 開串 口SetDlgItemText(IDC_BUTTON1,"關(guān)閉串口 &

34、quot;);/更改按鍵指 UpdateData(FALSE);break;default : AfxMessageBox("cannot open or close serial port");else/用口的默認(rèn)值有改變switch(m_ctrlComm.GetPortOpen()/點(diǎn)擊翻開或關(guān)閉串口按鍵時,根據(jù)當(dāng)前串口是否 翻開進(jìn)行相應(yīng)操作case 0:必前串口是關(guān)閉的那么進(jìn)行開審口操作m_ctrlComm.SetCommPort(m_Index+1);/如果要翻開用 口 那么應(yīng)先選擇哪個串口m_ctrlComm.SetPortOpen(TRUE);/fJ 開串 口S

35、etDlgItemText(IDC_BUTTON1,"關(guān)閉串口 ");/更改按鍵指UpdateData(FALSE);/使新按鍵狀態(tài) break;case 1:嚴(yán)*關(guān)閉用口前先將自動發(fā)送功能關(guān)閉*/SetDlgItemText(IDC_BUTTON_AutoSend,"自動發(fā)送");/更改按鍵指 KillTimer(1);/*/當(dāng)前用口是翻開的那么進(jìn)行關(guān)串口操作文檔大全實(shí)用標(biāo)準(zhǔn)m_ctrlComm.SetPortOpen(FALSE);SetDlgItemText(IDC_BUTTON1,"翻開串口 ");UpdateData(FAL

36、SE);break;default : AfxMessageBox("cannot open serial port");if(m_Index<0)(CComboBox*)GetDlgItem(IDC_COMBO_CommSelect)->SetCurSel(0);/ 如果沒有另外進(jìn)行串口選擇那么顯示COM1if(m_BaudRate<0)(CComboBox*)GetDlgItem(IDC_COMBO_BaudRate_Select)->SetCurSel(0); 如果沒有另 外進(jìn)行波特率選擇那么顯示9600if(m_Date_Select<

37、0)(CComboBox*)GetDlgItem(IDC_COMBO_Date_Select)->SetCurSel(0);/ 如果沒有另外進(jìn)行數(shù)據(jù)位選擇那么顯示8if(m_StopBit<0)(CComboBox*)GetDlgItem(IDC_COMBO_StopBit)->SetCurSel(0);/ 如果沒有另外進(jìn)行停止位選擇那么顯示1if(m_ParityCheck<0)(CComboBox*)GetDlgItem(IDC_COMBO_ParityCheck)->SetCurSel(0);/ 如果沒有另外進(jìn)行校驗(yàn)位選擇那么顯示沒有校驗(yàn)位 N10、添加自動

38、發(fā)送功能:A、添加一個“編輯框控件,此控件用于獲取自動發(fā)送的時間間隔的,修改其 ID為 IDC_EDIT_Timer ,為其添加一個 value 類 UINT 型變量 m_TimerB、添加一個“按鈕控件,修改其 ID為IDC_BUTTON_AutoSend修改其標(biāo)題為“自動發(fā)送C、添加一個“按鈕控件,修改其 ID為IDC_BUTTON_StopAutoSend修改其標(biāo) 題為“停止自動發(fā)送D、為“自動發(fā)送按鈕添加 BN_CLICKED處理函數(shù),程序代碼如下:代碼段9:void CSCommTestDlg:OnBUTTONAutoSend()UpdateData(TRUE);if(m_Timer

39、<=0)/判斷是否設(shè)置自動發(fā)送時間問隔AfxMessageBox("青設(shè)置自動發(fā)送時間間隔");else if(!m_ctrlComm.GetPortOpen()/陰J 斷是否翻開用 口AfxMessageBox("青翻開串口 ); elseSetDlgItemText(IDC_BUTTON_AutoSend,“自動發(fā)送);/更改按鍵指示 SetTimer(1,m_Timer,NULL); 文檔大全實(shí)用標(biāo)準(zhǔn)E、為“停止自動發(fā)送按鈕添加 BN_CLICKED處理函數(shù),程序代碼如下: 代碼段9:void CSCommTestDlg:OnBUTTONStopAut

40、oSend()(/ TODO: Add your control notification handler code here SetDlgItemText(IDC_BUTTON_AutoSend,"自動發(fā)送);/更改按鍵指示 KillTimer(1);F、由于要設(shè)置自發(fā)送,所以要添加一個 Windows定時函數(shù),步驟如下:進(jìn)入類向?qū)?Message Maps中的Object IDs中選擇CScommTestDlg再選擇Messages中的 WM_TIMER ,進(jìn)入TIMER函數(shù)后,添加如下 程序代碼如下:代碼段10:void CSCommTestDlg:OnTimer(UINT n

41、IDEvent)(/ TODO: Add your message handler code here and/or call default UpdateData(TRUE);if(m_ctrlHexSend.GetCheck()( 一CByteArray hexdate;int len=String2Hex(m_strTXData,hexdate);m_ctrlComm.SetOutput(COleVariant(hexdate); 一 else m_ctrlComm.SetOutput(COleVariant(m_strTXData);CDialog:OnTimer(nIDEvent);

42、11、十六進(jìn)制數(shù)據(jù)發(fā)送及接收顯示添加一個“復(fù)選框控件,修改ID為IDC_CHECK_HexSend,標(biāo)題為“ HEX發(fā)送,進(jìn) 入類向?qū)砑?control類 CButton型變量,變量名為 m_ctrlHexSend ,然后為為 SCommTestDlg 類添加以下兩個 PUBLIC 成員函數(shù),在 Class view 中右擊 CCommTestDlg選中Add Member Function-然后在函數(shù)類型中輸入“int,在 函數(shù)描述中輸入 “ String2Hex(CString str, CByteArray &senddate) 然后確定.編 輯函數(shù)體如下:代碼段11:int

43、CSCommTestDlg二String2Hex(CString str, CByteArray &senddate)int hexdate,lowhexdate;int hexdatelen=0;int len=str.GetLength();senddate.SetSize(len/2);for(int i=0;i<len;) char lstr,hstr=stri;if(hstr='')文檔大全實(shí)用標(biāo)準(zhǔn)(i+;continue;)i+;if(i>=len)break;lstr=stri;hexdate=ConvertHexChar(hstr);lowh

44、exdate=ConvertHexChar(lstr);if(hexdate=16)|(lowhexdate=16)break;elsehexdate=hexdate*16+lowhexdate;i+;senddatehexdatelen=(char)hexdate;hexdatelen+;)senddate.SetSize(hexdatelen);return hexdatelen;)再添加別一個CCommTestDlg添加兩個成員函數(shù),在函數(shù)類型中輸入“ char,在函數(shù)描述中輸入“ ConvertHexChar(char ch)然后確定.編輯函數(shù)體如下:代碼段12:char CSCommTestDlg二ConvertHexChar(char ch)(if(ch>='0')&&(ch<='9')(return ch-0x30;)e

溫馨提示

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

評論

0/150

提交評論