3,245
社区成员
发帖
与我相关
我的任务
分享
void C串口测试Dlg::OnBnClickedOpencom()
{
// TODO: 在此添加控件通知处理程序代码
if(m_mscomm.get_PortOpen())
{
m_mscomm.put_PortOpen(FALSE);
}
m_mscomm.put_CommPort(4);//选择COM1
m_mscomm.put_InBufferSize(1024);//接收缓冲区
m_mscomm.put_OutBufferSize(1024);//发送缓冲区
m_mscomm.put_InputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_mscomm.put_InputMode(1);//以二进制方式读写数据
m_mscomm.put_RThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
m_mscomm.put_Settings(_T("9600,n,8,1"));//波特率9600,无校验位,8个数据位,1个停止位
if(!m_mscomm.get_PortOpen())
{
m_mscomm.put_PortOpen(TRUE);
AfxMessageBox(_T("串口1打开成功"));
}
else
{
m_mscomm.put_OutBufferCount(0);
AfxMessageBox(_T("串口1打开失败"));
}
}
void C串口测试Dlg::OnBnClickedClosecom()
{
// TODO: 在此添加控件通知处理程序代码
m_mscomm.put_PortOpen(FALSE);//关闭串口
AfxMessageBox(_T("串口1已关闭"));
}
void C串口测试Dlg::OnBnClickedSend()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);//读取编辑框内容
m_mscomm.put_Output(COleVariant(m_Send));//发送数据
m_Send.Empty();//发送后清空数据
UpdateData(FALSE);//更新编辑框内容
}
BEGIN_EVENTSINK_MAP(C串口测试Dlg, CDialogEx)
ON_EVENT(C串口测试Dlg, IDC_MSCOMM, 1, C串口测试Dlg::OnCommMscomm, VTS_NONE)
END_EVENTSINK_MAP()
void C串口测试Dlg::OnCommMscomm()
{
// TODO: 在此处添加消息处理程序代码
static unsigned int cnt=0;
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len,k;
unsigned int data[1024]={0};
byte rxdata[1024];//设置byte数组
CString strtemp;
if(m_mscomm.get_CommEvent()==2)//值为2表示接收缓冲区内有字符
{
cnt++;
variant_inp=m_mscomm.get_Input();//读缓冲区消息
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize();//得到有效的数据长度
for(k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);
}
for(k=0;k<len;k++)//将数组转换为CString型变量
{
strtemp.Format(_T("%x"),*(rxdata+k));
m_Receive+=strtemp;
CString temp=_T("\r\n");
m_Receive+=temp;
}
}
UpdateData(FALSE);
}
if(m_mscomm.get_PortOpen())
m_mscomm.put_PortOpen(FALSE);
m_mscomm.put_CommPort(4);//选择COM1
m_mscomm.put_PortOpen(TRUE);
if(m_mscomm.get_PortOpen())
{
m_mscomm.put_InBufferSize(1024);//接收缓冲区
m_mscomm.put_OutBufferSize(1024);//发送缓冲区
m_mscomm.put_InputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_mscomm.put_InputMode(1);//以二进制方式读写数据
m_mscomm.put_RThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
m_mscomm.put_Settings(_T("9600,n,8,1"));//波特率9600,无校验位,8个数据位,1个停止位
AfxMessageBox(_T("串口1打开成功"));
}
else
{
AfxMessageBox(_T("串口1打开失败"));
}