当前位置: 首页 > 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;
  }

}
 

http://www.dtcms.com/a/153431.html

相关文章:

  • 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(极端梯度提升树)算法
  • 得物业务参数配置中心架构综述
  • 大语言模型之提示词技巧
  • Tomcat:从零理解Java Web应用的“心脏”
  • 路由交换网络专题 | 第七章 | BGP练习 | 次优路径 | Route-Policy | BGP认证
  • Typecho 访客统计插件最新版-前后台统计图均可显示
  • 搭建私人网站
  • 香港国际视角下的资金路径识别与结构研判
  • 数理逻辑基础 | 命题逻辑 / 谓词逻辑 / 命题符号化
  • nodejs之Express-介绍、路由
  • Godot开发2D冒险游戏——第二节:主角光环整起来!