MFC 串列埠程式設計例項

2021-08-25 05:36:31 字數 3449 閱讀 9859

vc串列埠程式設計從實現方法上一般分為兩種,一種使用mscomm控制項,這種方法比較簡單,軟體的移植性較低,在這裡介紹一種串列埠封裝類的使用方法。

先看** commutils.cpp

#include "stdafx.h"

#include "commutils.h"

#include "stdio.h"

const

int read_timeout = 500;

commutils::commutils()

commutils::~commutils()

bool commutils::opencom(int port)

char szport[10];

sprintf(szport,"com%d",port);

int error=getlasterror();

if (hcomm == invalid_handle_value) return

false;

if (!setupcomm(hcomm, 1024, 512)) return

false;

commtimeouts commtimeouts;

commtimeouts.readintervaltimeout = maxdword;

commtimeouts.readtotaltimeoutconstant =0;

commtimeouts.readtotaltimeoutmultiplier =0;

commtimeouts.writetotaltimeoutconstant =0;

commtimeouts.writetotaltimeoutmultiplier=0;

if (!setcommtimeouts(hcomm, &commtimeouts)) return

false;

readovready.hevent = createevent(null,true,false,null);

writeovready.hevent =createevent(null,true,false,null);

security_attributes sa;

sa.nlength=sizeof(security_attributes);

sa.lpsecuritydescriptor=null;

sa.binherithandle=true;

dcb dcb;

getcommstate(hcomm, &dcb);

dcb.fbinary = true;

dcb.fparity = true;

// 波特率 資料位 標誌位 根據自己的裝置在此做修改

dcb.baudrate = cbr_9600; // baud rate 9600

dcb.bytesize = 8;

dcb.parity = noparity;

dcb.stopbits = onestopbit;

if (!setcommstate(hcomm, &dcb )) return

false;

bopencom = true;

return bopencom;

}bool commutils::writecom(unsigned

char *sendchar, int sendsize)

else

switch(resd)

default:

return

false;

break;}}

return

true;

}void commutils::closecom()

bool commutils::readcom(unsigned

char * receivedata, dword& receivelength)

/*bresult = readfile(port->m_hcomm, // handle to comm port

&rxbuff, // rx buffer pointer

1, // read one byte

&bytesread, // stores number of bytes read

&port->m_ov); // pointer to the m_ov structure

// deal with the error code */

if(receivelength == 0) return

false;

receivedata[receivelength] = 0;

dword dwread;

dword dwres = waitforsingleobject(readovready.hevent, read_timeout);

switch(dwres)

return

true;

}

標頭檔案commutils.h

#ifndef _commutils_h__

#define _commutils_h__

class commutils

;#endif

1.將.cpp .h 檔案拷貝到工程目錄下;

2.右擊專案—>新增—>現有項,將commutils.cpp commutils.h 新增進來

3.在自己的對話方塊類中包含該類的標頭檔案

#include 

"commutils.h"

定義乙個全域性變數

commutils mcommutils ;
接下來通過commutils 的例項mcommutils 來操作串列埠

開啟串列埠:

int port;  //要操作的串口號

mcommutils.opencom(port); //開啟串列埠

讀串列埠資料:

unsigned

char comdata[100]; //接收的資料

unsigned

long len = 0;

mcommutils.writecom(comdata, len);

寫資料:

unsigned

char sendarr[6];

mcommutils.writecom(sendarr,6)

最後關閉串列埠:

mcommutils.closecom();
該類的析構函式中也呼叫了該函式,在物件被銷毀時也會關掉串列埠。

用MFC實現串列埠程式設計

在windows應用程式的開發中,我們常常需要面臨與外圍資料來源裝置通訊的問題。計算機和微控制器 如mcs 51 都具有序列通訊口,可以設計相應的串列埠通訊程式,完成二者之間的資料通訊任務。實際工作中利用串列埠完成通訊任務的時候非常之多。已有一些文章介紹串列埠程式設計的文章在計算機雜誌上發表。但總的...

用MFC實現串列埠程式設計

在windows應用程式的開發中,我們常常需要面臨與外圍資料來源裝置通訊的問題。計算機和微控制器 如mcs 51 都具有序列通訊口,可以設計相應的串列埠通訊程式,完成二者之間的資料通訊任務。實際工作中利用串列埠完成通訊任務的時候非常之多。已有一些文章介紹串列埠程式設計的文章在計算機雜誌上發表。但總的...

Linux C 串列埠程式設計 詳解 例項

linux下的串列埠程式設計其實與windows下無本質差別,說白了就是類似讀寫檔案一樣,對串列埠進行讀寫操作,用到的函式無非就是open,close,read,write函式等。具體的讀寫操作可分為下面四個步驟 開啟串列埠 配置串列埠 讀寫串列埠 關閉串列埠 串列埠配置主要包括波特率的配置,校驗位...