上位機圖像處理和嵌入式模塊部署(mcu的按鍵輸入)

【?聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing @163.com】

? ? ? ? 做技術的同學,大部分都會把精力放在技術本身,卻忽視了學的東西有什么實際的用途。就拿gpio來說,一般我們點燈也好、做輸入也好,最多也就是當成一個實驗demo在使用。可是大家有沒有思考過,其實這樣一個模塊就已經是一個完整的輸入、輸出的系統了。簡單的方面,我們可以做一個2-4譯碼器、3-8譯碼器,復雜一點的,我們可以做玩具、做一個設備改造的模塊。

? ? ? ? 很多同學不理解這個設備改造的模塊,還是以卷簾門為例。過去卷簾門,一般就是向上按鍵按下去,卷簾門上升;向下按鍵按下去,卷簾門下降。如果我們想擴展一下這個功能,比如向上按下去的時候,為了安全需要,不僅卷簾門上升,還要有一個語音和紅綠燈顯示,這個時候就可以用這樣一個模塊來完成了。過去可能非標領域一般都是通過plc來完成,現在我們自己學會了mcu開發,就很自然地想通過mcu來完成。

1、按鍵輸入

? ? ? ? 按鍵輸入是和按鍵輸出對應的。按鍵輸出,一般是led點亮、熄滅,又或者是蜂鳴器呼叫等等而按鍵輸入,更多時候來自于外部的反饋,它表示使用的人員希望開啟、使用或者是關閉某個功能。

2、main函數分析

? ? ? ? 首先,我們還是看下整個demo的原貌,

int main(void)
{SystemClock_Config();LED_GPIO_Config();	 Key_GPIO_Config();while(1)                            {	   if( Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON  ){LED1_ON;}else{LED1_OFF;}}
}

? ? ? ? 和之前相比較,整個流程多了兩部分,第一個是添加Key_GPIO_Config,這個主要是告訴mcu,哪些按鍵希望被當做是key輸入使用。第二個是Key_Scan,主要用于檢測當前KEY1_PIN是不是已經被按下。如果是被按下了,那么LED1點亮,反之熄滅。

3、配置按鍵輸入

? ? ? ? 前面我們說過,要配置按鍵輸入,需要看下Key_GPIO_Config是如何實現的。這部分關注的重點,集中在它和之前GPIO輸出有什么差別。

void Key_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;KEY1_GPIO_CLK_ENABLE();GPIO_InitStructure.Pin = KEY1_PIN; GPIO_InitStructure.Mode = GPIO_MODE_INPUT; GPIO_InitStructure.Pull = GPIO_NOPULL;HAL_GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);
}

? ? ? ? 這里的KEY1_PIN是a0,不過不是重點。重點在于,當key處于輸入狀態的時候,它的mode和pull是不一樣的。這部分,大家可以對比一下之前led的設置,這樣看起來效果更好。

void LED_GPIO_Config(void)
{GPIO_InitTypeDef  GPIO_InitStruct;LED1_GPIO_CLK_ENABLE();GPIO_InitStruct.Pin = LED1_PIN;	GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;  GPIO_InitStruct.Pull  = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStruct);	LED_RGBOFF;
}

4、輪詢檢查key的狀態

? ? ? ? 較早讀書的時候,我會認為輪詢是非常低效的一種情況。但是到了mcu這里,輪詢是非常常見的一種開發方式。特別是功能比較單一的時候,輪詢其實很簡潔、很魯棒,幾乎不會出錯,

uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{			if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == KEY_ON )  {return 	KEY_ON;	 }else{return KEY_OFF;}
}

5、測試方法

? ? ? ? 之前野火提供的測試demo其實不是這樣,它的case其實是依據它自身的開發板實現的。上面有現成的實體按鍵。這邊的話,我們既然是用一個stm32f103的核心板進行測試,那么就用一根短接線進行測試好了。

? ? ? ? 短接線的一頭連接在a0上面,另外一頭可以連接到電源3.3v,又或者是gnd上面。如果是連接在電源3.3v上面,c13應該亮起;反之則熄滅。通過這樣的方式,也可以觀察到按鍵輸入的實際效果。另外還有一點要注意的是,我們核心板上面只有一個c13可以點燈,這和野火官方的demo不太一樣,所以同樣需要改造一下,

