




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 請(qǐng)輸入學(xué)校名稱(chēng) 請(qǐng) 輸 入 專(zhuān) 業(yè) 論文 串口溫度數(shù)據(jù)采集并實(shí)時(shí)顯示(上位機(jī)部分) 姓 名: 請(qǐng)輸入作者 學(xué) 號(hào): 請(qǐng) 輸 入 學(xué) 號(hào) 指導(dǎo)教師: 請(qǐng)輸入指導(dǎo)教師 2021年1月20日1、 原理 讀串口數(shù)據(jù)的原理是,只要當(dāng)有數(shù)據(jù)向串口發(fā)數(shù)據(jù)來(lái)時(shí),計(jì)算機(jī)就會(huì)自動(dòng)將其數(shù)據(jù)寫(xiě)到一個(gè)特定的緩沖區(qū),我們只要寫(xiě)程序去讀那個(gè)特定的緩沖區(qū)就可以了. 有數(shù)據(jù)向串口發(fā)過(guò)來(lái)時(shí),程序可以將數(shù)據(jù)接收到,接收的數(shù)據(jù)是字符型的,那么將數(shù)據(jù)轉(zhuǎn)化為數(shù)字型的,再將這個(gè)數(shù)據(jù)的大小作為畫(huà)圖的某一個(gè)點(diǎn)的縱坐標(biāo),橫坐標(biāo)為數(shù)據(jù)的序號(hào).將這些點(diǎn)用線連起來(lái)就是一個(gè)曲線圖了,這個(gè)就是圖形顯示基本原理.查看原來(lái)的數(shù)據(jù)的原理也是這樣的,不同的地方
2、就是,數(shù)據(jù)是從文件中來(lái),同樣的也是將多個(gè)數(shù)據(jù)分成一個(gè)一個(gè)的,然后這一個(gè)數(shù)據(jù)的大小就是畫(huà)圖的某一個(gè)點(diǎn)的縱坐標(biāo),橫坐標(biāo)同樣為數(shù)據(jù)的序號(hào),再將這些點(diǎn)用線連起來(lái)就是曲線圖. 圖形能移動(dòng)的原理,是我們首先改變的只是數(shù)據(jù),圖形并沒(méi)有變,但圖形的形式是由這些數(shù)據(jù)來(lái)確定的,當(dāng)數(shù)據(jù)發(fā)生變化后,我們通過(guò)刷新顯示區(qū)來(lái)變化的.二、程序流程發(fā)送到串口來(lái)的數(shù)據(jù)接收數(shù)據(jù)顯示保存數(shù)據(jù)查看以前的數(shù)據(jù)打開(kāi)以前的數(shù)據(jù)文件按方式查看按方式查看按方式查看選擇接收數(shù)據(jù)的方式OnButton7()OnButton6()OnButton5()OnButton4()OnComm()Display()OnPaint()OnComselect()
3、,OnComspeed()打開(kāi)以前的數(shù)據(jù)文件查看以前的數(shù)據(jù)OnComm()發(fā)送到串口來(lái)的數(shù)據(jù)3、 串口程序設(shè)計(jì)/文件 commDlg.cpp/一個(gè)類(lèi),對(duì)話(huà)框類(lèi),本程序使用的是對(duì)話(huà)框形式,這個(gè)類(lèi)是在VC用MFC自動(dòng)生成的,其中包括了對(duì)話(huà)框程序應(yīng)有的一些方法class CAboutDlg : public CDialog;/*以下的個(gè)方法也是VC的MFC的對(duì)話(huà)框程序固有的,也是MFC自動(dòng)生成的*/CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)void CAboutDlg:DoDataExchange(CDataExchange* pDX)BEGIN_M
4、ESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()CCommDlg:CCommDlg(CWnd* pParent /*=NULL*/): CDialog(CCommDlg:IDD, pParent)void CCommDlg:DoDataExchange(CDataExchange* pDX)/下面這個(gè)包括的是界面中的組件BEGIN_MESSAGE_MAP(CCommDlg, CDialog)END_MESSAGE_MAP()/ CCommDlg message handlersBOOL CCommDlg:OnInitDialog()void CCo
5、mmDlg:OnSysCommand(UINT nID, LPARAM lParam)/ The system calls this to obtain the cursor to display while the user drags the minimized window.HCURSOR CCommDlg:OnQueryDragIcon()BEGIN_EVENTSINK_MAP(CCommDlg, CDialog)END_EVENTSINK_MAP()/*以上的個(gè)方法也是VC的MFC的對(duì)話(huà)框程序固有的,也是MFC自動(dòng)生成的*/*我在做這個(gè)程序時(shí)以上的程序并沒(méi)有手動(dòng)修改*/ 畫(huà)圖函數(shù)/
6、算法:運(yùn)用LineTo函數(shù)把120個(gè)點(diǎn)連成折線void CCommDlg:OnPaint() /對(duì)串口數(shù)據(jù)的處理,包括接收,保存等void CCommDlg:OnComm() /開(kāi)串口程序void CCommDlg:OnButton1() /清除編輯框內(nèi)容程序void CCommDlg:OnButton2() /選擇那一個(gè)串口程序void CCommDlg:OnComselect() /選擇波特率void CCommDlg:OnComspeed() /停止/繼續(xù)程序void CCommDlg:OnStoprecv()/對(duì)數(shù)據(jù)顯示前的處理:將新數(shù)年據(jù)加到左邊,原來(lái)的右移一位void CCommD
7、lg:Display()/以下四個(gè)函數(shù)是查看原來(lái)數(shù)據(jù)的程序/按鈕 程序void CCommDlg:OnButton4() /按鈕 程序void CCommDlg:OnButton5() /按鈕 程序void CCommDlg:OnButton7() /此函數(shù)用來(lái)查看最后一屏數(shù)據(jù)void CCommDlg:OnButton8() 對(duì)于其它的文件中的程序我沒(méi)有手動(dòng)修改,均為MFC自動(dòng)生成,我在這就不作詳細(xì)介紹了.共有4個(gè)程序文件,5個(gè)頭文件comm.cppcommDlg.cppmscomm.cppStdAfx.cppcomm.hcommDlg.hmscomm.hResource.hStdAfs.h
8、 源 碼 愛(ài) 好 者 提供源碼發(fā)布與下載 互助、分享、提高 田遠(yuǎn)馳 4、 數(shù)據(jù)采集實(shí)時(shí)顯示程序設(shè)計(jì)1、串口控件使用說(shuō)明本程序使用VC6.0的通用串口控件MSCOMM32.OCX來(lái)對(duì)發(fā)送到串口的數(shù)據(jù)進(jìn)行采集處理。主要使用方法串口設(shè)置:m_Comm.SetSettings(“波特率,校驗(yàn)方式,數(shù)據(jù)位數(shù),停止位數(shù)”)取串口數(shù)據(jù):m_Comm.GetInput()你只首先要確定一個(gè)mscomm32.ocx控件在system目錄下并且該控件已經(jīng)被windows注冊(cè),本程序才能正常運(yùn)行。2、串口數(shù)據(jù)的獲取if(m_Comm.GetComm
9、Event()=2)/判斷接收緩沖區(qū)內(nèi)有無(wú)數(shù)據(jù)m_input1=m_Comm.GetInput();/讀取緩沖區(qū)內(nèi)的數(shù)據(jù)m_input2.GetOneDimSize();/確定數(shù)據(jù)長(zhǎng)度m_input2.GetElement(&i,data+i);/將數(shù)據(jù)轉(zhuǎn)換為BYTE型數(shù)組由于直接獲取的數(shù)據(jù)為VARIANT型數(shù)據(jù),我們?cè)偻ㄟ^(guò)數(shù)據(jù)類(lèi)型轉(zhuǎn)換來(lái)變?yōu)槲覀兯臄?shù)據(jù)類(lèi)型INT和CString型。3、整數(shù)位與小數(shù)位的處理為了提高精度,對(duì)數(shù)據(jù)采用兩位整數(shù),一位小數(shù)年的方式,在發(fā)送數(shù)據(jù)時(shí),最前一個(gè)字節(jié)為FF起始位,接著的一個(gè)字節(jié)為整數(shù)部分,再接著發(fā)一個(gè)字節(jié)的數(shù)據(jù)為小數(shù)部分。取數(shù)算法如下:BYTE a=* (c
10、har *)(data+i)BYTE b=* (char *)(data+(+i)float c=(float)a+(float)(b%10)/104、畫(huà)圖原理我畫(huà)圖使用的是畫(huà)直線的方式(LineTo()),先定義一個(gè)全局變量用來(lái)保存采集的數(shù)據(jù)值,在畫(huà)圖函數(shù)OnPaint()中用這個(gè)全局變量來(lái)作為縱坐標(biāo),等分的120個(gè)點(diǎn)作為橫坐標(biāo),那么就有120個(gè)點(diǎn),最后用直線將這120個(gè)點(diǎn)連接起來(lái)就組成了一個(gè)完整的曲線圖。只要當(dāng)全局變量中的數(shù)值發(fā)生變化后就使用函數(shù)this-Invalidate()強(qiáng)制重載OnPaint()函數(shù),那么數(shù)據(jù)圖就可以動(dòng)起來(lái)了。OnPaint()畫(huà)圖函數(shù)如下:void CCommD
11、lg:Display()if (NextTime = 600 & stop=FALSE)LineHightNextTime/5 = LineHight121; /中保存的是最新采集的一個(gè)數(shù)據(jù)elsefor (int i=0;iInvalidate();return;5、查看以前的數(shù)據(jù)查看以前的數(shù)據(jù)的方法是,將數(shù)據(jù)從文件中取出并將每一個(gè)數(shù)據(jù)都付給那一個(gè)全局變量,最后同樣用this-Invalidate()就能顯示以前的數(shù)據(jù)了。具體算法見(jiàn)commDlg.cpp文件中的OnButton4()和OnButton5()函數(shù)。按秒移動(dòng)查看以前數(shù)據(jù)算法見(jiàn)OnButton6()和OnButton7()。voi
12、d CCommDlg:OnButton7() if (stop=FALSE)gogo=NextTime;DTemp=m_ReceiveData;for (int i =0;i=600 & NextTimeinstr.GetLength()-600) NextTime=instr.GetLength()-600;for (i=0;iInvalidate();/更新圖相在移動(dòng)數(shù)據(jù)以前要對(duì)當(dāng)前顯示的數(shù)據(jù)進(jìn)行保存:gogo=NextTime;DTemp=m_ReceiveData;for (int i =0;i120;i+) LHTempi=LineHighti;以便在繼續(xù)接收時(shí)能接著原來(lái)的。6、數(shù)據(jù)
13、保存方式對(duì)采集的數(shù)據(jù)采用文本方式保存于一文件中,保存格式為,第120數(shù)據(jù)保存一次,數(shù)據(jù)采用推算法來(lái)確定時(shí)間。如:08.9 33.5 08.8 65.4 09.8 09.3程序算法為:if (file.Open(FilePath,CFile:modeCreate|CFile:modeReadWrite)file.Write(m_ReceiveData,600);/寫(xiě)入120個(gè)數(shù)據(jù)file.Close();完整算法見(jiàn):OnComm()7、通用性為了提高程序的通用性,串口的波特率,串口號(hào)都采用下拉選擇的方式,在使用中可跟據(jù)情況選擇。 源 碼 愛(ài) 好 者 提供源碼發(fā)布與下載 http:/www.code
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年阿里5次面試碰壁100天深造-Jetpack架構(gòu)組件從入門(mén)到精通險(xiǎn)獲騰訊年薪45w+offer
- 2024-2025學(xué)年下學(xué)期高一生物人教版期末必刷??碱}之人類(lèi)遺傳病
- 建筑施工特種作業(yè)-建筑起重機(jī)械安裝拆卸工(物料提升機(jī))真題庫(kù)-4
- 國(guó)家開(kāi)放大學(xué)電大《資源與運(yùn)營(yíng)管理》機(jī)考終結(jié)性2套真題題庫(kù)及答案9
- 色彩與心理題目及答案
- 軟考信管題目及答案
- 11 1 用樣本估計(jì)總體-2026版53高考數(shù)學(xué)總復(fù)習(xí)A版精煉
- 5 2 平面向量的數(shù)量積及其應(yīng)用-高考數(shù)學(xué)真題分類(lèi) 十年高考
- 2023-2024學(xué)年河南省許昌市高二下學(xué)期7月期末教學(xué)質(zhì)量檢測(cè)數(shù)學(xué)試題(解析版)
- 2024-2025學(xué)年陜西省西安市部分學(xué)校聯(lián)考高一上學(xué)期期末考試語(yǔ)文試題(解析版)
- 醫(yī)院電梯安全培訓(xùn)(同名873)課件
- 無(wú)人機(jī)飛行計(jì)劃申請(qǐng)表
- 主動(dòng)脈夾層腔內(nèi)隔絕術(shù)操作規(guī)范
- 初三自主招生簡(jiǎn)歷范文自薦信
- 電梯維修報(bào)價(jià)表格
- 礦區(qū)專(zhuān)項(xiàng)邊坡治理方案設(shè)計(jì)
- 國(guó)產(chǎn)上海7120手表機(jī)芯
- 4配電柜安全風(fēng)險(xiǎn)點(diǎn)告知牌
- 《賣(mài)炭翁》中考閱讀經(jīng)典賞析試題(共27題)
- 養(yǎng)老服務(wù)禮儀與實(shí)務(wù)全書(shū)ppt完整版課件最全電子教案正本書(shū)教學(xué)教程
- Q∕GDW 11445-2015 國(guó)家電網(wǎng)公司管理信息系統(tǒng)安全基線要求
評(píng)論
0/150
提交評(píng)論