当前位置: 首页 > news >正文

开关量扫描处理(消抖)

需要注意的是DI_NUM_CHN不能超过8路

超过8路按照8路一组分开处理

void di_proc ( void )  //每1ms执行一次
{
  INT8U i,shift;
  INT8U tmp_di;

  tmp_di= get_di();   //获取DI状态

  shift=0x01;  //从低位开始处理
   for ( i=0;i<DI_NUM_CHN;i++)   // 按照DI数量进行处理
    {
      if (  (tmp_di ^di[0]) & shift )  //读到的DI状态与保存的不一致,说明DI状态发生变化
      {
        if ( di_tmr[i]==0)
        {
          di_tmr[i]=10;       //启动DI定时器  10ms
        }
      }
      else  //没有变化
      {
        di_tmr[i]=0;
      }
      shift <<=1;
    }


  shift=0x01;    //从低位开始处理
  for ( i=0;i<DI_NUM_CHN;i++)
  {
    if ( di_tmr[i] )
    { 
      if (di_tmr[i]==1)  //10ms定时到
      {
        di[0] ^= shift;   //更新保存状态  ,这个地方是很巧妙的方法

                               //直接对相应的位取反就行了(因为有变化,所以取反就更新了变化)                              
        di_tmr[i]=0;
      }
      else  di_tmr[i]--;  //定时器 --
    }

   shift <<=1;
  }

}
 

相关文章:

  • Linux平台实现低延迟的RTSP、RTMP播放
  • Java技术体系的主要产品线详解
  • 专家系统的基本概念解析——基于《人工智能原理与方法》的深度拓展
  • 车载客流记录仪简介
  • 2025 年免费 Word 转 PDF 转换器有哪些?
  • 数据结构——二叉树,堆
  • 【硬核干货】SonarQube安全功能
  • 【动手学深度学习】ResNet残差网络
  • ragflow部署以及api调用整理
  • 创新项目实训开发日志4
  • 第十七届山东省职业院校技能大赛 中职组网络建设与运维赛项
  • 一天学完Servlet!!!(万字总结)
  • 第五章:Framework/Tooling Abstraction
  • CS144 Lab5 实战记录:网络接口实现 ARP
  • Spring Boot Controller 单元测试撰写
  • Git删除指定历史版本
  • 快速配置linux远程开发-go语言
  • Docker部署DeepSeek常见问题及解决方案
  • 实战交易策略 篇十九:君山居士熊市交易策略
  • 机器学习 Day14 XGboost(极端梯度提升树)算法
  • 涉军民事案件类型日益增多,最高法新规明晰管辖争议问题
  • 可移动可变形的新型超材料问世
  • 上海未来亚洲研究会第六届会员大会举行,叶青当选会长
  • 央行上海总部答澎湃:上海辖内金融机构已审批通过股票回购增持贷款项目117个
  • 刘庆峰:关税对当前业务影响较小,有信心和底气在底座大模型上做到第一阵营
  • 江西九江市人大常委会原副主任戴晓慧主动交代问题,接受审查调查