国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于VC++6.0的數(shù)據(jù)可視化串口通信

2012-01-15 03:51:40葉艷艷陳西曲
關(guān)鍵詞:PC機(jī)流程圖控件

葉艷艷,樊 峰,陳西曲

(武漢工業(yè)學(xué)院電氣與電子工程學(xué)院,湖北武漢430023

隨著計(jì)算機(jī)網(wǎng)絡(luò)及應(yīng)用的發(fā)展,通信功能即計(jì)算機(jī)與外界設(shè)備或計(jì)算機(jī)和計(jì)算機(jī)之間的數(shù)據(jù)傳輸顯得越來越重要。串口通信技術(shù)因其實(shí)現(xiàn)簡單、使用靈活方便及傳輸數(shù)據(jù)穩(wěn)定可靠等優(yōu)點(diǎn),作為一種重要的數(shù)據(jù)傳送手段得到越來越廣泛的應(yīng)用[1-5]。因此,針對(duì)串口通信在計(jì)算機(jī)等上位機(jī)中的開發(fā),在項(xiàng)目開發(fā)過程中有著重要地位。本文講解了在Windows平臺(tái)下的串口通信,在VC++6.0開發(fā)環(huán)境下,單片機(jī)與PC機(jī)之間的數(shù)據(jù)通信及實(shí)時(shí)描點(diǎn)的實(shí)現(xiàn)過程。

1 串行通信基本原理及波形顯示實(shí)現(xiàn)

1.1 串行通信的基本原理

作為CPU和串行設(shè)備間的編碼轉(zhuǎn)換器,串口將從CPU發(fā)送出去的字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位,在接收數(shù)據(jù)時(shí),又將串行的位轉(zhuǎn)換為字節(jié)數(shù)據(jù)[2]。

在Windows環(huán)境下,串口是系統(tǒng)資源的一部分。串口在Win32中是作為文件來進(jìn)行處理的,并不直接對(duì)端口進(jìn)行操作。Win32提供了相應(yīng)的文件I/O函數(shù)與通信函數(shù),通過了解這些函數(shù)的使用,就可以編制出符合不同需要的通信程序[3]。應(yīng)用程序要使用串口進(jìn)行通信,必須在使用之前向操作系統(tǒng)提出資源申請(qǐng)要求即打開串口,通信完成后必須釋放資源即關(guān)閉串口[1-3]。

在VC++6.0開發(fā)環(huán)境下,實(shí)現(xiàn)串口通信的方法有多種,但是通過添加串行通信控件MSComm(Microsoft Communication Control)控件來實(shí)現(xiàn)串行通信是比較常用的一種方法。因?yàn)镸SComm控件是微軟公司開發(fā)的新技術(shù),封裝了串口通信的全部API函數(shù),這樣使用者就不必花費(fèi)大量時(shí)間去了解復(fù)雜的API函數(shù)及硬件電路原理,只需添加少量的代碼就能實(shí)現(xiàn)想要的功能,編程容易實(shí)現(xiàn)。

另外,還可通過使用Windows系統(tǒng)提供的應(yīng)用程序接口API(Application Programming Interface)函數(shù)和多線程編程來實(shí)現(xiàn)串口編程[4]。

本文通過對(duì)MSComm控件和NTGraph控件的操作來實(shí)現(xiàn)PC機(jī)與單片機(jī)之間的數(shù)據(jù)傳送和波形顯示。

1.2 利用MSComm控件和NTGraph控件實(shí)現(xiàn)串口通信及波形顯示

1.2.1 在VC++開發(fā)環(huán)境下用MSComm控件實(shí)現(xiàn)串口通信

因MSComm控件內(nèi)部封裝了串口通信的全部API函數(shù),采用MSComm控件實(shí)現(xiàn)串行通信具有不可替代的優(yōu)勢(shì),故本文通過使用MSComm控件來實(shí)現(xiàn)串行通信。

應(yīng)用MSComm控件實(shí)現(xiàn)串口通信工作流程圖如圖1所示。

圖1 MSComm控件工作流程圖

(1)MSComm控件的加載。菜單欄Project→Add to project→Components and Controls Gallery→打開Registered ActiveX Controls文件夾→選擇Microsoft Communications Control,version 6.0,單擊 Insert。完成MSComm類及相應(yīng)文件的添加,生成mscomm.h和mscomm.cpp的文件。

(2)在基于對(duì)話框的程序中使用控件創(chuàng)建數(shù)據(jù)收發(fā)窗口界面。插入MSComm控件完成后,工具箱中會(huì)出現(xiàn)一個(gè)MSComm控件的圖標(biāo),將圖標(biāo)拖到對(duì)話框中→編輯屬性修改ID→點(diǎn)擊右鍵,建立控件的類向?qū)А砑涌丶囊粋€(gè)對(duì)象m_Comm→建立控件響應(yīng)代碼框架→雙擊控件進(jìn)入代碼框架添加代碼程序,一個(gè)控件即添加完成,對(duì)需要的各控件按照同樣方法逐一添加并設(shè)置。設(shè)置完參數(shù)的控件即可實(shí)現(xiàn)其相應(yīng)的功能,比如發(fā)送窗口就能實(shí)現(xiàn)數(shù)據(jù)發(fā)送、接收窗口能實(shí)現(xiàn)數(shù)據(jù)接收等。設(shè)置完成后其對(duì)話框界面如圖2所示。

