色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于GPIO的按鍵板實現方案

454398 ? 來源:csdn ? 作者:NutriYang ? 2020-10-18 11:43 ? 次閱讀

介紹簡單的ADC實現,需要IC提供一個額外的ADC。但出于IC成本的考慮,無法提供這個的ADC時,但提供了多個額外的GPIO(General Purpose Input Output:雙向的:可以為輸入/輸出,只有兩個狀態High/Low),就可以使用本篇的實現方法了。

基于GPIO的按鍵板

基于GPIO的按鍵板實現,需要提供額外的GPIO口供使用。GPIO口足夠多的話可以一個按鍵對應一個GPIO,不夠多的時候可以使用矩陣掃描方式實現,若可供使用的GPIO連矩陣掃描方式都不滿足,還可以增加二極管來進一步擴展成2個GPIO實現6個按鍵,本節將簡單介紹這些方法。另外還可以通過擴展GPIO的方法來實現,將在下一篇幅中專門介紹。

嵌入式開發中,GPIO是最常用的控制接口,普通GPIO只具有High/Low兩個狀態,我們可以對其進行Read/Write操作。

1:足夠多的GPIO供使用

則每個按鍵對應一個GPIO口,電路設計可以保證:無按鍵動作GPIO口為Low,有按鍵動作GPIO口為High,或者相反。軟件設計只需要逐個掃描每個GPIO口的狀態,就可以知道某個按鍵是否有動作。

2:有限的GPIO供使用:使用矩陣掃描按鍵方式是最常見的方案。

其原理如下:任意兩個GPIO之間連接一個按鍵,比如GPIO_1 & GPIO_2,其默認狀態為Low,按鍵按下的話,兩者就連通了,這就意味著,我們可以先給GPIO_1一個High信號,接著去讀取GOIO_2,如果得到High,則這個按鍵被按下了,否則就是沒有按鍵動作。

數學告訴我們,基于這種方案的N個GPIO口,最多可以實現N*(N-1)/2個按鍵,也就是N的組合數。如下圖:4個GPIO(A/B/C/D)實現6(KEY_1…KEY_6)個按鍵的原理圖

變成也是比較簡單了,給個C代碼如下:

這里通過適當的流程設計,可以使得代碼緊湊有序。在按鍵比較少的情況下,一個挨著一個的去讀寫的方法也不錯,但在較多按鍵的時候,上面代碼的流程設計就比較具有優勢了。能夠在1分鐘內,看明白為什么使用 i*k+k-1 作為返回索引,我相信你的邏輯能力很OK。

3:進一步擴展---2個GPIO實現6個按鍵

如果在你的設計中,GPIO口的數量很有限,不能滿足矩陣掃描方式的需要,那么你有兩種選擇:1 擴展GPIO口,下一篇幅中將專門討論;2 增加一些二極管來進一步擴充矩陣掃描方式的能力。我們這里討論一個2個GPIO實現6個按鍵的方法,原理圖如下:

這種實現方法實際上就是利用了二極管的單向導通特性,使得我們可以區分更多的按鍵,分析如下:

1:Write GPIO_1=1 & GPIO_2=1,接著Read if GPIO_1==0 & GPIO_2==0,則為 KEY_3;

if GPIO_1==0 & GPIO_2==1,則為 KEY_1;

if GPIO_1==1 & GPIO_2==0,則為 KEY_2;

2:Write GPIO_1=0 & GPIO_2=1, 接著Read if GPIO_2==0,則為 KEY_4 or KEY_6;

需要進一步判斷:Write GPIO_1=1 & GPIO_2=0 然后Read:if GPIO_1==0 則為 KEY_4;

if GPIO_1==1 則為 KEY_6;

3:反序執行步驟2,可以區分出 KEY4 & KEY5。

明白了原理,軟件編程實現就比較簡單了,給出一個實現如下:

在這個編程實現里,在寫操作之后,可能需要適當的Delay以使得其狀態穩定;若是基于總線的嵌入式系統,也需要在函數退出前釋放總線。