#define LED1_PIN                  GPIO_PIN_13                
#define LED1_GPIO_PORT            GPIOC                     
#define LED1_GPIO_CLK_ENABLE()   __HAL_RCC_GPIOC_CLK_ENABLE()

6、美中不足

? ? ? ? 這邊按鍵按下去的時候,正常情況下都會delay延時一下,一段事件之后確認按鍵是不是真的被按下。這樣做的好處是防止誤觸、或者是抖動的發生。當然,我們也可以讓測試做的更好玩一點,比如設置成閃爍的形式,

int main(void)
{SystemClock_Config();LED_GPIO_Config();	 Key_GPIO_Config();while(1)                            {	   if( Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON  ){HAL_Delay(1000);LED1_ON;HAL_Delay(1000);LED1_OFF;}else{LED1_OFF;}}
}

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

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

相關文章

正確認識IP地址和子網掩碼的聯系

IP地址和子網掩碼是計算機網絡中兩個非常重要的概念,它們共同確定了設備在局域網中的地址以及該地址所屬的子網,只要兩者結合,就能確定唯一地址IP66_ip歸屬地在線查詢_免費ip查詢_ip精準定位平臺。 IP地址是用于標識計算機網絡中的每臺設備的…

Ajax用法總結(包括原生Ajax、Jquery、Axois)

HTTP知識 HTTP(hypertext transport protocol)協議『超文本傳輸協議』,協議詳細規定了瀏覽器和萬維網服務器之間互相通信的規則。 請求報文 請求行: GET、POST /s?ieutf-8...(url的一長串參數) HTTP/1.1 請求頭…

Buzz庫網絡爬蟲實例:快速爬取百度搜索實時熱點

前言 隨著互聯網的發展,信息獲取已經成為了人們日常生活和工作中的重要一環。而在信息獲取的過程中,網絡爬蟲作為一種自動化的數據采集工具,為我們提供了極大的便利。本文將介紹如何利用PHP編寫一個簡單而高效的網絡爬蟲,實現快速…

R實驗 參數檢驗(二)

實驗目的:掌握正態分布和二項分布中,功效與樣本容量之間的關系;學會利用R軟件完成一個正態總體方差和兩個正態總體方差比的區間估計和檢驗。 實驗內容: (習題5.28)一種藥物可治療眼內高壓,目的…

Mac安裝 Intellij IDEA,親測有效M1、M2可用

引言 最近開始學習使用spring boot寫一個簡單的后端項目,使用Intellij IDEA軟件,Intellij IDEA為新用戶提供了30天的免費試用。 方案 1.官網下載Intellij IDEA IntelliJ IDEA – the Leading Java and Kotlin IDE 或者直接網盤連接下載:…

第一份工資

當我拿到我人生的第一份工資時,那是一種難以言表的激動。我記得那個下午,陽光透過窗戶灑在了我的辦公桌上,我看著那張支票,心中滿是欣喜和自豪。那是我獨立生活的開始,也是我對自己能力的一種肯定。 我記得我是如何支配…

SQL注入:pikachu靶場中的SQL注入通關

目錄 1、數字型注入(post) 2、字符型注入(get) 3、搜索型注入 4、XX型注入 5、"insert/update"注入 Insert: update: 6、"delete"注入 7、"http header"注入 8、盲…

C#實現KMP算法,在長字符串中找到第一個符合要求的子字符串

KMP(Knuth-Morris-Pratt)算法是一種高效的字符串搜索算法,它可以在一個文本字符串(Text)中搜索一個詞(Pattern),時間復雜度為O(nm),其中n是文本字符串的長度,…

vite前端UI框架使用詳解(2024-05-24)

Vite(發音同 "veet")是一種新型前端構建工具,能夠顯著提升前端開發體驗。它主要由兩部分組成: 一個開發服務器,它基于原生的ES模塊提供了豐富的內建功能,如速度快到驚人的 模塊熱更新&#xff08…

【Linux安全】Firewalld防火墻

