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

正文內(nèi)容

基于vc的伺服電機(jī)速度控制系統(tǒng)畢業(yè)設(shè)計(jì)(編輯修改稿)

2025-07-24 19:23 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 COM1,GENERIC_READ| GENERIC_WRITE,0, NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)。 if (hCom==INVALID_HANDLE_VALUE) { AfxMessageBox(無(wú)法打開(kāi)串行口)。 } else { COMMTIMEOUTS CommTimeOuts 。 SetCommMask(hCom, EV_RXCHAR ) 。 SetupComm(hCom, 4096, 4096 ) 。 //設(shè)置收發(fā)緩沖區(qū)尺寸為4K PurgeComm(hCom, PURGE_TXABORT| PURGE_RXABORT | PURGE_TXCLEAR| PURGE_RXCLEAR ) 。 清收發(fā)緩沖區(qū);(3)以下初始化CommTimeOuts和設(shè)置超時(shí)參數(shù) ; = 0FFFFFFFF 。 = 0 。 = 4000 。 = 0。 = 4000 。 SetCommTimeouts(hCom, amp。CommTimeOuts )。 //設(shè)置超時(shí)參數(shù) = sizeof( DCB ) 。 GetCommState( hCom, amp。ComDcb ) 。 //獲取當(dāng)前參數(shù) =9600。 //波特率 = 8。 //數(shù)據(jù)位 = 0。 //校驗(yàn) 0~4=no, odd, even, mark, space SetCommState(hCom, amp。ComDcb ) 。 } (4)設(shè)置新的通信參數(shù);DWORD dRead,dReadNum。 unsigned char buff [200]。 dRead=ReadFile(hCom, buff, 100, amp。dReadNum, NULL)。 //接收100個(gè)字符, dReadNu為實(shí)際接收字節(jié)數(shù) ; 利用端口函數(shù)直接操作 這種方式主要是采用兩個(gè)端口函數(shù)_inp(), _outp()實(shí)現(xiàn)對(duì)串口的讀寫(xiě),其中讀端口函數(shù)的原型為: int _inp(unsigned shot port) ;該函數(shù)從端口讀取一個(gè)字節(jié),端口號(hào)為0—65535;寫(xiě)端口的函數(shù)原型為: int _outp(unsigned shot port, int databyte) 該函數(shù)向指定端口寫(xiě)入一個(gè)字節(jié)。 不同的計(jì)算機(jī)串口地址可能不一樣,通過(guò)向串口的控制及收發(fā)寄存器進(jìn)行讀寫(xiě),可以實(shí)現(xiàn)靈活的串口通信功能,一般涉及具體的硬件電路討論比較復(fù)雜。 基于MSComm控件 MSCOMM控件,即Microsoft Communication Control,是Microsoft為簡(jiǎn)化Windows下串行通信編程而提供的ActiveX控件。它提供了一系列標(biāo)準(zhǔn)通信命令的使用接口,利用它可以建立與串口的連接,并可以通過(guò)串口連接到其他通信設(shè)備(如調(diào)制解調(diào)器),發(fā)出命令,交換數(shù)據(jù)以及監(jiān)視和響應(yīng)串行連接中發(fā)生的事件和錯(cuò)誤。MSCOMM控件可用于創(chuàng)建電話撥號(hào)程序、串口通信程序和功能完備的終端程序,MSCOMM控件提供了兩種處理通信的方式[7]。(1)事件驅(qū)動(dòng)方式。當(dāng)通信事件發(fā)生時(shí),MSCOMM控件會(huì)觸發(fā)OnComm事件,調(diào)用者可以捕獲該事件,通過(guò)檢查其CommEvent屬性便可確認(rèn)發(fā)生的是哪種事件或錯(cuò)誤,從而進(jìn)行相應(yīng)的處理。這種方法的優(yōu)點(diǎn)是響應(yīng)及時(shí)、可靠性高。(2)查詢方式。在程序的每個(gè)關(guān)鍵功能之后,可以通過(guò)檢查CommEvent屬性的值來(lái)查詢事件和錯(cuò)誤。如果應(yīng)用程序較小,這種方法可能更可取。例如,如果寫(xiě)一個(gè)簡(jiǎn)單的電話撥號(hào)程序,則沒(méi)有必要每接收1個(gè)字符都產(chǎn)生事件,因?yàn)槲┮坏却邮盏淖址钦{(diào)制解調(diào)器的確定響應(yīng)[14]。(3) MSComm 控件有很多重要的屬性, 其中常用的是如下幾個(gè):①CommPort 設(shè)置并返回通信口號(hào), 缺省值為COM1, 可設(shè)置1~ 16 個(gè)。② SetStrings 設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位的字符串。其中波特率的范圍為300~ 19 200 b/s。③ PortOpen 設(shè)置并返回通信口的狀態(tài), 同時(shí)用來(lái)打開(kāi)和關(guān)閉通信口。④ InputLen 決定每次Input 讀入的字符個(gè)數(shù),缺省為0, 表示讀取接收緩沖區(qū)的全部?jī)?nèi)容。⑤ Input 讀入并清除接收緩沖區(qū)的字符。⑥ InBufferCount 返回接收緩沖區(qū)已接收的字符數(shù), 通過(guò)置0可清除接收緩沖區(qū)。⑦ Output 將發(fā)送的字符串或數(shù)組寫(xiě)到發(fā)送緩沖區(qū)。⑧ InputMode 定義Input 屬性獲得數(shù)據(jù)的方式: 0 為文本。 1 為二進(jìn)制[9] 基于CSerial類 Cserial 是由MuMega Technologies公司提供的一個(gè)免費(fèi)的VC++類,可方便地實(shí)現(xiàn)串行通信。以下為該類定義的說(shuō)明部分:class CSerial { public: CSerial()。 ~CSerial()。 BOOL Open( int nPort = 2, int nBaud = 9600 )。 BOOL Close( void )。 int ReadData( void *, int )。 int SendData( const char *, int )。 int ReadDataWaiting( void )。 BOOL IsOpened( void ){ return( m_bOpened )。 } protected: BOOL WriteCommByte( unsigned char )。 HANDLE m_hIDComDev。 OVERLAPPED m_OverlappedRead, m_OverlappedWrite。 BOOL m_bOpened。 } (1)串行通信類Cserial 成員函數(shù)簡(jiǎn)介; ① CSerial::Cserial是類構(gòu)造函數(shù),不帶參數(shù),負(fù)責(zé)初始化所有類成員變量。 ② CSerial:: Open這個(gè)成員函數(shù)打開(kāi)通信端口。帶兩個(gè)參數(shù),第一個(gè)是埠號(hào),有效值是1到4,第二個(gè)參數(shù)是波特率,返回一個(gè)布爾量。 ③ CSerial:: Close函數(shù)關(guān)閉通信端口。類析構(gòu)函數(shù)調(diào)用這個(gè)函數(shù),所以可不用調(diào)用這個(gè)函數(shù)。 ④ CSerial:: SendData函數(shù)把數(shù)據(jù)從一個(gè)緩沖區(qū)寫(xiě)到串行端口。它所帶的第一個(gè)參數(shù)是緩沖區(qū)指針,其中包含要被發(fā)送的資料;這個(gè)函數(shù)返回已寫(xiě)到端口的實(shí)際字節(jié)數(shù)。 ⑤ CSerial:: ReadDataWaiting函數(shù)返回等待在通信端口緩沖區(qū)中的數(shù)據(jù),不帶參數(shù)。 ⑥ CSerial:: ReadData函數(shù)從端口接收緩沖區(qū)讀入數(shù)據(jù)。第一個(gè)參數(shù)是void*緩沖區(qū)指針,資料將被放入該緩沖區(qū);第二個(gè)參數(shù)是個(gè)整數(shù)值,給出緩沖區(qū)的大小。 四種實(shí)現(xiàn)方式的分析第一種Windows API的通信函數(shù)使用面較廣,但由于比較復(fù)雜,專業(yè)化程度較高,使用較困難;第二種通信函數(shù) _ jnp、_ outp需要了解硬件電路結(jié)構(gòu)原理;第三種方法使用的MSComm通信控件提供了標(biāo)準(zhǔn)的事件處理方式,并通過(guò)屬性的方法提供了COM口參數(shù)的設(shè)置,較為容易地解決了串口;第四種方法需使用第三方提供的CSerial類,使用受限制,應(yīng)用范圍不廣;本文采用第三種方式。 串口編程在VC++,用APPWizard可以生成三種應(yīng)用程序:?jiǎn)挝臋n(SDI)、多文檔(MDI)和基于對(duì)話框的應(yīng)用程序。為了說(shuō)明問(wèn)題和省去不必要的細(xì)節(jié),下面以基于對(duì)話框的應(yīng)用程序?yàn)槔?插入MSCOMM控件選擇菜單項(xiàng)Project/Add to project/Components and Controls…,在彈出的對(duì)話框中選擇Registered ActiveX Controls文件夾下的Microsoft Communications Control,,然后按下Insert按鈕,接著會(huì)彈出一個(gè)對(duì)話框,提示生成的類名及文件名,按OK按鈕即可實(shí)現(xiàn)控件的插入[8]。這時(shí)在對(duì)話框的控件工具欄 上會(huì)多出一個(gè)電話機(jī)模樣的控件圖標(biāo),Workspace的Classview中也多了一個(gè)類CMSComm。此時(shí)即可將MSCOMM控件加入到對(duì)話框模板,加入方法與其他控件一樣。然后還要在對(duì)話框類中相應(yīng)加入一個(gè)成員變量,此處我們將其命名為m_m。加入方法為:首先,在對(duì)話框模板中,用鼠標(biāo)右鍵點(diǎn)擊該控件,選擇ClassWizard,在出現(xiàn)的對(duì)話框的Member Variables標(biāo)簽的Control Ids項(xiàng)下,選中IDC_MSCOMM1。然后,按Add Variable…按鈕,在出現(xiàn)的對(duì)話框的Member Variable Name項(xiàng)中輸入m_m。最后,按OK按鈕即可[16]。 設(shè)置屬性可以在兩個(gè)地方對(duì)控件的屬性進(jìn)行設(shè)置:(1)對(duì)話框資源編輯器中。在對(duì)話框模板上,用右鍵單擊MSCOMM控件,然后選擇Properties…菜單項(xiàng),最后便可設(shè)置各項(xiàng)屬性。此處只對(duì)以下幾處進(jìn)行改動(dòng),其他接受缺省設(shè)置:Rthershold:1,InputLen:1,DTREnable:不選,InputMode:1Binary。 (2)對(duì)話框類的OnInitDialog()函數(shù)中;下面是以上設(shè)置的函數(shù)實(shí)現(xiàn):  BOOL CMyCOMMDlg::OnlnitDialog( )  {  CDialog::OnlnitDialog( );   (1)。//使用串口1  (9600,N,8,1);//波特率為9600,無(wú)奇偶校驗(yàn),8位數(shù)據(jù)位,1位停止位  (10)。 //每接收10個(gè)字符就觸發(fā)1次接收事件  (0)。 //不觸發(fā)發(fā)送事件  (10)。 //每次讀操作從緩沖區(qū)中取10個(gè)字符  (1)。 //二進(jìn)制數(shù)據(jù)傳輸形式 ?。═RUE)。 //打開(kāi)串口  return TRUE;} 設(shè)置串口通過(guò)設(shè)置命令可以實(shí)現(xiàn)對(duì)串口參數(shù)的設(shè)置操作,包括串口的通訊端口的選擇、波特率、波特率、校驗(yàn)位、停止位的選擇等,通過(guò)對(duì)這些參數(shù)的設(shè)置可以改變通訊的方式。在執(zhí)行參數(shù)設(shè)置響應(yīng)函數(shù)前首先進(jìn)行初始化程序,初始化程序如下:if(()){ (FALSE)。(9600,n,8,1)。 //波特率9600,無(wú)校驗(yàn),8個(gè)數(shù)據(jù)位,(1)。 //1:表示以二進(jìn)制方式檢取數(shù)據(jù)(1)。 //參數(shù)1表示每當(dāng)串口接收緩沖區(qū)中有多于或等于1個(gè)字符時(shí)將引發(fā)一個(gè)接收數(shù)據(jù)的OnComm事件(0)。 //設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長(zhǎng)度為0()。 //先預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)}在初始化完畢后,在串口通訊界面上會(huì)看到初始后的結(jié)果,串口通訊的波特率是9600、校驗(yàn)位none、數(shù)據(jù)位停止位1。如果需要更改設(shè)置參數(shù)可以執(zhí)行SettingChanged()函數(shù),該程序流程圖對(duì)應(yīng)的程序如下:void SettingChanged(){ //設(shè)置波特率if ((()) == CB_ERR || (()) == CB_ERR || (()) == CB_ERR || (()) == CB_ERR || (()) == CB_ERR) { ::AfxMessageBox(error occur in SettingChanged())。 return 。 } if (()) { thisUpdateData(TRUE)。 //讀取內(nèi)容 if (() ||() || () ||() || ()) { ::AfxMessageBox(請(qǐng)?jiān)O(shè)置好通信參數(shù))。 return 。 }//設(shè)置校驗(yàn)位 CString szSetting。 szSetting = m_szBaud + ,。 CString parity。 if (m_zsParity == None) parity = n。 else if (m_zsParity == Odd) parity = o。 else if (m_zsParity == Even) parity = e。 else if (m_zsParity == Mark) parity = m。 else if (m_zsParity == Space) parity = s。 else { ::AfxMessageBox(請(qǐng)?jiān)O(shè)置好校驗(yàn)方式)。 parity = n。 return 。 } szSetting += parity + ,。 szSetting += m_szDataBits + ,。 szSetting += m_szStopBits。 //選擇串口通訊方式 if (m_szCOMName == COM1 || m_szCOMName == COM2) { (FALSE)。 //先關(guān)閉 if (m_szCOMName == COM1) (1)。 if (m_szCOMName == COM2) (2)。 } else { ::AfxMessageBox(COM端口不對(duì))。 return 。 } (TRUE)。 //打開(kāi)串口 m_szStatus = 打開(kāi)。 thisUpdateData(FALSE)。 (szSetting)。 (1)。 //1:表示以二進(jìn)制方式檢取數(shù)據(jù)(1)。 //為1表示有一個(gè)字符引發(fā)一個(gè)事件(1)。 //參數(shù)1表示每當(dāng)串口接收緩沖(0)。//設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長(zhǎng)度為0()。 //先預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù) } else { thisUpdateData(TRUE)。 //讀取內(nèi)容 }} 數(shù)據(jù)類型的處理MSCO
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1