- 论坛徽章:
- 0
|
下面是我写的一个简单的串口程序,可以实现串口的读写操作,但老大要求建立一个对话框,能把发送消息和接收消息在对话框上显示出来,我不知道该怎样做,那位大侠能指点一下,最好给点程序,多谢!多谢!多谢!
// wwww.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "stdio.h"
//#include "mscomm.h"
#define BUFFER_SIZE 1024
//#define MSG(szMsg) MessageBox (NULL, szMsg , TEXT("Error"), MB_OK)
HANDLE hCom;
OVERLAPPED m_OverlappedRead,m_OverlappedWrite;
BOOL OpenSerial(LPCTSTR lpszPortNum);
DWORD WriteDataSerial(LPCVOID pdata, DWORD len);
DWORD ReadDataSerial(TCHAR ReceiveBuf[BUFFER_SIZE]);
void StrToHex(char *str,char*strhex);
void CloseSerial(void);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
long LastError=ERROR_SUCCESS;
LastError=OpenSerial("COM1");
if(LastError!=TRUE)
{
MessageBox(NULL,TEXT("open failed"),TEXT("error"),MB_OK);
return LastError;
}
BYTE cmd[]={0x02,0x03,0x06,0x30,0x41,0xB3};
LastError=WriteDataSerial(cmd,6);
if(!LastError)
{
MessageBox(NULL,TEXT("write failed"),TEXT("error"),MB_OK);
return 0;
}
char ReceiveBuf[1024];
memset(ReceiveBuf,0,sizeof(ReceiveBuf));
LastError=ReadDataSerial(ReceiveBuf);
if(!LastError)
{
MessageBox(NULL,TEXT("ReadDataSerial:read data failed"),TEXT("Error"), MB_OK);
return 0;
}
char strhex[1024]={0};
StrToHex(ReceiveBuf,strhex);
CloseSerial();
return TRUE;
}
BOOL OpenSerial(LPCTSTR lpszPortNum)
{
DCB dcb;
BOOL bSuccess;
hCom = CreateFile( lpszPortNum,
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hCom ==INVALID_HANDLE_VALUE)
{
MessageBox (NULL, TEXT("OpenSerial():CreateFile() failed, invalid handle value!"), TEXT("Error"), MB_OK);
return FALSE;
}
bSuccess = GetCommState(hCom, &dcb);
if ( !bSuccess )
{
MessageBox (NULL, TEXT("OpenSerial(): GetCommState() failed!"), TEXT("Error"), MB_OK);
return FALSE;
}
dcb.BaudRate = CBR_9600 ;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY ;
dcb.StopBits = ONESTOPBIT ;
bSuccess = SetCommState(hCom, &dcb);
if ( ! bSuccess )
{
MessageBox (NULL, TEXT("OpenSerial(): SetCommState() failed!"), TEXT("Error"), MB_OK);
return FALSE;
}
COMMTIMEOUTS CommTimeouts;
GetCommTimeouts(hCom, &CommTimeouts);
CommTimeouts.ReadIntervalTimeout = 500;
CommTimeouts.ReadTotalTimeoutMultiplier = 10;
CommTimeouts.ReadTotalTimeoutConstant = 10;
CommTimeouts.WriteTotalTimeoutMultiplier = 50;
CommTimeouts.WriteTotalTimeoutConstant = 100;
if (!SetCommTimeouts(hCom, &CommTimeouts))
{
//L"不能设置超时参数";
return FALSE;
}
return TRUE ;
}
DWORD WriteDataSerial(LPCVOID pdata, DWORD len)
{
DWORD dwBytesWritten;
DWORD result;
if(hCom==INVALID_HANDLE_VALUE ) return FALSE;
result=WriteFile(hCom,pdata,len,&dwBytesWritten,NULL);
if (!result)
{
MessageBox (NULL, TEXT("WriteDataSerial(): WriteFile() failed\n"), TEXT("Error"), MB_OK);
return 0;
}
return dwBytesWritten;
}
DWORD ReadDataSerial(TCHAR ReceiveBuf[BUFFER_SIZE])
{
COMSTAT CommStat;
DWORD dwError,dwBytesRead;
DWORD bReadStatus;
if(hCom==INVALID_HANDLE_VALUE) return FALSE;
ClearCommError(hCom,&dwError,&CommStat);
bReadStatus=ReadFile(hCom,ReceiveBuf,128,&dwBytesRead,NULL);
if(!bReadStatus)
{
MessageBox(NULL,TEXT("read failed"),TEXT("error"),MB_OK);
return 0;
}
return dwBytesRead;
}
void StrToHex(char *str,char *strhex)
{
int i;
for(i=0;i<6;i++)
//for(i=0;*(str+i)!='\0';i++)
{
sprintf(strhex+i*3,"%02X ",(unsigned char)*(str+i));
}
}
void CloseSerial(void)
{
CloseHandle(hCom);
} |
|