单片机3种按键程序消抖方法

1,查询法延时模式

    u8 key0=1;u8 x=0;KEY=1;while(1){if(KEY==0)                //"按键按下"{delay(10);            //延时10msif(KEY==0 && kdy0==1) //按下有10ms 且上状态是1。即下降沿时{key0=0;             //将上状态置0.防止按住不放时,重复执行按下程序语句。x++;                //按下执行语句}key0=KEY;               //弹起按键时将上一状态置1.否则保持为0.}P0=~smgduan[x];}

10ms延时时,程序是阻塞停止的,以下程序就不会停止主程序,

2,查询法不需要延时

    u8 keyx=0xFF;u8 x=0;KEY=1;while(1){keyx = keyx<<1 | KEY;   //左移并将KEY状态写入第0位,下一次执行时会被继续左移if(keyx !=0)            //8位没有全部为0,即没有8次检测全为"按键按下"{key0=1;             //上一状态}else if(key0==1)        //8次全0且上状态是1。即下降沿时{key0=0;             //将上状态置0.防止按住不放时,重复执行按下程序语句。x++;                //按下执行语句}P0=~smgduan[x];}

key0的作用是备份上一状态,使按下按键产生"下降沿"作用。

每一次循环检测一次,8次皆为0时确定为“按下”;如果整个程序很长,一次循环占用时间超过几十毫秒,8次就是上百几百毫秒了,这样按下时间略快时就被认为是没按下了。所以程序总时长不超过10ms时好用,超过就要这样:

将按键检测程序放在 一个2ms的定时器中断函数中,程序每2ms 就会检测一下按键的状态。虽然这个检测程序占用CPU时间,但不到0.03ms而已,0.03ms vs  2ms,不到2%占用。

3,中断法 非阻塞程序

void Int0()	interrupt 0	//外部中断0 必须用P3.2口 
{delay(10);          //与1例中都是有按下信号时延时10ms;区别是这里不需要主程序查询而已。if(KEY==0) {x++;            //执行语句}
}

因为3.2中断输入已设置为"下降沿触发方式了",一直按下也不会再有中断发生的。

非阻塞也是相对的,中断也是延时了10ms.

总结:

中断法最好,但占用一个外部中断资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87804.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【java面试】线程篇

【java面试】线程篇 一、基础知识1 线程与进程的区别2 并行与并发的区别3 创建线程的方式4 线程包含了哪些状态&#xff0c;状态之间是如何变化的&#xff1f;5 新建三个线程&#xff0c;如何保证他们按照顺序执行&#xff1f;6、java中的wait和sleep方法的不同7 如何停止一个正…

RAGFlow是一个基于深度文档理解的开源RAG引擎

RAGFlow概述 RAGFlow是一款基于深度文档理解的开源RAG&#xff08;检索增强生成&#xff09;引擎&#xff0c;专注于处理复杂文档结构并提供精准的语义检索与生成能力。其核心优势在于结合多模态文档解析和智能分段技术&#xff0c;优化传统RAG流程中的信息提取与答案生成效果…

Git Commit 模板完整配置指南

Git Commit 模板完整配置指南 &#x1f4cb; 目录 Git Commit 模板完整配置指南 &#x1f4cb; 目录&#x1f3af; 为什么需要 Commit 模板&#x1f4dd; 推荐的 Commit 模板 标准模板格式C 项目特化模板 ⚙️ 系统级配置 1. 创建模板文件2. 配置 Git 使用模板3. 验证配置 &a…

【ELK服务搭建】

Ubuntu 20.04环境下部署Elastic Stack 8.18日志系统完整指南 一、环境准备 系统要求 Ubuntu 20.04 LTS硬件配置&#xff1a;4核CPU / 8GB内存 / 100GB硬盘网络&#xff1a;需外网访问权限 1. 基础环境配置 首先安装SSH服务以便远程管理&#xff1a; # 更新软件源 apt u…

Mac电脑 Office 2024 LTSC 长期支持版(Excel、Word、PPT)

Office 2024 mac&#xff0c;是一款是一款专为苹果电脑用户设计的高性能、高安全性的办公套装 集成了Word、Excel、PowerPoint、Outlook等经典应用&#xff0c;为用户提供了一站式的办公解决方案。 不仅继承了Office系列一贯的卓越性能&#xff0c;还在功能性和用户体验上进行…

深入解析 Schema 在不同数据库中的百变面孔

在数据库的世界里&#xff0c;数据是核心资产&#xff0c;但如何高效、有序、安全地组织和理解这些数据&#xff1f;答案就是 Schema&#xff08;模式或架构&#xff09;。它如同建筑的图纸、乐队的乐谱&#xff0c;是数据库的设计蓝图和运行规则手册。今天&#xff0c;我们就来…

Python 数据分析与可视化 Day 2 - 数据清洗基础

&#x1f3af; 今日目标 学会识别和处理缺失数据&#xff08;NaN&#xff09;学会删除/填补缺失值清理重复数据修改列类型&#xff0c;准备数据分析 &#x1f9fc; 一、缺失值处理&#xff08;NaN&#xff09; ✅ 1. 检查缺失值 import pandas as pd df pd.read_csv("…

3DS中文游戏全集下载 任天堂3DS简介3DS第一方独占游戏推荐

任天堂3DS 的详细介绍&#xff0c;涵盖其硬件特性、核心功能、游戏阵容及历史地位&#xff1a; 3DS游戏全集下载 https://pan.quark.cn/s/dd40e47387e7 https://sink-698.pages.dev/3ds CIA CCA 等格式可用于3DS模拟器和3DS实体机 3DS 是什么&#xff1f; 全称&#xff1a;Nin…

【Python小练习】3D散点图

资产风险收益三维分析 背景 王老师是一名金融工程研究员&#xff0c;需要对多个资产的预期收益、风险&#xff08;波动率&#xff09;和与市场的相关性进行综合分析&#xff0c;以便为投资组合优化提供决策依据。 代码实现 import matplotlib.pyplot as plt from mpl_toolk…

安宝特案例丨突破传统手术室,Vuzix AR 眼镜圆满助力全膝关节置换术

在巴西圣保罗医院的手术室里&#xff0c;骨科权威 Ricardo Gobbi医生正戴着 安宝特 Vuzix 智能 AR 眼镜&#xff0c;为一位膝关节炎患者实施全膝关节置换术。与传统手术不同的是&#xff0c;他的视野中实时叠加着骨骼三维模型、切割路径标线和动态数据 —— 这并非科幻场景&…

qt设置文件自动保存-cnblog

步骤&#xff1a; 「工具」->「选项」->「环境」->「Auto-save modified files」。 可开启/关闭自动保存文件功能&#xff0c;还可设置自动保存时间的间隔(最短间隔1分钟)。 钟)。

linux下如何找到dump文件被生成到哪里了

在大多数 Linux 系统中&#xff0c;核心转储文件&#xff08;core dump&#xff09;通常由系统自动保存在当前工作目录下&#xff0c;或者由配置决定其保存位置。核心转储文件的默认文件名通常包含进程 ID&#xff08;PID&#xff09;和程序名&#xff0c;例如 core.PID 或 cor…

API 调试工具校验 JSON Mock 接口(一):无参请求与基础响应验证

在前后端分离的开发模式中&#xff0c;JSON Mock 工具为前端开发人员在后端接口未就绪时提供了极大便利&#xff0c;能够模拟返回 JSON 数据的 API 接口&#xff0c;实现前端独立开发与测试。而 API 开发调试工具 作为一款强大的接口测试工具&#xff0c;可进一步对这些 Mock 接…

单体架构、微服务架构和分布式架构的区别

. 架构定义与核心特征 1.1 单体架构(Monolithic Architecture) 单体架构是将所有功能模块集中在一个单一代码库中的传统架构模式: 所有功能(UI层、业务逻辑、数据访问)打包为单一部署单元通常使用单一技术栈开发(如Spring Boot、Django等)共享单一数据库实例进程内通信(方法…

如何重新安装 Rust

在开发过程中&#xff0c;我们有时可能需要重新安装 Rust&#xff0c;比如遇到版本冲突、环境配置错误&#xff0c;或者仅仅是想更新到最新版本。本文将详细介绍如何卸载现有 Rust 安装&#xff0c;并重新安装 Rust&#xff0c;同时还会介绍一些常见的配置技巧&#xff0c;帮助…

使用springboot实现过滤敏感词功能

一&#xff0c;在springboot项目的resources目录里创建sensitive-words.text&#xff08;敏感词文本&#xff09; 每个词独自一行 列如&#xff1a; 赌博 吸毒 开票 二&#xff0c;在util创建工具类SensitiveFilter package com.nowcoder.community.util;Component public c…

Vue 苍穹外卖

Vue 苍穹外卖 node_modules&#xff1a;当前项目依赖的js包 assets&#xff1a;静态资源存放目录 components&#xff1a;公共组件存放目录 App.vue&#xff1a;项目的主组件&#xff0c;页面的入口文件 main.js&#xff1a;整个项目的入口文件 package.json&#xff1a;项…

评估视觉在CNN 在人类动作识别准确率

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 本研究使用 COCO 图像语料库的三类子集探索人类动作识别&#xff0c;对从简单的全连接网络到 transformer 架构的模型进行基准测试。二进制 Vision Transformer &#xff08;ViT&#xff09; 实现了…

Self-supervised Learning(BERT/GPT/T5)

李宏毅老师《Pre-train Model》 什么是:Self-supervised Learning BERT BERT 能做什么 Mask Input Next Sentence Prediction(not helpful) BERT其它的能力 上述的能力&#xff0c;可以认为是一种填空的能力&#xff0c;那么除了这些&#xff0c;还有哪些有用的能力呢&…

《NuGet:.NET开发的魔法包管理器》

一、NuGet 初相识 在软件开发的广袤天地中&#xff0c;依赖管理始终是一个核心议题。想象一下&#xff0c;在没有高效包管理工具的年代&#xff0c;开发者如同在黑暗中摸索前行。当项目逐渐庞大&#xff0c;所需的外部库和组件日益增多&#xff0c;手动管理这些依赖就如同一场噩…