freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于c的rs232通信協(xié)議模擬終端畢業(yè)論文-閱讀頁

2025-06-11 18:06本頁面
  

【正文】 wd),將這個數(shù)據(jù)庫保存。數(shù)據(jù)庫和數(shù)據(jù)源建立完成后,開始用MFC建立登陸界面。圖45 數(shù)據(jù)庫中用戶名和弱密碼運行應(yīng)用程序時,若輸入了錯誤的用戶名或密碼,則系統(tǒng)會提示輸入錯誤。登陸界面如圖 46 所示。接收區(qū)由靜態(tài)文本框和編輯框組成;發(fā)送區(qū)同樣也是由靜態(tài)文本框和邊界框組成;設(shè)置區(qū)由組合框、復(fù)選框、按鈕和靜態(tài)文本框組成。 圖47 主界面(3)參數(shù)設(shè)置界面完成兩臺PC機(jī)間的串行通信(數(shù)據(jù)交換),必須保證兩個串口的通信參數(shù)一致,這樣就需要將兩個應(yīng)用程序的通信參數(shù)重新設(shè)置,通信參數(shù)包括波特率、數(shù)據(jù)位、停止位、奇偶校驗位等。界面的具體情況如圖48所示。需要重新輸入和驗證,驗證通過后才可以登錄。}void CMylogin::OnOK() { TODO: Add extra validation here UpdateData(TRUE)。 //新建的類,是基于CRecordset try { if(())//判斷記錄集是否打開 ()。%s39。%s39。//用來作為檢索條件,字符串格式化輸出 (CRecordset::snapshot,NULL,CRecordset::none)。 AfxMessageBox(用戶名、密碼錯誤,請重試!)。 } else { ()。 CDialog::OnOK()。 return。初始化的程序流程圖如圖410所示。 …… // TODO: Add extra initialization hereCMylogin my。//顯示登錄界面if(()) //如果發(fā)現(xiàn)串口本來是打開的,則關(guān)閉串口 (FALSE)。 //選擇COM4端口 (1)。 //設(shè)置輸入緩沖區(qū) (512)。//波特率,無校驗,數(shù)據(jù)位,停止位 return TRUE。程序流程圖如圖411所示,實現(xiàn)其功能代碼如下:void CMyDlg::OnOpen() { if(()) (FALSE)。 UpdateData(true)。 (m_n+1)。 //接收緩沖區(qū) (1024)。//設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長度為,表示全部讀取 (1)。 if(!()){(TRUE)。 //每當(dāng)接收緩沖區(qū)有個字符則接收串口數(shù)據(jù)(0)。 //預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)}elseAfxMessageBox(打開端口失敗!,MB_ICONSTOP,0)。}(4)實現(xiàn)數(shù)據(jù)交換模塊使用MSComm通信控件是MFC中進(jìn)行串口通訊最簡單的。加入MSComm通信控件,實現(xiàn)從緩沖區(qū)中讀取數(shù)據(jù),同時將數(shù)據(jù)給接收變量,更新接收區(qū)編輯框的內(nèi)容。 COleSafeArray safearray_inp。 byte rxdata[512]。 if(()==2) //值為表示接收緩沖區(qū)內(nèi)有字符 { variant_inp=()。 ///變量轉(zhuǎn)換 len=()。klen。k,rxdata+k)。klen。 //字符型 if(()) (%02X ,bt)。 //將字符送入臨時變量strtemp存放 CByteArray hexdata。 unsigned char* a= (unsigned char*)(LPCTSTR)strtemp。 UpdateData(false)。 //加入接收編輯框?qū)?yīng)字符串 } } CString temp=(\r\n)。 UpdateData(FALSE)。參數(shù)設(shè)置模塊流程圖如圖 413 所示,實現(xiàn)應(yīng)用程序具體功能的代碼如下:開始N確定鍵是否按下Y設(shè)置通信參數(shù)打開串口結(jié)束圖413 通信參數(shù)設(shè)置流程圖void CMyDlg::OnSet() { CSetcs sc。 = m_databit。 = m_stopbit。 CString conf。break。break。break。 } switch(m_jiaoyan) // 設(shè)置校驗方法 { case 0:conf = conf + n,。 case 1:conf = conf + o,。 case 2:conf = conf + e,。 default:conf = conf+n,。 } switch(m_databit) // 設(shè)置數(shù)據(jù)位 { case 0:conf = conf + 5,。 case 1:conf = conf + 6,。 case 2:conf = conf + 7,。 case 3:conf = conf + 8,。 default:conf = conf+8,。 } switch(m_stopbit) // 設(shè)置停止位 { case 0:conf = conf + 1。 case 1:conf = conf + 。 case 2:conf = conf + 2。 default:conf = conf+1。 } (conf)。 }}(6)發(fā)送模塊開始讀取編輯框16進(jìn)制形式發(fā)送字符形式發(fā)送計算CRC值值更新編輯框結(jié)束圖414 發(fā)送模塊流程圖發(fā)送數(shù)據(jù)模塊中,程序先讀取編輯框的內(nèi)容,根據(jù)是否選擇16進(jìn)制顯示選取字符發(fā)送形式,并計算發(fā)送數(shù)據(jù)的CRC值,同時發(fā)送并清空,最后更新編輯框的內(nèi)容。 //讀取編輯框內(nèi)容 if(()) { CByteArray hexdata。 //此處返回的len可以用于計算發(fā)送了多少個十六進(jìn)制數(shù) (COleVariant(hexdata))。//發(fā)送ASCII字符數(shù)據(jù) CByteArray hexdata。 unsigned char* pC = (unsigned char*)(LPCTSTR)m_send。 UpdateData(false)。 //發(fā)送后清空輸入框 UpdateData(false)。單個字符轉(zhuǎn)換成十六進(jìn)制的流程圖如圖415所示,代碼如下。senddata) { int hexdata,lowhexdata。 int len=()。 for(int i=0。) { char lstr,hstr=str[i]。 39。 continue。 if(i=len) break。 hexdata=ConvertHexChar(hstr)。 if((hexdata==16)||(lowhexdata==16)) break。 i++。 hexdatalen++。 return hexdatalen。039。amp。939。 else if((ch=39。)amp。(ch=39。)) return ch39。+10。a39。amp。f39。a39。 else return (1)。圖416 用戶名密碼不一致輸入正確用戶名和密碼,程序提示“登錄成功!歡迎使用!”如圖417 所示。然后需要打開串口,點擊【打開串口】按鈕,程序會提示串口打開成功,最后設(shè)置通信參數(shù),點擊【設(shè)置】按鈕,跳轉(zhuǎn)到設(shè)這界面,根據(jù)需要選擇通信參數(shù),如果保存設(shè)置就點擊【確定按鈕】否則點擊【退出】按鈕,之后又回到了主界面,現(xiàn)在即可進(jìn)行數(shù)據(jù)的發(fā)送了。圖418 設(shè)置串口和參數(shù)(3)發(fā)送數(shù)據(jù)選擇串口號,并將此串口打開,設(shè)置通信參數(shù)完成后,在發(fā)送區(qū)內(nèi)的編輯框輸入要發(fā)送的內(nèi)容,然后點擊【發(fā)送】按鈕,發(fā)送去編輯框里要發(fā)送的內(nèi)容會通過此串口發(fā)送到另一個端口的接收區(qū)的編輯框內(nèi),并在接收區(qū)的編輯框內(nèi)顯示了發(fā)送的內(nèi)容,同理也可在另一個串口的發(fā)送區(qū)編輯框內(nèi)輸入數(shù)據(jù),此數(shù)據(jù)也可發(fā)送到本串口的編輯框內(nèi),也會在接收區(qū)的編輯框內(nèi)得到顯示,如圖419所示。圖419 發(fā)送接收數(shù)據(jù)(4)十六進(jìn)制顯示和計算CRC值設(shè)置完成各參數(shù)后,選擇十六進(jìn)制發(fā)送、接收復(fù)選框和計算CRC數(shù)值復(fù)選框,點擊【發(fā)送按鈕】,可以看到在接收區(qū)字符是以十六進(jìn)制形式顯示的,接收和發(fā)送的CRC值在編輯框中顯示,這樣就可以判斷發(fā)送的內(nèi)容是否受到干擾。圖420 十六進(jìn)制顯示和計算發(fā)送接收數(shù)據(jù)CRC值(5)關(guān)閉串口退出整個應(yīng)用程序發(fā)送數(shù)據(jù)結(jié)束后,關(guān)閉串口,點擊【退出】按鈕,程序提示“謝謝使用!再見”。并對此應(yīng)用程序進(jìn)行了運行測試。主要功能有用戶名密碼驗證登錄、設(shè)置串口號、打開串口、關(guān)閉串口、設(shè)置通信參數(shù)等。掌握了串行通信的基本概念。實現(xiàn)通信功能時,綜合考慮了多種能實現(xiàn)通信的方式后,最終選擇了Windows編程下的MFC應(yīng)用程序,使用C++語言實現(xiàn)串行通信,其中使用的是MSComm控件。由于通信過程中,被傳遞的數(shù)據(jù)有可能受到各種因素的影響,造成數(shù)據(jù)丟失,更改等,影響發(fā)送接收數(shù)據(jù)的準(zhǔn)確性。最簡單的校驗是奇偶校驗,通過統(tǒng)計接收數(shù)據(jù)中二進(jìn)制數(shù)‘0’和‘1’的個數(shù),來確認(rèn)收到的數(shù)據(jù)是否正確。所以對通信過程中數(shù)據(jù)交換準(zhǔn)確度的驗證采用了比較準(zhǔn)確的方法即CRC校驗,CRC校驗全稱CRC(Cyclic Redundancy Check)循環(huán)冗余校驗碼,它是數(shù)據(jù)通信中最常用的一種差錯校驗碼,數(shù)據(jù)從發(fā)送端發(fā)送過來同時在其低位上是兩個CRC校驗碼,接收方對接收到的數(shù)據(jù)進(jìn)行CRC解碼,與發(fā)送來的數(shù)據(jù)進(jìn)行比對,驗證是否相同,若相同則接收到的數(shù)據(jù)是正確的,反之則證明數(shù)據(jù)在發(fā)送過程中受到了干擾等,需重新發(fā)送此數(shù)據(jù)??傊琑S232標(biāo)準(zhǔn)一直都應(yīng)用于通信領(lǐng)域中,串行通信以其成本低、結(jié)構(gòu)簡單等優(yōu)點被人們廣泛應(yīng)用。 參 考 文 獻(xiàn)[1] [D].上海:華東師范大學(xué),2010.[2] [D].合肥:合肥工業(yè)大學(xué),2009.[3] 樊一支,姜文祥,陳梨園。Visual2001.[16] 王華,岳麗全,++[J].長春工程學(xué)院學(xué)報:自然科學(xué)版,2009,10(1):3255.[17] Herbert ++:The Complete Reference,Fourth Edition[J] .McGrawHill,2009,23(7):1552.[18] 孫淑霞,李思明,++程序設(shè)計實驗指導(dǎo)與測試第2版[J].北京:電子工業(yè)出版社,2007.[19] 王莉,++的串口通信設(shè)計及其應(yīng)用[J].控制工程,2004,11 (S1) :8999.[20] 王珊,[M].北京:
點擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1