圖2 MSComm控件添加及參數(shù)設(shè)置后界面

(3)部分關(guān)鍵代碼實(shí)現(xiàn)步驟與分析。分析如下。

第一步,打開串口。

在OpenCOM()函數(shù)中設(shè)置打開串口,并以二進(jìn)制方式讀取數(shù)據(jù)及清除緩沖區(qū)殘留數(shù)據(jù)。

第二步,將變量和串口分別進(jìn)行初始化。

首先,我們?cè)赺Dlg::_Dlg(CWnd*pParent/*=NULL*/)

:CDialog(_Dlg::IDD,pParent)函數(shù)中將變量初始化。本例中約定使用PC機(jī)的COM3,波特率為2400b/s,數(shù)據(jù)格式為8個(gè)數(shù)據(jù)位,1個(gè)停止位,無奇偶校驗(yàn)位。

其次,在OnInitDialog()中添加初始化語句,用于設(shè)置串口通信的屬性和打開串口。

((CComboBox*)GetDlgItem(IDC_COMBO_COM))->SetCurSel(m_nCom);//設(shè)置默認(rèn)打開串口

UpdateData(FALSE);

第三步:串口讀寫。

雙擊MSComm控件,創(chuàng)建OnComm()函數(shù),實(shí)現(xiàn)數(shù)據(jù)讀寫。使用VARIANT數(shù)據(jù)結(jié)構(gòu)即VARIANT GetInput() 和 void SetOutput(const Variant&new Value)函數(shù)原型來完成串口的讀寫,其中GetInput()讀取接收緩沖區(qū)的字符,SetOutput()向發(fā)送緩沖區(qū)寫數(shù)據(jù)流。

第四步,雙擊發(fā)送按鈕,創(chuàng)建發(fā)送函數(shù)OnButtonSend(),設(shè)置字符數(shù)據(jù)發(fā)送方式及位數(shù)。

利用MSComm控件順利實(shí)現(xiàn)了PC機(jī)與單片機(jī)之間的串口通信,實(shí)現(xiàn)了數(shù)據(jù)穩(wěn)定可靠的傳輸。

1.2.2 利用NTGraph控件實(shí)現(xiàn)波形顯示及實(shí)時(shí)描點(diǎn)

NTGraph控件因其接口函數(shù)簡單,只需要調(diào)用少數(shù)函數(shù)就能實(shí)現(xiàn)我們想要的功能,故是用來繪圖的很好的控件。本文就是利用NTGraph控件來實(shí)現(xiàn)波形顯示及實(shí)時(shí)描點(diǎn)的。應(yīng)用NTGraph控件顯示波形的工作流程圖如圖3所示。

圖3 NTGraph控件工作流程圖

(1)NTGraph控件的插入。因?yàn)镹TGraph控件不是Windows自帶的控件,故需注冊(cè)以后才可使用。點(diǎn)擊開始→運(yùn)行→輸入regsvr32/X NTGraph.ocx(/X是控件路徑)→確定,完成注冊(cè)。然后在之前添加的MSComm控件RS232對(duì)話框上點(diǎn)擊右鍵→選擇Insert ActiveX Control→選擇 NTGraph Control,點(diǎn)擊OK,NTGraph控件即添加完成。右鍵點(diǎn)擊NTgraphCtrl1選擇屬性,即可根據(jù)需要選擇修改一些屬性,或者在程序里修改也行。修改完屬性的完整界面如圖4所示。

圖4 NTGraph控件添加完成后對(duì)話框界面

控件添加完成后,再給控件添加一個(gè)對(duì)象,這樣對(duì)象就可以訪問NTGraph類中的成員函數(shù)了。點(diǎn)擊菜單欄上的View→Classwizard→Member Variables→選擇IDC_NTGRAPHCTRL→點(diǎn)擊Add Variable添加變量m_Graph→點(diǎn)擊OK,即完成了對(duì)象的添加,添加完對(duì)象后,寫程序控制NTGraph控件,使其實(shí)現(xiàn)實(shí)時(shí)描點(diǎn)和顯示波形。

(2)部分關(guān)鍵代碼實(shí)現(xiàn)步驟與分析。首先,在OnInitDialog()的末尾添加NTGraph控件的初始化設(shè)置語句m_Graph.Set,用于設(shè)置X軸、Y軸及線條顯示的屬性等。然后,在OnComm()函數(shù)中加入自定義str_change_int(Cstring)函數(shù),用來數(shù)據(jù)類型的轉(zhuǎn)換,并利用一個(gè)for循環(huán)來實(shí)現(xiàn)實(shí)時(shí)描點(diǎn)及顯示波形。

