我用MSCOMM控件做串口通信,用脚踏开关,当按下时触发
OnCommMscomm事件,可是电压有抖动,OnCommMscomm事件
连续执行了好几次,我应该只让
OnCommMscomm事件只执行一次,怎么办?

解决方案 »

  1.   

    加个标记。初始为false。当按下时,先将标记改为true。在事件中根据标记为true时执行,执行完后,再将标记改为false。呵呵。笨方法,也不知管不管用啊。
      

  2.   

    软件去抖动问题
    设个标志m_bFlag;
    OnCommMscomm()
    {
       if(m_bFlag) return;
       m_bFlag = TRUE;
       SetTimer(1, 100, NULL);//延时时间根据实际情况设置
       //处理串口事件
       
    }OnTimer(int nIDEvent)
    {
       KillTimer(1);
       m_bFlag = FALSE;
    }
      

  3.   

    void CMyDlg::OnCommMscomm()
    {
    // TODO: 在此处添加消息处理程序代码
    if (m_IfCom)
    {
    return;
    } m_IfCom = TRUE;
    m_nTimer = SetTimer(3, 100, NULL); // 1/10 second switch(m_ctrlComm.get_CommEvent())
    {
    case 5:

    if (!m_ctrlComm.get_CDHolding())
    {
    //MessageBox("DCD低电平");
    if (!GrabPic())
    MessageBox("抓取图像出错!");
    }
    break;
    case 4:
    if (!m_ctrlComm.get_DSRHolding())
    MessageBox("DSR低电平");
    break;
    }
    }
    我就是这样做的,可是,不知道怎么回事,每次
    OnCommMscomm执行,都是从switch(m_ctrlComm.get_CommEvent())
    下的语句执行,根本不执行
    if (!m_IfCom)
    {
    return;
    } m_IfCom = TRUE;
    m_nTimer = SetTimer(3, 100, NULL); // 1/10 second
    这几句,这是怎么回事呢?
    是MSCOMM控件属性不对吗?
    我们用的是脚踏开关,只是靠
    CD,DSR两条线,按下就表示有效。
      

  4.   

    我不知道,怎么回事,OnCommMscomm老是
    执行多次
      

  5.   

    switch(m_ctrlComm.get_CommEvent())
    {
    case 5:
    if (m_IfCom)
    {
    return;
    }
    m_IfCom = TRUE;
    SetTimer(3, 300, NULL); // 
    if (!m_ctrlComm.get_CDHolding())
    {
    //MessageBox("DCD低电平");
    if (!GrabPic())
    MessageBox("抓取图像出错!");
    }
    break;
    case 4:
    if (m_IfCom)
    {
    return;
    }
    m_IfCom = TRUE;
    SetTimer(3,300, NULL); // 
    if (!m_ctrlComm.get_DSRHolding())
    MessageBox("DSR低电平"); break;
    }
      

  6.   

    OnCommMscomm执行时加上OnCommMscomm=NULL(把事件响应函数指针置空值),下次就不会调用了