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

正文內(nèi)容

gps導(dǎo)航的發(fā)展史及結(jié)構(gòu)-資料下載頁

2025-06-29 07:35本頁面
  

【正文】 路?!? GPS模塊(REB3300) GPS接收機(jī)印刷電路板第5章 基于VC++的NMEA協(xié)議數(shù)據(jù)分析++的串口通信方法串行通信過去在DOS操作系統(tǒng)下一般都是采用匯編語言開發(fā),匯編語言的特點(diǎn)是功能強(qiáng)、運(yùn)行速度快。但編程復(fù)雜、調(diào)試難。隨著Windows操作系統(tǒng)的普及應(yīng)用.?dāng)?shù)據(jù)采集和工業(yè)控制等軟件的開發(fā)也上升到Windows環(huán)境下,采用高級(jí)語言開發(fā),高級(jí)語言具有良好的可讀性和簡便的調(diào)試手段。Windows環(huán)境下的串口通信程序是基于Visual C++ 6.0開發(fā)平臺(tái)開發(fā)的。VC++,以其強(qiáng)大的功能,友好的界面,32位面向?qū)ο蟮某绦蛟O(shè)計(jì)及Active X的靈活性而受廣大軟件開發(fā)者的青睞,被廣泛應(yīng)用于各個(gè)領(lǐng)域。應(yīng)用VC++開發(fā)串行通信目前通常有如下幾種方法:一是利用Windows API通信函數(shù);二是利用VC的標(biāo)準(zhǔn)通信函數(shù)_inp、_inpw、_inpd、_outp、_outpw、_outpd等直接對(duì)串口進(jìn)行操作;三是使用Microsoft Visual C++的通信控件(MSComm);四是利用利用一種用于串行通信的CSerial類(這種類是由第三方提供)。在本系統(tǒng)中采用了第三種方法,因?yàn)镸SComm控件是軟件提供的,功能較完善,使用起來比較方便。 MSComm控件MSComm 控件通過串行端口傳輸和接收數(shù)據(jù),為應(yīng)用程序提供串行通訊功能。MSComm控件在串口編程時(shí)非常方便,程序員不必去花時(shí)間去了解較為復(fù)雜的API函數(shù),而且在VC、VB、Delphi等語言中均可使用。 Microsoft Communications Control(以下簡稱MSComm)是Microsoft公司提供的簡化Windows下串行通信編程的ActiveX控件,它為應(yīng)用程序提供了通過串行接口收發(fā)數(shù)據(jù)的簡便方法。具體的來說,它提供了兩種處理通信問題的方法:一是事件驅(qū)動(dòng)(Event-driven)方法,一是查詢法。事件驅(qū)動(dòng)通訊是處理串行端口交互作用的一種非常有效的方法。在許多情況下,在事件發(fā)生時(shí)需要得到通知,例如,在串口接收緩沖區(qū)中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 線上一個(gè)字符到達(dá)或一個(gè)變化發(fā)生時(shí)。在這些情況下,可以利用 MSComm 控件的 OnComm 事件捕獲并處理這些通訊事件。OnComm 事件還可以檢查和處理通訊錯(cuò)誤。所有通訊事件和通訊錯(cuò)誤的列表,參閱 CommEvent 屬性。在編程過程中,就可以在OnComm事件處理函數(shù)中加入自己的處理代碼。這種方法的優(yōu)點(diǎn)是程序響應(yīng)及時(shí),可靠性高。每個(gè)MSComm 控件對(duì)應(yīng)著一個(gè)串行端口。如果應(yīng)用程序需要訪問多個(gè)串行端口,必須使用多個(gè) MSComm 控件。 查詢方式實(shí)質(zhì)上還是事件驅(qū)動(dòng),但在有些情況下,這種方式顯得更為便捷。在程序的每個(gè)關(guān)鍵功能之后,可以通過檢查 CommEvent 屬性的值來查詢事件和錯(cuò)誤。如果應(yīng)用程序較小,并且是自保持的,這種方法可能是更可取的。例如,如果寫一個(gè)簡單的電話撥號(hào)程序,則沒有必要對(duì)每接收一個(gè)字符都產(chǎn)生事件,因?yàn)槲ㄒ坏却邮盏淖址钦{(diào)制解調(diào)器的“確定”響應(yīng)。 多線程串口編程工具CSerialport類多線程串口編程恐懼Cserialport類可以很輕松地完成一半串口編程任務(wù),幾分鐘就可搭好串口通信框架。和MSComm控件相比,這個(gè)類打包時(shí),不需要加入其它的文件,而且函數(shù)都是開放透明的,允許我們進(jìn)行改造,還有,它不需要我們?nèi)ダ斫庥行?duì)于初學(xué)者較難掌握的數(shù)據(jù)類型,所以對(duì)初學(xué)者更使用。Cserialport類支持線連接的串口編程操作,編寫的程序在Windows98/NT/2000/XP操作系統(tǒng)下可很好的運(yùn)行,但在Windows Me操作系統(tǒng)下會(huì)出現(xiàn)死機(jī)的現(xiàn)象。Cserialport類是基于多線程的,其工作流程如下:首先設(shè)置好串口參數(shù),再開啟串口監(jiān)測(cè)工作線程,串口監(jiān)測(cè)工作線程監(jiān)測(cè)到串口接收到的數(shù)據(jù)、流控制事件或其他串口事件后,就以消息方式通知主程序,激發(fā)消息處理函數(shù)來進(jìn)行數(shù)據(jù)處理,這是對(duì)接收數(shù)據(jù)而言的;發(fā)送數(shù)據(jù)可直接向串口發(fā)送。此次論文的編程主要就是應(yīng)用的Cserialport類。 NMEA協(xié)議的數(shù)據(jù)解析接收到由GPS衛(wèi)星的數(shù)據(jù)后,我們必須對(duì)照NMEA0183協(xié)議進(jìn)行解析,并且顯示出來。其程序如下:static long rxdatacount=0。 定義一個(gè)長型全局變量,并賦值0;static char rxstrlen=0。 LONG CSCOMMDlg::OnCommunication(WPARAM ch, LPARAM port){ if (port = 0 || port 40) return 1。 判斷如果端口數(shù)小于于等于0或者大于40,,則歸零; rxdatacount++。 CString str。 (%ld,rxdatacount/14)。 str=RX:+str。 (str)。 if(m_bStopDispRXData) return 1。 if((())amp。amp。(()=5000)) { ()。 UpdateData(FALSE)。 } 如果自動(dòng)清零選中并且接收的數(shù)據(jù)的數(shù)量大于等于5000,則清空; if(()5000) { ()。 m_ReceiveData=***The Length of the Text is too long, Emptied Automaticly!!!***\r\n。 UpdateData(FALSE)。 } CString strtemp。 if(()) (%02X ,ch)。 else (%c,ch)。 int nLen=()。 (nLen, nLen)。 (strtemp)。 //更新顯示; nLen+=()。 m_ReceiveData+=strtemp。//////////////////////////////////////////////////////////////////// if(() 500) { //如果端口原來打開,則需要先關(guān)閉 if(m_bOpenPort) ()。 //數(shù)據(jù)存放變量 CString GpsTime, GpsPosWei, GpsDirWei, GpsPosJing, GpsDirJing, GpsDate。 //從m_str中讀取時(shí)間和經(jīng)緯度 int start = 0, end = 0。 if((start = (_T($GPRMC))) = 0) { end = (39。$39。, start + 1)。 //if(end start) { int index = 0。 //截取得數(shù)據(jù)幀 strtemp = (start, end start)。 //((CListBox *)GetDlgItem(IDC_EDIT_RXDATA))InsertString(0,strtemp)。 m_ReceiveData+=strtemp。 UpdateData(FALSE)。 m_ReceiveData = _T()。 //GetDlgItem(IDC_EDIT_RXDATA)SetWindowTextW(strtemp)。 start= end = 0。 while(index =12) { ++ index。 end = (39。,39。, start)。 //end指向第index個(gè)逗號(hào) switch(index) { case 2://讀得格林威治時(shí)間 GpsTime = (start, end start)。 break。 case 4://讀得緯度 GpsPosWei = (start, end start)。 break。 case 5://讀得緯度方向 GpsDirWei = (start, end start)。 break。 case 6://讀得經(jīng)度 GpsPosJing = (start, end start)。 case 7://讀得經(jīng)度方向 GpsDirJing = (start, end start)。 break。 case 10://讀得當(dāng)前日期 GpsDate = (start, end start)。 break。 } start = end + 1。 } //格林威治時(shí)間轉(zhuǎn)化為北京時(shí)間,時(shí)鐘加8小時(shí) int hour = (GpsTime[0] 39。039。) * 10 + (GpsTime[1] 39。039。) + 8。 hour %= 24。 //獲取GpsTime得Buffer,并對(duì)其進(jìn)行寫操作 LPTSTR ptr = (30)。 if(hour 10) ptr[0] = 39。039。 else ptr[0] = hour / 10 + 39。039。 ptr[1] = hour % 10 + 39。039。 ()。 //合并日期和時(shí)間 CString tmp =_T(北京時(shí)間:)。 tmp += GpsDate[4]。 tmp += GpsDate[5]。 tmp += 39。39。 tmp += GpsDate[2]。 tmp += GpsDate[3]。 tmp += 39。39。 tmp += GpsDate[0]。 tmp += GpsDate[1]。 tmp += 39。 39。 int i, j。 for(i = j = 0。j ()。++ i) { char c = (CHAR)((i % 3 == 2) ? 39。:39。 : GpsTime[j++])。 tmp += c。 } AfxMessageBox(m_str)。 AfxMessageBox(strtemp)。 m_Time=tmp。 m_Jindu=GpsPo
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1