1.3 使用51單片機(jī)的RS232串口收發(fā)程序,用以實(shí)現(xiàn)與PC機(jī)之間的通訊

8051單片機(jī)上有UART(通用異步發(fā)送接收器)用于串口通信,由TXD端發(fā)送數(shù)據(jù),RXD端接收數(shù)據(jù),并有2個(gè)緩沖器,一個(gè)用作發(fā)送緩沖器,一個(gè)用作接收緩沖器。8051采用C語言進(jìn)行的程序設(shè)計(jì)。51單片機(jī)的RS232串口數(shù)據(jù)收發(fā)流程圖如圖5所示。

圖5 51單片機(jī)的工作流程圖

2 結(jié)果與分析

本文講解了在基于VC++6.0的開發(fā)環(huán)境下,通過利用MSComm控件及NTGraph控件,成功完成了十六進(jìn)制數(shù)據(jù)的收發(fā)及波形顯示:從PC機(jī)輸入十六進(jìn)制數(shù),PC機(jī)通過串口將數(shù)據(jù)發(fā)送到單片機(jī)上,單片機(jī)RXD端接收完成并產(chǎn)生響應(yīng)后,再將數(shù)據(jù)從TXD端發(fā)送到PC機(jī),PC機(jī)接收數(shù)據(jù)并以方波的形式顯示,成功實(shí)現(xiàn)了51單片機(jī)與PC機(jī)之間的串口通信與方波的產(chǎn)生。圖6是從PC機(jī)輸入兩位十六進(jìn)制數(shù),其接收情況及波形顯示情況(延時(shí)100 ms)。由此可見用MSComm控件實(shí)現(xiàn)串口通信軟件的開發(fā)是穩(wěn)定、可靠的。系統(tǒng)整體工作流程圖如圖7所示。

圖6 結(jié)果展示圖

圖7 系統(tǒng)整體工作流程圖

3 總結(jié)

本文利用ActiveX控件MSComm實(shí)現(xiàn)對(duì)串口的訪問及對(duì)數(shù)據(jù)的采集,編程簡單,可移植性強(qiáng),穩(wěn)定性好,可靠性高。和NTGraph控件聯(lián)合使用,順利實(shí)現(xiàn)了對(duì)串口數(shù)據(jù)的實(shí)時(shí)描點(diǎn)及波形顯示。

[1] 劉書智.VC++實(shí)踐與提高—串口通信與工程應(yīng)用篇(第二版)[M].北京:中國鐵道出版社,2009.

[2] 陳細(xì)軍,譚民.VC編程中的串口通信技術(shù)[J].計(jì)算機(jī)應(yīng)用,2001(9):94-95.

[3] 趙軍.利用VC++下MSComm開發(fā)的串口通信軟件[J].中國測(cè)試技術(shù),2006(6):97-99.

[4] 岳志高.MSComm控件在VC++6.0串口通信中的應(yīng)用[J].長春工程學(xué)院學(xué)報(bào),2009(1):72-73.

[5] 韓中合.用ActiveX控件實(shí)現(xiàn)串口通信編程[J].山東電力技術(shù),2003(2):15-17.

[6] 邱建華,彭志豪.串口通信技術(shù)在Visual C++中的實(shí)現(xiàn)[J].技術(shù),2005(5):94-95.

猜你喜歡
PC機(jī)流程圖控件
關(guān)于.net控件數(shù)組的探討
軟件(2018年7期)2018-08-13 09:44:42
基于PC機(jī)與單片機(jī)的多機(jī)通信技術(shù)及抗干擾方法
基于三菱FXPLC的感應(yīng)淬火機(jī)床與PC機(jī)的串行通信實(shí)現(xiàn)
VC.NET下實(shí)現(xiàn)dsPIC單片機(jī)與PC機(jī)的通信
電子制作(2017年23期)2017-02-02 07:16:47
專利申請(qǐng)審批流程圖
河南科技(2016年8期)2016-09-03 08:08:22
專利申請(qǐng)審批流程圖
河南科技(2016年6期)2016-08-13 08:18:29
寧??h村級(jí)權(quán)力清單36條
《天津醫(yī)藥》稿件處理流程圖
就這樣玩會(huì)VBA中常見的自定義控件
電腦迷(2012年24期)2012-04-29 00:44:03
讀編往來
丹东市| 鲜城| 白河县| 永和县| 化州市| 克什克腾旗| 志丹县| 哈尔滨市| 罗甸县| 阳高县| 新宁县| 巴塘县| 萨嘎县| 尼勒克县| 呼和浩特市| 武夷山市| 阿坝县| 丘北县| 新丰县| 宁安市| 隆尧县| 南溪县| 临海市| 津南区| 盐边县| 马关县| 南城县| 宁河县| 景德镇市| 康平县| 名山县| 镇沅| 建德市| 太康县| 普安县| 凤城市| 大庆市| 巴彦县| 阿鲁科尔沁旗| 泉州市| 辽源市|