19,500
社区成员
发帖
与我相关
我的任务
分享
//按钮事件
OnBnClickedreaddata()
{
if(!OpenCom())
{
MessageBox(L"Open Fail");
return;
}
WriteFile(hCom,"asda22\r\n",20,0,NULL);
CreateThread(
NULL, //安全属性使用缺省。
0, //线程的堆栈大小。
ReadThreadFunc, //线程运行函数地址。
this, //传给线程函数的参数。
0, //创建标志。
0); //成功创建后的线程标识码。
return;
}
/////////////////////////////////////////////////
OpenCom()
{
DWORD dwError;
LPCWSTR lpError=L"com1 open Error",lpOpenSucc=L"com1 open success";
hCom = CreateFile(L"COM1:", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hCom == INVALID_HANDLE_VALUE)
{
dwError = GetLastError();
MessageBox(lpError);
return FALSE;
}
else
{
SetCommMask (hCom, EV_RXCHAR);//指定端口监测的事件集
SetupComm(hCom,1024,1024);//分配设备缓冲区
PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);//初始化缓冲区中的信息
if(!initDCB())
return FALSE;
// if(!InitComTimeouts())//设置端口超时值
// return false;
//设置端口上指定信号的状态
// EscapeCommFunction (hCom, SETDTR);// SETDTR: 发送DTR (data-terminal-ready)信号
// EscapeCommFunction (hCom, SETRTS);// SETRTS: 发送RTS (request-to-send)信号
return true;
}
}
////////////////////////////////////////////////////
initDCB()
{
DWORD dwError;
dcb.DCBlength=sizeof(DCB);
GetCommState(hCom,&dcb);
dcb.BaudRate = 9600; //波特率为9600
dcb.ByteSize = 8; //数据位数为8位
dcb.Parity = 0; //偶校验
dcb.StopBits = ONESTOPBIT; //1个停止位
dcb.fBinary =TRUE;
if (!SetCommState(hCom, &dcb))
{
MessageBox(L"Set DBC Error");
dwError = GetLastError ();
return FALSE;
}
else
{
return TRUE;
}
}
//////////////////////////////////////////////////////////////
DWORD WINAPI ReadThreadFunc(LPVOID lparam)
{
Cwince_AppDlg * Dlg = (Cwince_AppDlg*)lparam;
BYTE Byte;
int iCounter = 0;
DWORD dwBytes;
char ReceiveBuf[1000]; ///缓冲区的大小
SetCommMask (Dlg->hCom, EV_RXCHAR); ///只接收字符
while (Dlg->hCom != INVALID_HANDLE_VALUE)
{
DWORD dwCommStatus;
WaitCommEvent(Dlg->hCom, &dwCommStatus, 0);
SetCommMask (Dlg->hCom, EV_RXCHAR); ///重新设置要等待的信号
//// 接收数据
do
{
ReadFile(Dlg->hCom, &Byte, 1, &dwBytes, 0);
if(dwBytes == 1)
{
MessageBox(NULL,L"get ",NULL,NULL);
ReceiveBuf[iCounter++] = Byte;
if(iCounter == 1000)
{
///L"接收缓冲区已满";
return -1;
}
}
} while (dwBytes == 1);
if(iCounter == 0) ///没接到数据
{
continue;
}
} ///////end while
return 0;
}