嵌入式-SPI番外之按鈕驅動程序的編寫-Day15

目錄

一、按鈕簡單操作回憶

二、按鈕新操作實現

(1)按鈕的點擊實現燈亮/滅

①連接電路

②初始化板載LED和按鈕

③按鈕程序的基本原理(核心仍為0亮/1滅)

④按鈕消抖的原理

三、按鈕封裝的操作-點擊,雙擊,多擊,長按

(1)實驗結果

使用串口調試助手實現,按鈕的多種操作實現串口助手的數字變化。(單機-數字+1,雙擊數字清零,長按數字持續++)?

(2)搭建電路

(3)串口的初始化

(4)按鈕初始化

(5)進程函數(必須要有的)


一、按鈕簡單操作回憶

首先,回憶一下之前學過的GPIO的按鈕實驗,即做到了持續按下按鈕,燈持續亮,松開按鈕,則燈滅。

代碼的簡單邏輯是:

二、按鈕新操作實現

(1)按鈕的點擊實現燈亮/滅

最終實現:當點擊按鈕并松開的時候,實現燈亮,再點擊然后松開的時候,實現燈滅,即不斷的點擊切換燈的狀態。(這就不是之前的長按了)

①連接電路

?

②初始化板載LED和按鈕

初始化按鈕,其實就是初始化單片機的隨便一個正常的GPIO的引腳,初始化為輸入上拉模式;

初始化板子上的LED,其實就是將指定的GPIO的13引腳初始化為輸出開漏模式;

③按鈕程序的基本原理(核心仍為0亮/1滅)

這里主要的難點是當按鈕被點擊后,你松開按鈕的一瞬間讓燈實現狀態的轉換。

所以需要獲取松開按鈕的指令,核心為0亮/1滅,所以使用兩變量存儲狀態的變化,當變化發送,并且是信號從0變為1,表示松開按鈕了,那就向板載燈發送對應的信號。

這里邏輯很簡單,就是默認是按鈕松開的,所以默認是1的信號,然后不斷的讀當前的輸入寄存器的信號,當發生變化了,就:

首先判斷當前的變化是松開還是按下,我們這里實現的是按鈕松開去實現燈的變化,所以選擇第一個去實現。

之后在當前的if條件里面去切換亮滅狀態。(這里有個小難點,你不知道當前的燈的狀態是啥,所以你不好控制讓他亮還是滅,所以這里使用GPIO自帶的讀取輸出寄存器的值(讀取最近一次發送的值)接口去讀取他之前是的狀態是啥,如果之前的輸出寄存器是1(滅),那么就寫0讓他亮,相反同理。)

④按鈕消抖的原理

通過前面的實驗會進行基本的實現,但是會出現一個問題,就是按鈕有時候按下去失靈,這就是抖動出現的毛刺現象。

比如當按下的時候,會出現不穩定的波動毛刺,既而導致剛按下或者松開的一會,會有高低電壓的抖動,而失靈也正是因為此時你剛按下的時候,他一開始抖動造成的0-1-0-1-0這種,那因為一開始這種抖動變化的很快,導致人眼只能看見一開始的0和最后抖完的0,所以就相當于沒有變化,即失靈現象。

要解決這種,直接加個延遲就行。?

?

三、按鈕封裝的操作-點擊,雙擊,多擊,長按

(1)實驗結果

使用串口調試助手實現,按鈕的多種操作實現串口助手的數字變化。(單機-數字+1,雙擊數字清零,長按數字持續++)?

(2)搭建電路

(3)串口的初始化

串口初始化,就兩步

(1)IO引腳的初始化

(2)自身模塊的初始化

(4)按鈕初始化

封裝函數里面有這個button的封裝,直接用就行,其中有按鈕的Init,具體的功能為:

實現了按鈕的初始化,同樣是兩個參數:

一個是名稱(需要自己定義一個變量去傳地址進去)

一個是結構體(內部的那幾個可以都默認為0)

注意:這里按鈕的初始化里面沒有初始化引腳為IPU即輸入上拉模式,是因為在這個初始化參數里面默認實現了,所以這里的結構體只需提供GPIO名稱和引腳編號


