第一范文网 - 专业文章范例文档资料分享平台

纯业余者用VC(MFC)编写串口调试助手(含VC6工程源文件)

来源:用户分享 时间:2025/5/21 2:12:08 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

//=====================消息处理函数结束===================== 双击“打开串口”按钮编辑代码如下: void CCommassistDlg::OnComcontrol() { // TODO: Add your control notification handler code here int nBaud,nData,nStop,nCal,nTemp; CString sTemp,siTemp; //波特率下拉框设置================= nTemp=m_baud.GetCurSel(); switch(nTemp) { case 0: nBaud = CBR_110; break; case 1: nBaud = CBR_300; break; case 2: nBaud = CBR_600; break; case 3: nBaud = CBR_1200; break; case 4: nBaud = CBR_2400; break; case 5: nBaud = CBR_4800; break; case 6: nBaud = CBR_9600; break; case 7: nBaud = CBR_14400; break; case 8: nBaud = CBR_19200; break; case 9: nBaud = CBR_38400; break; case 10: nBaud = CBR_56000; break; case 11: nBaud = CBR_57600; break; case 12: nBaud = CBR_115200; break; case 13: nBaud = CBR_128000; break; case 14: nBaud = CBR_256000; break; } //数据位下拉框设置================= nTemp=m_bdata.GetCurSel();

第 25 页 共 39 页

switch(nTemp) {

case 0: nData = 5; break; case 1: nData = 6; break; case 2: nData = 7; break; case 3: nData = 8; break; }

//停止位下拉框设置================= nTemp=m_bstop.GetCurSel(); switch(nTemp) {

case 0: nStop = ONESTOPBIT; break; case 1: nStop = ONE5STOPBITS; break; case 2: nStop = TWOSTOPBITS; break; }

//校验位下拉框设置================= nTemp=m_cal.GetCurSel(); switch(nTemp) {

case 0: nCal = NOPARITY; break; case 1: nCal = ODDPARITY; break; case 2: nCal = EVENPARITY; break; case 3: nCal = MARKPARITY; break; case 4: nCal = SPACEPARITY; break; }

int commnum_buf;

commnum_buf = m_comlist.GetCurSel(); if(commnum_buf < 0) { MessageBox(\获取串口错误\错误\ ComIsOK = FALSE;

第 26 页 共 39 页

return; } m_comlist.GetLBText(commnum_buf,strcomname); if(!ComIsOK) { OpenComm(nBaud,nData,nStop,nCal); //调用打开串口函数OpenComm() if(ComIsOK)

pReceiveThread=AfxBeginThread(ThreadFunc,this,THREAD_PRIORITY_LOWEST); //启动接收线程 ShowStatus(); if(!ComIsOK) m_comcontrol.SetWindowText(\打开串口\ else { m_comcontrol.SetText(\关闭串口\//按钮显示状态改变 m_comcontrol.SetForeColor(RGB(0,155,0)); //串口打开后文本颜色变绿 m_ctrlIcon.SetIcon((HICON)LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDI_ICON_OPEN), IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CXICON), 0)); //显示打开icon m_comlist.EnableWindow(false); //设置串口号下拉框不可用 m_baud.EnableWindow(false); //设置波特率下拉框不可用 m_bdata.EnableWindow(false); //设置数据位下拉框不可用 m_bstop.EnableWindow(false); //设置停止位下拉框不可用 m_cal.EnableWindow(false); //设置校验位下拉框不可用 GetDlgItem(IDC_BTN_HANDSEND)-> EnableWindow(true); //设置手动发送按钮不可用 GetDlgItem(IDC_BTN_AUTOSEND)-> EnableWindow(true); //设置自动发送按钮可用 GetDlgItem(IDC_EDIT_TIMER) -> EnableWindow(true); //设置发送间隔按钮可用 GetDlgItem(IDC_BTN_SELCTFILE)->EnableWindow(true); //设置选择文件按钮可用 GetDlgItem(IDC_BTN_SENDFILE)-> EnableWindow(true); //设置发送文件按钮可用 } return; } else { CloseComm(); //调用关闭串口函数CloseComm() // TerminateThread(pReceiveThread,0);

第 27 页 共 39 页

ShowStatus(); m_comcontrol.SetText(\打开串口\ m_comcontrol.SetForeColor(RGB(255,0,0)); m_ctrlIcon.SetIcon((HICON)LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDI_ICON_CLOSE), IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CXICON), 0)); //显示关闭icon m_comlist.EnableWindow(true); //设置串口号下拉框可用 m_baud.EnableWindow(true); //设置波特率下拉框可用 m_bdata.EnableWindow(true); //设置数据位下拉框可用 m_bstop.EnableWindow(true); //设置停止位下拉框可用 m_cal.EnableWindow(true); //设置校验位下拉框可用 GetDlgItem(IDC_BTN_HANDSEND)-> EnableWindow(false); //设置手动发送按钮不可用 GetDlgItem(IDC_BTN_AUTOSEND)-> EnableWindow(false); //设置自动发送按钮不可用 GetDlgItem(IDC_EDIT_TIMER) -> EnableWindow(false); //设置发送间隔按钮不可用 GetDlgItem(IDC_BTN_SELCTFILE)->EnableWindow(false); //设置选择文件按钮不可用 GetDlgItem(IDC_BTN_SENDFILE)-> EnableWindow(false); //设置发送文件按钮不可用 return; } }

添加读串口函数,代码如下:

DWORD CCommassistDlg::ReadComm() { CString strTemp; OVERLAPPED m_osRead; memset(&m_osRead,0,sizeof(OVERLAPPED)); m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); char lpInBuffer[1024]; DWORD dwBytesRead=1024; BOOL bReadStatus; bReadStatus=ReadFile(hCom,lpInBuffer,dwBytesRead,&dwBytesRead,&m_osRead); if(!bReadStatus) //如果ReadFile函数返回FALSE { if(GetLastError()==ERROR_IO_PENDING) //GetLastError()函数返回ERROR_IO_PENDING,表明串口正在进行读操作 {

第 28 页 共 39 页

纯业余者用VC(MFC)编写串口调试助手(含VC6工程源文件).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c1n1nn3aocx55mbv22qnx_7.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top