API串口操作封装类,第1张

API串口操作封装类,第2张

Comm.h头文件:
# ifndef _ _ CComm _ h _
# define _ _ CComm _ h _
class CComm//串口操作封装类
{
Private:[/br/
public:
CComm();//构造函数
~ CComm();//析构函数
BOOL OpenComm(int nComm);//打开串口函数
void close com();//关闭串口函数
Bool Set Comm (int波特率/*波特率*/,int nParity/*奇偶校验位*/,int nByteSize/*字节数*/,int nStopBits/*停止位*/);//设置串口函数
bool settings();//设置超时函数
boolreadcomm (char * lpbuf,intn len);//读取串口函数
Bool WriteComm (char * lpbuf,intn len);//写串口函数
};
#endif
Comm.cpp实现文件:
# include " STD afx . h "
# include " comm . h "
/constructor
ccomm::ccomm(/destructor
ccomm::~ ccomm()
{
close com();//关闭串口
}
/打开串口函数
boolcomm::opencomm(intn comm)
{
cstringstrcommname;
CString strer info;
strCommName。格式(" COM%d ",nComm);
m _ hcomm =::CREATE FILE(strcommname,/*打开串口名称*/
generic _ read | generic _ write,/*允许读写*/
0,/*独占方式*/
。/*安全属性*/
OPEN_EXISTING,/* open而不是creating */
0,/*同步方法*/
NULL);/*模板句柄*/
if(m _ hcomm = = invalid _ handle _ value)
{
strer info . format("打开%s失败!",str commname);
AfxMessageBox(strer info);
返回FALSE
}
else
{
返回TRUE
}
}
/关闭串口函数
Voidcomm::closecomm()
{
if(m _ hcomm!= INVALID _ HANDLE _ VALUE)
{
::close HANDLE(m _ hComm);
m _ hComm = INVALID _ HANDLE _ VALUE;
}
}
/设置串口函数
boolcomm::setcomm(int nbaudrate/*波特率*/,int nParity/*奇偶校验位*/,int nByteSize/*字节数*/,int nstopbits。
memset(&stDCB,0,sizeof(stDCB));
如果(!::getCommState (M _ HComm,& STDCB))//获取串口的当前状态属性
返回FALSE
stDCB。BaudRate = nBaudRate//波特率
stdcb . fparity = 0;
stDCB。奇偶= nParity//奇偶校验位(NOPARITY等。)
stDCB。ByteSize = nByteSize//每个字节有8位
stDCB。StopBits = nStopBits//停止位(一位等。)
如果(!::setCommState (M _ HComm,& STDCB))//设置串口状态属性
返回FALSE
如果(!::setupcomm (M _ HComm,1024,1024))//设置输入缓冲区和输出缓冲区的大小
返回FALSE
::PurgeComm(m_hComm,PURGE _ tx clear | PURGE _ rx clear);//clear 空输入输出缓冲区
返回TRUE
}
/Examda提示:设置超时函数
Boolcomm::SetTimeouts()
{
comm time outs ST time outs;
超时。ReadIntervalTimeout = 0;//设置读取超时
ST time outs . readtotaltimeoutmultiplier = 100;
超时。ReadTotalTimeoutConstant = 500
超时。WriteTotalTimeoutMultiplier = 100;//设置写超时
ST times . writetotaltimeoutconstant = 500;
::SetCommTimeouts(m _ hComm,& ST time outs);//Set time out
::Purgecomm(M _ HComm,Purge _ tx clear | Purge _ rx clear);//clear 空输入输出缓冲区
返回TRUE
}
/Read串口函数
boolcomm::readcomm(char * lpbuf,intn len)
{
if(::readfile(m _ hcomm,LP buf,nlen,)
}
else
{
/*
CString str;
str。格式(" %d ",nLen);
AfxMessageBox(str);
*/
//::PurgeComm(m _ hComm,PURGE _ tx abort | PURGE _ rx abort | PURGE _ tx clear | PURGE _ rx clear);
返回TRUE
}
}
/Write串口函数
Boolcomm::WriteComm(char * LP buf,intn len)
{
if(::WriteFile(M _ HComm
}
else
{
/*
CString str;
str。格式(" %d ",nLen);
AfxMessageBox(str);
*/
返回TRUE
}
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » API串口操作封装类

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情