注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
lb8820265的个人空间 https://home.eeworld.com.cn/space-uid-527961.html [收藏] [复制] [分享] [RSS]
日志

串口示波器教程(1.2)mscomm控件串口

已有 1287 次阅读2015-7-21 16:40 |个人分类:MFC| 示波器

       采用mscomm串口编写比较简单,首先添加串口控件,如果是使用VC6.0WIN7上来编写就会有个问题会通常说添加控件的方法为选中项目à“工程”à“添加到工程”àComponents and ControlsàMicrosoft Communications Control”这样添加会出错,提示为不支持此接口,这是因为此软件在Win7上面不兼容,解决办法是直接在工程界面上右击à“插入ActiveX控件”然后一直取消,选择Microsoft communication control,然后确定。

之后添加类向导,给控件添加变量名,会弹出如下对话框:

点击确定,然后出现如下添加变量名,将控件名称改为m_Com

之后在编写控件的消息函数。如下图所示:

双击后添加如下代码:

         // TODO: Add your control notification handler code here

         VARIANT variant_inp;

         COleSafeArray safearray_inp;

         long len,k;

         byte rxdata[512]; //设置BYTE数组

         CString strtemp;

         if(m_Com.GetCommEvent()==2) //值为表示接收缓冲区内有字符

         {

         variant_inp=m_Com.GetInput(); //读缓冲区消息

         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型变量

         {

         char bt=*(char*)(rxdata+k); //字符型

         strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放

         m_strEditReceiveMsg+=strtemp; //加入接收编辑框对应字符串

         }

         }

         UpdateData(FALSE); //更新编辑框内容

如下图所示:

接下来同样是给各个按钮添加函数,扫描端口按钮函数不变,打开串口函数为如下:

         CString txt,error,data;

         int i;

         GetDlgItem(IDC_Open)->GetWindowText(txt);

         i = ((CComboBox *)GetDlgItem(IDC_COMBO))->GetCurSel();

         ((CComboBox *)GetDlgItem(IDC_COMBO))->GetLBText(i,data);

         if (txt == "打开串口")

         {

                   data = data.Mid(3);

                   i = atoi(data);

         if(m_Com.GetPortOpen()) //如果发现串口本来是打开的,则关闭串口

                   m_Com.SetPortOpen(FALSE);

                   m_Com.SetCommPort(i); //选择COM1端口

                   m_Com.SetInputMode(1); //输入方式为二进制方式

                   m_Com.SetInBufferSize(1024); //设置输入缓冲区

                   m_Com.SetOutBufferSize(512); //设置输出缓冲区

                   m_Com.SetSettings(TEXT("115200,n,8,1"));//波特率,无校验,个数据位,个停止位

                   if(!m_Com.GetPortOpen())

                   {

                   m_Com.SetPortOpen(TRUE); //打开串口

                   m_Com.SetRThreshold(1); //每当接收缓冲区有个字符则接收串口数据

                   m_Com.SetInputLen(0); //设置当前缓冲区长度为

                   m_Com.GetInput(); //预读缓冲区以清除残留数据

                   }

                   GetDlgItem(IDC_Open)->SetWindowText("关闭串口");

                   ((CComboBox *)GetDlgItem(IDC_COMBO))->EnableWindow(FALSE);

                   GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);//不可用

         }

         else

         {

                   m_Com.SetPortOpen (FALSE);

                   GetDlgItem(IDC_Open)->SetWindowText("打开串口");

                   ((CComboBox *)GetDlgItem(IDC_COMBO))->EnableWindow(TRUE);

                   GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);//可用

         }

图略;

然后发送按钮的函数改为:

         if(!m_Com.GetPortOpen()) return;

   UpdateData(TRUE);

   m_Com.SetOutput(COleVariant(m_strSendData));//发送数据

 这样就可以发送与接收函数了。但是这样有个弊端那就是,编写的软件如果移到没有安装VC的电脑上就会打不开,这里有解决办法。在电脑的系统盘中的C:\Windows\System32中找到MSCOMM32.OCX文件,然后拿出来,新建一个记事本,如果是64位系统在里面写上如下代码:

@echo 开始注册

copy MSCOMM32.OCX %windir%\sysWOW64\

regsvr32 %windir%\sysWOW64\MSCOMM32.OCX /s

@echo dll注册成功

@pause

32位系统写上如下代码:

@echo 开始注册

copy MSCOMM32.OCX %windir%\system32\

regsvr32 %windir%\system32\MSCOMM32.OCX /s

@echo dll注册成功

@pause

然后将名称改成“串口注册.bat”将.bat文件和MSCOMM32.OCX文件放在一起在没有安装VC的电脑上双击.bat文件,然后就能够运行用mscomm控件编写的串口软件了。详细程序见“mscomm串口”。程序源代码下载地址:https://download.eeworld.com.cn/detail/lb8820265/556640

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章