VS2008串口控件操作
来源:互联网 发布:vscode 字体设置 编辑:程序博客网 时间:2024/06/08 07:53
通常情况,需要先注册串口控件,然后是 工具箱右键菜单 --》选择项--》COM组件--》Microsoft Communication Control,version
1 可能用到的变量
CMSComm m_ctrlComm;
CComboBox m_comList;
CString m_strRXData;
CString m_strTXData;
2 列举系统所有串口
void CSCommTestDlg::EnumPort(CComboBox * CmboBoxPort) { HKEY hKey = NULL; long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Hardware\\DeviceMap\\SerialComm",0,KEY_READ,&hKey); //打开注册表 if( lRet != ERROR_SUCCESS ) { MessageBox("无法找到串口!"); return; } DWORD i = 0; //键值序号 char cValueName[_MAX_PATH]; //键值名称 DWORD nValueNameSize = _MAX_PATH; //键值名称长度 DWORD ValueType; //键值类型 BYTE bValueData[_MAX_PATH]; //键值数值 DWORD nValueDataSize = _MAX_PATH; //键值数值长度 do { DWORD nValueNameSize = _MAX_PATH; //重置键值名称长度 DWORD nValueDataSize = _MAX_PATH; //重置键值数值长度 lRet = RegEnumValue(hKey, i, cValueName, &nValueNameSize, 0, &ValueType, bValueData, &nValueDataSize); //枚举键值 if(lRet == ERROR_SUCCESS) { CmboBoxPort->AddString((LPCTSTR)bValueData); //将串口号添加至组合框的列表中 } i++; }while(lRet == ERROR_SUCCESS); //读取完毕后退出循环 }
3 打开串口
void CSCommTestDlg::OnCbnSelchangeCombo1(){int portNum=0;if(m_comList.GetCurSel()>=0){ portNum=m_comList.GetCurSel()+1;if(m_ctrlComm.GetPortOpen())m_ctrlComm.SetPortOpen(FALSE);m_ctrlComm.SetCommPort(portNum);//选择comif( !m_ctrlComm.GetPortOpen())m_ctrlComm.SetPortOpen(TRUE);//打开串口else { AfxMessageBox("串口打开失败!"); return ; }m_ctrlComm.SetSettings("9600,n,8,1");//波特率9600,无校验,8个数据位,1个停止位m_ctrlComm.SetInputMode(1);m_ctrlComm.SetRThreshold(1); //参数1表示每当串口接收缓冲区中//有多于或等于1个字符时将引发一 //个接收数据的OnComm事件m_ctrlComm.SetInputLen(0);//设置当前接收区数据长度为0m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据CString str("");m_comList.GetLBText(m_comList.GetCurSel(),str);SetWindowText(str); AfxMessageBox("串口打开成功!");}}
4 发送数据
void CSCommTestDlg::OnButtonManualsend() {// TODO: Add your control notification handler code hereUpdateData(TRUE); //读取编辑框内容m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送数据m_strTXData="";UpdateData(FALSE); //清空编辑框内容}
5 接收数据
void CSCommTestDlg::OnComm() {// TODO: Add your control notification handler code hereVARIANT variant_inp;COleSafeArray safearray_inp;LONG len,k;BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.CString strtemp;if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符{variant_inp=m_ctrlComm.GetInput(); //读缓冲区safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量len=safearray_inp.GetOneDimSize(); //得到有效数据长度for(k=0;k<len;k++)safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组for(k=0;k<len;k++) //将数组转换为Cstring型变量{BYTE bt=*(char*)(rxdata+k); //字符型strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放m_strRXData+=strtemp; //加入接收编辑框对应字符串 }}UpdateData(FALSE); //更新编辑框内容}
0 0
- VS2008串口控件操作
- c#的串口控件操作
- VS2008 串口控件 MSCOMM 用法变了,更简单了
- VS2008下用MFC 的MSComm控件编写串口程序
- VS2008下用MFC 的MSComm控件编写串口程序
- VS2008下用MFC 的MSComm控件编写串口程序
- VS2008高版本VC使用微软串口控件mscomm小结
- vs2008\bsp\BspUart0.h.c__串口基本操作
- vs2008\bsp\BspUart1.h.c__串口基本操作
- vs2008\bsp\BspUart2.h.c__串口基本操作
- VS2008串口测试程序
- VB中 MSComm串口操作控件使用详解
- C#串口接受数据跨线程操作控件(留存+备份)
- 在WPF中多线程操作GUI控件,串口接…
- 串口操作
- 操作串口
- 串口操作
- 操作串口
- doesn't contain a valid partition table 解决方法------转
- hdu 1698 简单区间更新
- 深度学习(四)CNN卷积神经网络推导和实现
- 消息队列(3):在多进程中利用信号量进行同步、传递消息
- linux系统时间和硬件时钟时间 FAQ
- VS2008串口控件操作
- Huffman(霍夫曼)编码
- 258.Add Digits
- 信息的表示和处理·二
- opencv中遍历文件夹下的文件
- 微信小程序底部导航Tabbar
- 怎样推导圆面积计算公式?
- swift textView出现越界的exception
- Java数据库MySQL备份与还原