(5)進程函數(必須要有的)

該函數需要放到main的while里面生效。

原因就是這個函數內部就是前面實現的那個按鈕點擊實現燈亮/滅的操作,這里去掉了燈的亮滅指令保留按鈕的按或者釋放的檢測功能。

當按鈕按下/釋放的時候,會自動執行(按鈕按下/或者按鈕釋放的回調函數)以及一個按鈕輪詢的一個函數,這個函數里面就根據檢測到按鈕的實現情況去動態的調用你自己實現的按鈕點擊和按鈕長按的回調函數

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919532.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919532.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919532.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

星域智鏈科技:用科技點亮生活,以 AI 拓展無限可能

星域智鏈科技(東莞市)有限公司簡介 星域智鏈科技(東莞市)有限公司,理念是 讓科技便利生活、豐富生活,專注于科技、AI領域。 全場景 GPS 定位器 —— 精準追蹤,守護安全,適用于車輛…

國內代理IP在SEO行業中的應用

隨著互聯網的快速發展,SEO(搜索引擎優化)已經成為了數字營銷的重要組成部分。無論是企業還是個人站長,都希望通過SEO提升自己網站的排名和流量。然而,隨著競爭的激烈,傳統的SEO優化手段已經逐漸顯現出局限性…

Linux + arm 內存屏障