3:總結與討論

基于矩陣掃描方式的按鍵板實現,是很最常用的。在GPIO口比較緊缺的情況下,可以通過在電路中適當增加幾個二極管來解決。如果這樣還不能解決,就必須設法擴展GPIO了,稍后討論。

下面給出了一個很不錯的 矩陣掃描+二極管擴展 的電路圖,你能為它寫一個驅動嗎?相當具有挑戰性哦,試試看吧……

編輯:hfy

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 矩陣
    +關注

    關注

    0

    文章

    423

    瀏覽量

    34528
  • 軟件編程
    +關注

    關注

    1

    文章

    41

    瀏覽量

    11296
  • GPIO
    +關注

    關注

    16

    文章

    1204

    瀏覽量

    52055
收藏 人收藏

    評論

    相關推薦

    STM32 GPIO的八種工作模式

    GPIO (general purpose input output)是通用輸入輸出端口的簡稱,簡單來說就是軟件可控制的引腳,STM32芯片的GPIO引腳與外部設備連接起來,從而實現與外部通訊、控制以及數據采集的功能。
    的頭像 發表于 11-06 09:40 ?512次閱讀
    STM32 <b class='flag-5'>GPIO</b>的八種工作模式

    SOC GPIO操作

    sapphire Soc提供了兩個GPIO組每組有4個GPIO,定義為GPIO[3:0],其中只有GPIO[1:0]可以支持中斷。中斷在程序中打開了
    的頭像 發表于 11-01 11:06 ?139次閱讀

    基于FPGA實現按鍵消抖處理

    引言: 按鍵在電子產品中經常用到,由于按鍵的機械特性,按鍵在閉合或松開的瞬間伴隨著一連串的抖動,這樣的抖動將直接影響設計系統的穩定性。因此,必須對抖動進行處理。本文介紹如何在FPGA中實現
    的頭像 發表于 10-24 14:54 ?227次閱讀
    基于FPGA<b class='flag-5'>實現</b><b class='flag-5'>按鍵</b>消抖處理

    gpio接口是干什么的 gpio四種輸入輸出模式怎么選擇

    這些引腳的電平狀態,實現與外部設備的通信和交互。GPIO接口在嵌入式系統、物聯網設備、樹莓派項目等領域有著廣泛的應用,為電子設備的通信和交互提供了重要的支持。 具體來說,GPIO接口的作用主要包括以下幾個方面: 輸入功能 :
    的頭像 發表于 10-06 16:07 ?2518次閱讀

    GPIO靜電放電防護方案

    GPIO靜電放電防護方案 方案簡介 GPIO的全稱是General Purpose Input Output (通用輸入/輸出端口),簡稱為GPIO
    的頭像 發表于 09-19 17:02 ?327次閱讀
    <b class='flag-5'>GPIO</b>靜電放電防護<b class='flag-5'>方案</b>

    基于MSP430實現電視的電容式觸摸按鍵

    電子發燒友網站提供《基于MSP430實現電視的電容式觸摸按鍵.pdf》資料免費下載
    發表于 08-28 11:56 ?0次下載
    基于MSP430<b class='flag-5'>實現</b>電視的電容式觸摸<b class='flag-5'>按鍵</b>

    如何在FPGA中實現按鍵消抖

    在FPGA(現場可編程門陣列)中實現按鍵消抖是一個重要的設計環節,特別是在處理用戶輸入時,由于物理按鍵的機械特性和電氣特性,按鍵在按下和釋放的瞬間會產生抖動現象,這種抖動可能導致系統錯
    的頭像 發表于 08-19 18:15 ?1768次閱讀

    全志模塊設備開發之GPIO編程基礎介紹

    實際操作中,我們使用LED和按鍵實現GPIO輸出和輸入的實驗,相關的實驗過程和相關代碼如下。 9.4.1 導出GPIO口 ? 為了導出GPIO
    發表于 08-05 13:33

    STM32 GPIO八種模式及工作原理詳解

    一. 前言 ??GPIO全稱General Purpose Input Output,是微控制數字輸入/輸出的基本模塊,可以實現微控制器與外部環境的數字進行交換。借助GPIO微控制器可以實現
    的頭像 發表于 07-22 09:32 ?6209次閱讀
    STM32 <b class='flag-5'>GPIO</b>八種模式及工作原理詳解

    CC2340R5無法讀取到按鍵按下的動作怎么解決?

    自定的按鍵方案:選取DIO9、DIO10、DIO11來實現按鍵 syscfg中各GPIO的配置如下圖所示 BUTTON菜單的配置 希
    發表于 05-30 07:59

    STM32矩陣按鍵造成IO口的損壞的原因?

    看了網上的4*4矩陣按鍵,不帶外部中斷,可實現多個按鍵同時按下。發現行線都配置成GPIO_Mode_Out_PP推挽輸出,我認為當同一個列線上有兩個
    發表于 05-17 06:02

    【GD32F470紫藤派開發板使用手冊】第二講 GPIO-按鍵查詢實驗

    通過本實驗主要學習以下內容: GPIO輸入功能原理; 按鍵查詢輸入檢測原理;
    的頭像 發表于 04-30 11:39 ?698次閱讀
    【GD32F470紫藤派開發板使用手冊】第二講 <b class='flag-5'>GPIO</b>-<b class='flag-5'>按鍵</b>查詢實驗

    什么是GPIO?GPIO組成原理

    GPIO全拼叫General Purpose Input Output(通用輸入輸出)簡稱IO口也叫總線擴展器,GPIO口是由引腳,功能寄存器組成,不同的架構中的GPIO封裝不同,所使用的引腳數與寄存器數不同,具體可以參考芯片手
    發表于 04-28 12:30 ?6902次閱讀
    什么是<b class='flag-5'>GPIO</b>?<b class='flag-5'>GPIO</b>組成原理

    電視機經典ADC按鍵電路實現方案

    3根線實現7個按鍵,什么原理? 直接上電路原理圖!不同電視廠家的設計會有一點差異,但基本都是這個原理。
    的頭像 發表于 04-07 10:25 ?1147次閱讀
    電視機經典ADC<b class='flag-5'>按鍵</b>電路<b class='flag-5'>實現</b><b class='flag-5'>方案</b>

    用tc275開發板實現can通信,一直不工作怎么解決?

    最近我想用 tc275的官方開發板實現can通信,一直不工作,在我反復檢查了好幾遍代碼之后,感覺實在找不出錯誤來,就疑惑這塊shield buddy板子上是否有CAN transceiver 芯片?
    發表于 02-01 07:08
    主站蜘蛛池模板: 男女免费观看在线爽爽爽视频| 饥渴的护士自慰被发现| 123成人站| 亚洲人成网站在线播放| 挺弄抽插喷射HH| 日本精油按摩| 青青视频 在线 在线播放| 欧美激情视频在线观看一区二区三区 | 亚洲日本欧美日韩高观看| 51精品少妇人妻AV一区二区| 最新国自产拍 高清完整版| 在线欧美精品一区二区三区| 伊人情人网综合| 一本道久在线综合道| 在线免费观看国产| 国产99久久| 国产精品久久久久影院嫩草| 国产精品欧美久久久久天天影视 | 空姐内射出白浆10p| 快穿之H啪肉| 无人区免费一二三四乱码| 亚洲精品在线网址| 在线免费看a| 国产精品人妻无码免费A片导航 | 久久操热在线视频精品| 久久婷婷久久一区二区三区| 欧美黑人经典片免费观看| 亚洲欧洲久久| 国产AV天堂一区二区三区| 免费视频国产| 亚洲在线视频自拍精品| 99热婷婷国产精品综合| 二色AV天堂在线| 交换邻居波多野结衣中文字幕| 日本无码人妻精品一区二区视频| 做暧暧免费30秒体验| 国产欧美无码亚洲| 久久久久久久免费| 日本G奶乳液汁| 亚洲视频在线看| 国产麻豆精品人妻无码A片|