目錄 一.Firewalld概述 二.Firewalld和iptables的關系 1.firewalld和iptables的聯系 2.firewalld和iptables的區別 三.Firewalld區域 1.概念 2.九個區域 3.區域介紹 4.Firewalld數據處理流程 四.Firewalld-cmd命令行操作 1.查看 2.增加 3.刪除 4.修改 五.Firewa…

arping 一鍵檢測網絡設備連通性(KALI工具系列二)

目錄 1、KALI LINUX簡介 2、arping工具簡介 3、在KALI中使用arping 3.1 目標主機IP(win) 3.2 KALI的IP 4、操作示例 4.1 IP測試 4.2 ARP測試 4.3 根據存活情況返回 5、總結 1、KALI LINUX簡介 Kali Linux 是一個功能強大、多才多藝的 Linux 發…

表現層框架設計之使用XML設計表現層

使用XML設計表現層,統一Web Form與Windows Form的外觀。 1.XML(可擴展標記語言) XML(可擴展標記語言)與HTML類似,是一種標記語言。與主要用于控制數據的顯示和外觀的HTML標記不同,XML標記用于定…

PostgreSQL的擴展(extensions)-常用的擴展之pg_rman

PostgreSQL的擴展(extensions)-常用的擴展之pg_rman pg_rman 是 PostgreSQL 社區提供的一個備份和恢復管理工具。它能夠簡化和自動化 PostgreSQL 數據庫的備份和恢復過程,并支持全量備份、增量備份和差異備份。pg_rman 提供了方便的命令行接…

【機器學習與大模型】驅動下的電子商務應用

摘要: 隨著信息技術的飛速發展,電子商務已經成為當今商業領域中最為活躍和重要的部分之一。而機器學習和大模型的出現,為電子商務帶來了新的機遇和挑戰。本文深入探討了機器學習與大模型在電子商務中的應用,包括個性化推薦、精準營…

Java 18:開啟Java平臺的新紀元

Java 18:探索Java平臺的最新飛躍 隨著Java 18的發布,Java平臺再次證明了其不斷創新和適應現代軟件開發需求的能力。作為長期支持(LTS)版本,Java 18不僅帶來了性能上的提升,還引入了一系列令人興奮的新特性…

基于雙向長短期記憶 Bi-LSTM 對消費者投訴進行多類分類

前言 系列專欄:【深度學習:算法項目實戰】?? 涉及醫療健康、財經金融、商業零售、食品飲料、運動健身、交通運輸、環境科學、社交媒體以及文本和圖像處理等諸多領域,討論了各種復雜的深度神經網絡思想,如卷積神經網絡、循環神經網絡、生成對抗網絡、門控循環單元、長短期記…

CSS transform 三大屬性 rotate、scale、translate

transform 瀏覽器支持定義和用法translate位移函數rotate旋轉函數scale縮放函數 瀏覽器支持 表格中的數字表示支持該屬性的第一個瀏覽器版本號。 緊跟在 -webkit-, -ms- 或 -moz- 前的數字為支持該前綴屬性的第一個瀏覽器版本號。 定義和用法 transform 屬性向元素應用 2D…

在chrome中查找和驗證xpath

1、快速獲取XPath表達式 按F12打開chrome瀏覽器的開發者模式,點擊選擇光標,選擇頁面上的元素位置,在控制臺右鍵選擇Copy XPath,表達式就復制到粘貼板中了。 獲取到的xpath路徑://*[id"hotsearch-content-wrapper…

iOS App上架全流程及審核避坑指南

App Store作為蘋果官方的應用商店,審核嚴格周期長一直讓用戶頭疼不已,很多app都“死”在了審核這一關,那我們就要放棄iOS用戶了嗎?當然不是!本期我們從iOS app上架流程開始梳理,詳細了解下iOS app上架的那些…

6.1 if語句

計算機語言和人類語言類似,人類語言是為了解決人與人之間交流的問題,而計算機語言是為了解決程序員與計算機之間交流的問題。程序員編寫的程序就是計算機的控制指令,控制計算機的運行。借助于編譯工具,可以將各種不同的編程語言的…