ARM 硬件層的屏障指令DMB (Data Memory Barrier):保證在它之前的內存訪問(符合給定域/類型)在它之后的內存訪問之前對可見性排序。常用域:ish(Inner Shareable),sy(system-wide&…

網絡安全中的遠程控制活動檢測與防御策略

本文還有配套的精品資源,點擊獲取 簡介:遠程控制技術在IT領域中用于網絡連接和設備操作,但同樣被黑客利用進行非法入侵。端口占用情況是識別遠程控制活動的關鍵因素,使用工具如"cports"可以監控這些端口。系統中未知…

UIGestureRecognizer 各個子類以及其作用

在 iOS 里,UIGestureRecognizer 是一個抽象基類,專門用來處理手勢事件。它本身不能直接用,必須用它的 子類。這些子類分別對應常見的手勢識別器。常見的 UIGestureRecognizer 子類及作用1. UITapGestureRecognizer作用:點擊手勢&a…

計算機網絡 HTTPS 全流程

HTTPS 通信的全流程(特別是 TLS 握手階段)中使用的三個隨機數是保障安全性的核心設計,不能隨意減少。每個隨機數都承擔著至關重要的安全職責。下面詳細解釋 HTTPS 全流程,并重點分析這三個隨機數的作用和必要性:&#…

DL00271-基于YOLOv11的激光雷達LiDAR船舶目標檢測含完整數據集

【CSDN推薦】基于YOLOv11的激光雷達(LiDAR)船舶目標檢測——含完整數據集!🚢 科研人員必看! 高校老師、學生和研究者們,前沿技術來了!本論文利用YOLOv11模型,結合激光雷達&#xff0…

SQL-leetcode—3374. 首字母大寫 II

3374. 首字母大寫 II 表:user_content -------------------- | Column Name | Type | -------------------- | content_id | int | | content_text| varchar | -------------------- content_id 是這張表的唯一主鍵。 每一行包含一個不同的 ID 以及對應的文…

告別籠統的 200 OK:一份給 API 設計者的 HTTP 狀態碼終極指南

文章目錄寫在前面問題描述核心結論與建議簡要描述詳細闡述1xx - 信息性響應 (Informational)2xx - 成功 (Successful)3xx - 重定向 (Redirection)4xx - 客戶端錯誤 (Client Error)5xx - 服務器錯誤 (Server Error)HTTP 狀態碼速查表參考以及更多更詳細的狀態碼查詢寫在前面 你…

從防抖節流到鏈表樹:編程世界中的抽象優化藝術

從防抖節流到鏈表樹:編程世界中的抽象優化藝術 在編程的知識體系中,有些概念看似毫不相關,卻在底層邏輯上有著驚人的相似之處。防抖與節流、鏈表與樹,這兩組分屬不同領域的概念,正是這種思維共性的典型代表。它們不僅展…

第三階段數據-3:數據庫腳本生成,備份與還原,分離與附加

1_生成數據庫腳本(1)在數據庫上右鍵選擇任務(2)選擇生成腳本(3)選擇下一步,如果下次不想顯示此頁面,可勾選不再顯示此頁(4)如果導出全部數據,選擇…

React框架超詳細入門到實戰項目演練【前端】【React】

React框架 1.前端展示解釋 當客戶端訪問服務器時,會從服務器中下載很多靜態文件到本地,比如css、js等前端渲染文件 下載完成之后瀏覽器會將這些文件組合形成前端頁面渲染出來。 2.React概述 React是一個專注于構建用戶界面的JavaScript庫,…

本地部署的終極多面手:Qwen2.5-Omni-3B,視頻剪、音頻混、圖像生、文本寫全搞定

Qwen2.5-Omni-3B是什么? Qwen2.5-Omni-3B 是由阿里巴巴 Qwen 團隊推出的一款輕量級多模態大模型,作為 Qwen2.5-Omni-7B 的高效優化版本,專為消費級硬件環境量身打造。該模型具備處理文本、音頻、圖像和視頻等多種模態輸入的能力,…

連續空間強化學習:策略輸出的兩種形態 —— 概率分布與確定性動作

在強化學習的世界里,智能體與環境的交互核心是 “動作選擇”。當面對離散動作空間(如圍棋的落子點、游戲的按鍵操作)時,智能體可以直接枚舉或概率選擇有限的動作;但在連續動作空間中(如機器人關節角度、無人…

IT運維背鍋權限泄露?集中式管控如何化解風險?

在企業數字化轉型的浪潮中,IT運維團隊常常被推到風口浪尖。員工離職后權限未及時回收、賬號共享導致數據泄露、跨系統權限配置不一致……這些問題一旦暴露,IT運維往往成為“背鍋俠”。權限泄露不僅威脅企業數據安全,還可能導致合規性風險&…

2025 世界機器人大會啟示錄:機構學 × AI × 視頻鏈路的融合之路

引言 2025 年 8 月 8 日,北京再一次成為全球矚目的科技焦點——世界機器人大會盛大開幕。來自全球的 200 余家頂尖企業齊聚一堂,帶來超過 1500 件展品,其中首發新品突破 100 款,涵蓋了從工業制造、醫療康復到服務陪伴、特種作業的…

從零開始部署經典開源項目管理系統最新版redmine6-Linux Debian12

安裝Debian 12 前面為了在windows上好開發,想要在windows上配置開發環境,以源碼方式在本地部署運行,但經過好幾天各種版本切換及配置組件庫等各種操作后,證明windows上搭建redmine6支持的運行環境沒有那么簡單,后續有…

超長視頻生成新突破!LongVie框架問世,創作不再受時長限制

超長視頻生成新突破!LongVie框架問世,創作不再受時長限制 文章來源:Poixe AI 在AI技術飛速發展的當下,視頻生成領域取得了令人矚目的進步,尤其是在短視頻創作方面。然而,當視頻時長超過一分鐘時&#xff…

MongoDB 查詢方法與高級查詢表(Python版)

目錄 一、MongoDB3步快速安裝 1.1?下載安裝包 1.2運行安裝程序? 1.3?驗證安裝?打開CMD執行: 1.4 基本查詢操作 二、高級查詢操作符表 2.1 比較操作符 2.2 邏輯操作符 2.3 元素操作符 2.4 數組操作符 三、高級查詢案例 3.1 復雜條件組合 3.2 數組查…

選型指南:如何為企業挑選合適的邊緣計算網關

選型指南:如何為企業挑選合適的邊緣計算網關在企業邁向智能化轉型的道路上,選擇一款合適的物聯網邊緣計算網關至關重要。面對眾多型號和功能各異的網關產品,企業該如何做出正確抉擇呢??首先要考慮的是網關的兼容性。藍蜂物聯網邊…