基于Linux/ARM/單片機利用狀態機對多個按鍵進行掃描實現短按或者長按

1)Linux/ARM/單片機入門級按鍵掃描程序設計,分享給將要學習或者正在學習Linux/ARM/單片機開發的同學。

2)內容屬于原創,若轉載,請說明出處。

3)提供相關問題有償答疑和支持。

學習Linux/ARM/單片機的同學都會學習到一個知識點,就是按鍵掃描,本課題基于SigmaStar的平臺SSC375芯片SOC詳細說明如何寫一個按鍵掃描程序,同時也適用于其他廠家SOC,或者是單片機MCU。本課題主要通過3個部分來介紹一個完整軟硬件的設計流程。主要在Linux環境下實現。

代碼架構:3層(用戶層,業務層API,硬件接口層),其中硬件接口層與具體的硬件相關,用戶適當的修改即可用到其他硬件平臺,方便移植。
d65a7817f63c41edb10b275573d17b14.png

如下是SSC375的SOC按鍵接口原理圖:用到了PAD_FUART_CTS,PAD_FUART_TX兩個IO口,本程序支持擴展更多IO口的按鍵,本例僅使用到2個IO口控制兩個按鍵
d7dd97486f224623b955c593a839f5a8.png

業務層API使用到了典型的狀態機來實現按鍵掃描,支持長按/短按操作:嵌入式軟件工程師必須掌握狀態機
1992bf087d334c6b9780c33fcbed9170.jpeg

實際運行如下:
c7553622b7fd4d3d9390344514e3dfb4.png

完整的源碼:
7af4d69877824bb094763b9787ff184b.png
已經整理好,可以在主頁鏈接下載得到完整的源碼。

?

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

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

相關文章

docker部署簡單的Kafka

文章目錄 1. 拉取鏡像2. 運行創建網絡運行 ZooKeeper 容器運行 Kafka 容器 3. 簡單的校驗1. 檢查容器狀態2. 檢查 ZooKeeper 日志3. 檢查 Kafka 日志4. 使用 Kafka 命令行工具檢查5. 創建和刪除測試主題 1. 拉取鏡像 選擇一組兼容性好的版本。 docker pull bitnami/kafka:3.6…

Facebook:數字社交的引領者與創新者

自2004年誕生以來,Facebook從一個校園網絡項目迅速成長為全球最大的社交媒體平臺,徹底改變了我們與世界互動的方式。作為數字社交的引領者和創新者,Facebook不僅在技術層面上不斷突破,也在社會和文化領域留下了深刻的印記。本文將…

vue2 + element三級菜單實現模板

需求&#xff1a; 需要一個含有三級菜單的結構模板&#xff0c;用于業務快速開發。 解決&#xff1a; sidebar.vue <template><el-menu :default-active"defaultActive" class"el-menu-vertical-demo" active-text-color"#ffd04b"&…

『大模型筆記』2024大模型AI工程師必備技能!

