MFC自动搜索串口编程
来源:互联网 发布:汽车资源软件下载 编辑:程序博客网 时间:2024/06/11 01:32
参照下面博客的方法实现了串口通信,但是博文里的串口需要事先知道自己所用所用串口,然后在COM口下拉列表里选择对应的,不是 很方便,然后参考网上的资料加了自动搜索串口的功能
http://blog.csdn.net/a_runing_man/article/details/9947343
功能的实现:
首先注释掉上面博文里的
//int nSel; // nSel = m_comboCom.GetCurSel();//获取组合框控件的列表框中选中项的索引 // // m_ctrlComm.put_CommPort(nSel+1);//选择串口号(这里因为列表框的索引号是从0开始,所以(nSel+1)对应的才是我们所选的串口号) // m_ctrlComm.put_PortOpen(TRUE);//打开串口 // m_ctrlComm.put_RThreshold(2);//收到两个字节引发OnComm事件 // m_ctrlComm.put_InputMode(1);//输入模式选为二进制 // m_ctrlComm.put_Settings(_T("9600,n,8,1"));//设置串口参数,波特率,无奇偶校验,位停止位,位数据位 // m_ctrlComm.put_InputMode(1); // 以二进制方式检取数据 // m_ctrlComm.put_RThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 // m_ctrlComm.put_InputLen(0); //设置当前接收区数据长度为0 // m_ctrlComm.get_Input();//先预读缓冲区以清除残留数据 // // m_setOk = true; //标记串口设置OK然后加个Button按钮,改为打开按钮,添加事件处理程序程序
CString strChoosed; int i; m_comboCom.GetLBText(m_comboCom.GetCurSel(),strChoosed);char data=strChoosed.GetAt (3); i = atoi(&data); m_ctrlComm.put_CommPort(i);//选择串口号(这里因为列表框的索引号是从0开始,所以(nSel+1)对应的才是我们所选的串口号) m_ctrlComm.put_PortOpen(TRUE);//打开串口 m_ctrlComm.put_RThreshold(2);//收到两个字节引发OnComm事件 m_ctrlComm.put_InputMode(1);//输入模式选为二进制 m_ctrlComm.put_Settings(_T("9600,n,8,1"));//设置串口参数,波特率,无奇偶校验,位停止位,位数据位 m_ctrlComm.put_InputMode(1); // 以二进制方式检取数据 m_ctrlComm.put_RThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 m_ctrlComm.put_InputLen(0); //设置当前接收区数据长度为0 m_ctrlComm.get_Input();//先预读缓冲区以清除残留数据 m_setOk = true; //标记串口设置OK m_ctrlComm.put_PortOpen(false);//打开串口最后在添加个函数void GetCOM(void),这里111是我自己建的工程
void CMy111Dlg::GetCOM(void){ //程序启动时获取全部可用串口 HANDLE hCom; int i,num,k; CString str; BOOL flag; ((CComboBox *)GetDlgItem(IDC_COMBO1))->ResetContent(); flag = FALSE; num = 0; for (i = 1;i <= 16;i++) {//此程序支持16个串口 str.Format("\\\\.\\COM%d",i); hCom = CreateFile(str, 0, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if(INVALID_HANDLE_VALUE != hCom ) {//能打开该串口,则添加该串口 CloseHandle(hCom); str = str.Mid(4); ((CComboBox *)GetDlgItem(IDC_COMBO1))->AddString(str); if (flag == FALSE) { flag = TRUE; num = i; } } } i = ((CComboBox *)GetDlgItem(IDC_COMBO1))->GetCount(); if (i == 0) {//若找不到可用串口则禁用“打开串口”功能 ((CComboBox *)GetDlgItem(IDC_COMBO1))->EnableWindow(FALSE); } else { k = ((CComboBox *)GetDlgItem((IDC_COMBO1)))->GetCount(); ((CComboBox *)GetDlgItem(IDC_COMBO1))->SetCurSel(k - 1); }}
最后在初始化对话框函数OnInitDialog()里加上GetCOM()即可,最后如图所示运行后自动选择串口,只需点击打开串口就能实现通信了
阅读全文
0 0
- MFC自动搜索串口编程
- MFC 串口编程
- MFC串口编程
- MFC串口编程
- MFC 串口编程总结
- MFC 串口编程
- MFC 串口通信编程
- MFC 串口编程
- MFC下边自动寻找串口
- 用MFC实现串口编程
- 用MFC实现串口编程
- 用MFC实现串口编程
- 用MFC实现串口编程
- 用MFC实现串口编程
- 用MFC实现串口编程
- 用MFC实现串口编程
- 用MFC实现串口编程
- 用MFC实现串口编程
- ddd
- A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection
- 过拟合及改善方法
- 打印出杨辉三角形(要求打印出 10 行)(简单版)
- 2016年黑马android安卓74期完整实战开发基础就业视频
- MFC自动搜索串口编程
- Python 安装 Pillow
- 如何将网络上的共享文件映射到本地
- php变量存储结构
- caffe 框架用到的资料深度学习文章
- ES6 字符串
- 生成模型(generative model)与判别模型(discriminate)的联系及区别
- jquery easyui-datagrid错误
- 构造函数的作用