單片機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
英文地址,請注明出處:http://en.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;手動管理這些依賴就如同一場噩…