2024大模型AI工程師必備技能! 文章目錄 一. 2024大模型AI工程師必備技能!1. 引言:理解如何在各種應用中使用大語言模型(LLM)2. 第1層:Question answering(Q&A)3. 第2層:Chatbot=Q&A+短期記憶(上下文知識)4. 第3層:RAG=Q&A+短期記憶(上下文知識)+長期記憶(外…

【論文解讀】CVPR2024:DUSt3R: Geometric 3D Vision Made Easy

論文“”https://openaccess.thecvf.com/content/CVPR2024/papers/Wang_DUSt3R_Geometric_3D_Vision_Made_Easy_CVPR_2024_paper.pdf 代碼&#xff1a;GitHub - naver/dust3r: DUSt3R: Geometric 3D Vision Made Easy DUSt3R是一種旨在簡化幾何3D視覺任務的新框架。作者著重于…

Docker的架構原理

例子可以想象成一個買手機的場景 clien可以想象 你個人 docker deamon &#xff1a;店員 images&#xff1a; 樣機 regisitry&#xff1a; 手機倉庫 container: 使用的手機 首先我要在店員買一個手機&#xff0c;店員發現是樣機&#xff0c;但是倉庫有&#xff0c;&…

【SpringBoot3】使用Jasypt加密數據庫用戶名、密碼等敏感信息

一、使用步驟介紹 使用Jasypt&#xff08;Java Simplified Encryption&#xff09;進行數據加密和解密主要涉及幾個步驟&#xff0c;包括引入依賴、配置加密密碼、加密敏感信息、將加密信息存儲到配置文件中&#xff0c;以及應用程序啟動時自動解密。以下是詳細的使用說明&…

11 docker安裝redis

目錄 安裝redis 1. 配置redis配置文件redis.conf 1.1. 找到redis.conf文件 1.2. 配置文件 2. 啟動容器 3. 測試redis-cli連接 4. 證明docker使用的是指定的配置文件 安裝redis 1. 配置redis配置文件redis.conf 1.1. 找到redis.conf文件 宿主機創建目錄/app/redis在/a…

WebXR:Web上的虛擬與增強現實技術

WebXR 是一種允許在網頁上創建虛擬現實 (VR) 和增強現實 (AR) 體驗的技術標準&#xff0c;它結合了WebVR和WebAR的概念&#xff0c;為開發者提供了一個統一的平臺來開發跨平臺的沉浸式Web應用。 WebXR 概述 什么是WebXR&#xff1f; WebXR API 旨在讓瀏覽器成為VR和AR內容的平…

雙非怎么進大廠?

https://www.nowcoder.com/share/jump/2764630231719583704126 大家好&#xff0c;我是白露啊。 今天我們要分享一個非常勵志的故事&#xff0c;它證明了雙非背景的畢業生也可以通過努力和堅持&#xff0c;進入夢想中的大廠。 下面是這位網友的真實經歷&#xff0c;希望能為正…

泰安再見,泰山OFFICE還會再見

路過泰安&#xff0c;遇見彩虹。懷念和感恩在泰山信息科技的萬丈豪情。 泰山OFFICE&#xff0c;還是要復活。

JavaScript Set新增7個方法操作集合

intersection() intersection () 它返回一個包含此集合和給定集合中所有元素的新集合。 const odds new Set([1, 3, 5, 7, 9]);const squares new Set([1, 4, 9]);console.log(odds.intersection(squares)); // Set(2) { 1, 9 }union() union () 它返回一個包含此集合中所有元…

提升Android Studio開發體驗:使用Kelp插件實現顏色和圖標預覽

提升Android Studio開發體驗&#xff1a;使用Kelp插件實現顏色和圖標預覽 在Android開發中&#xff0c;自動補全功能對于提高開發效率至關重要。然而&#xff0c;默認的Android Studio并不能預覽顏色和圖標&#xff0c;這使得開發者在選擇資源時常常感到困惑。本文將介紹如何使…

【C語言小知識】備選拼寫:iso646.h頭文件

備選拼寫&#xff1a;iso646.h頭文件 C語言中有3種邏輯運算符&#xff1a; 邏輯運算符含義&&與||或!非 假設exp1和exp2是倆個簡單的關系表達式&#xff0c;那么 當且僅當exp1和exp2都為真時&#xff0c;exp1 && exp2才為真。如果exp1或exp2為真&#xff0c;…

【學習筆記】Fréchet距離的 C 語言實現

Frchet 距離 Frchet 距離&#xff0c;又稱為弗雷歇距離&#xff0c;是一種衡量兩條曲線&#xff08;或兩個路徑&#xff09;之間相似性的度量方法。這個概念最初在度量空間理論中被定義&#xff0c;后來被廣泛應用于計算機科學、地理信息系統、圖像處理、生物信息學等多個領域…

使用Python實現深度學習模型:遷移學習與領域自適應教程

引言 遷移學習和領域自適應是深度學習中的兩個重要概念。遷移學習旨在將已在某個任務上訓練好的模型應用于新的任務&#xff0c;而領域自適應則是調整模型以適應不同的數據分布。本文將通過一個詳細的教程&#xff0c;介紹如何使用Python實現遷移學習和領域自適應。 環境準備…

Visual Studio常見問題

VS的文件路徑為什么要用雙斜杠(\)? 答:在編程時,寫入文件的路徑如image = cvLoadImage("C:\Users\lyb\Documents),這種寫法在編譯時不會報錯,但在運行時會報錯,報錯圖像讀入為空,這是因為Windows的路徑雖然用的是單斜杠,但在編程時的意義是不同的,單斜杠“\”…

Go語言中的可變參數:靈活而強大的函數參數

Go語言中的可變參數:靈活而強大的函數參數 在Go語言中,可變參數是一種非常有用的特性,它允許函數接受任意數量的參數。這種靈活性使得函數可以更加通用和可復用。本文將深入探討Go語言中可變參數的用法、原理和最佳實踐。 什么是可變參數? 可變參數允許你傳遞零個或多個值給…

LNMP架構搭建Discuz論壇

LNMP架構是一種用于搭建Web服務器環境的常用架構&#xff0c;由Linux、Nginx、MySQL和PHP組成 組成功能Linux作為操作系統的基礎&#xff0c;提供穩定的環境Nginx作為反向代理服務器&#xff0c;處理客戶端的請求并將他們轉發給后端的應用服務器MySQL作為關系型數據庫管理系統…

7.2 數據結構

作業 #include <stdio.h> #include <string.h> #include <stdlib.h> struct student {char name[32];int age;double score; }s[3];void stu_input(struct student *s,int n) {printf("請輸入%d個學生的信息&#xff08;姓名&#xff0c;年齡&#xff0…