自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

鴻蒙Hi3861開發(fā)板實(shí)現(xiàn)按鍵“按下事件”和“釋放事件”的通用框架

開發(fā)
文章由鴻蒙社區(qū)產(chǎn)出,想要了解更多內(nèi)容請(qǐng)前往:51CTO和華為官方戰(zhàn)略合作共建的鴻蒙技術(shù)社區(qū)https://harmonyos.51cto.com/#zz

[[350165]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

在帖子 《鴻蒙開發(fā)板外設(shè)控制》直播圖文版(2020.10.28) 中我們提到過:“開發(fā)板上的按鍵也可以看作一種 GPIO 外設(shè)。” 因此,要捕捉按鍵的狀態(tài)(按下或釋放)必須操作對(duì)應(yīng)的 GPIO 端口,具體步驟如下:

  1. 確定目標(biāo)按鍵對(duì)應(yīng)的 GPIO 引腳(可通過設(shè)備文檔找到對(duì)應(yīng)關(guān)系)
  2. 重新定義 GPIO 引腳的功能,數(shù)據(jù)傳輸方向設(shè)置為輸入(WIFI_IOT_GPIO_DIR_IN)
  3. 設(shè)置按鍵事件觸發(fā)方式(電平觸發(fā)或邊沿觸發(fā)),并注冊(cè)回調(diào)函數(shù)

示例代碼如下:

1t

代碼說明:

  1. WIFI_IOT_IO_NAME_GPIO_8 端口連接了按鍵,若需要捕獲按鍵事件需要調(diào)用 IoSetFunc() 函數(shù)重定義端口功能
  2. 調(diào)用 IoSetPull() 函數(shù)將端口初始電平拉高(Pull Up)
  3. 調(diào)用 GpioRegisterIsrFunc() 函數(shù)設(shè)置按鍵事件為邊沿觸發(fā)方式,具體為下降沿觸發(fā)
  4. 將自定義的 OnButtonPressed() 函數(shù)注冊(cè)為按鍵回調(diào)函數(shù),即:按鍵被按下時(shí)調(diào)用此函數(shù)

2

綜上可知,每個(gè)下降沿對(duì)應(yīng)著按鍵按下,那么上升沿顯然對(duì)應(yīng)這按鍵釋放;因此,可設(shè)置上升沿觸發(fā)按鍵事件,即:按鍵釋放時(shí)調(diào)用注冊(cè)的回調(diào)函數(shù)。

代碼如下:

GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_8,

                                    WIFI_IOT_INT_TYPE_EDGE, 

                                    WIFI_IOT_GPIO_EDGE_RISE_LEVEL_HIGH,

                                    OnButtonReleased, NULL);

 

0K! 接下來我們思考一個(gè)問題:如果同時(shí)需要捕獲按鍵按下和釋放兩個(gè)事件,如何寫代碼實(shí)現(xiàn)?即:按鍵按下時(shí) OnButtonPressed() 被調(diào)用,按鍵釋放時(shí) OnButtonReleased() 被調(diào)用。

也許有同學(xué)的第一想法會(huì)是:注冊(cè)兩次不就完事了嗎?。?!

用代碼描述就是:

3

這看起來似乎合情合理,但,這么做是不行滴?。?!因?yàn)椋湍壳皝碚f,每個(gè) GPIO 口只能注冊(cè)一個(gè)回調(diào)函數(shù);所以,第二次注冊(cè)的信息將覆蓋第一次的注冊(cè)信息;說得更直白些:這么寫,只會(huì)在上升沿觸發(fā)回調(diào) OnButtonReleased() !

那么是不是就沒法同時(shí)捕獲按鍵按下和釋放兩個(gè)事件呢?

那到不是,我們可以采用下面的方法實(shí)現(xiàn)。

4

對(duì)應(yīng)代碼如下:

 

初始回調(diào)注冊(cè):

5

回調(diào)函數(shù)中切換注冊(cè):

6

看到這里,相信大家已經(jīng)掌握了同時(shí)捕獲按下事件和釋放事件的方法了。然而,即便如此,當(dāng)程序中需要使用多個(gè)按鍵時(shí),我們不得不反復(fù)的編寫幾乎一模一樣的代碼。。。這并不是一件有趣的事,我們的時(shí)間應(yīng)該花在更有創(chuàng)造性的工作上!所以,我把上面的方法封裝到兩個(gè)獨(dú)立的文件(dt_btn_util.hdt_btn_util.c)中,方便大家需要時(shí)一鍵調(diào)用!

示例代碼如下:

7

是不是很簡(jiǎn)單?!一行代碼即可同時(shí)捕獲按下事件和釋放事件。

示例代碼和封裝好的文件在附件中開箱即用。

相關(guān)代碼附件可以前往原文進(jìn)行下載:https://harmonyos.51cto.com/posts/1512

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2020-11-09 11:43:51

長按事件

2020-12-08 12:36:41

Hi3861 ADC驅(qū)動(dòng)開發(fā)

2020-11-18 11:56:06

鴻蒙Hi3861

2020-10-27 10:08:19

Hi3861ADC驅(qū)動(dòng)

2020-11-02 12:07:11

鴻蒙 GPIO

2020-10-14 09:41:02

Hi3861GPIO點(diǎn)燈

2020-10-14 09:37:03

HiBurn鴻蒙.bin文件

2020-10-28 10:03:43

Hi3861 GPIO點(diǎn)燈按鍵

2021-12-20 21:01:52

鴻蒙HarmonyOS應(yīng)用

2020-11-06 10:15:16

HiBurn

2020-12-15 11:57:49

Hi3861 HarmonyOS開發(fā)板

2020-12-02 11:55:40

OLED

2021-06-25 15:32:13

鴻蒙HarmonyOS應(yīng)用

2020-12-09 09:44:29

Hi3861硬件介紹鴻蒙開發(fā)板

2021-09-02 15:25:53

鴻蒙HarmonyOS應(yīng)用

2013-05-21 11:33:11

Android游戲開發(fā)按鍵中斷事件

2020-10-29 09:53:06

Hi3861硬件開發(fā)板

2020-12-17 10:02:16

鴻蒙Hi3861開發(fā)板

2020-10-30 17:12:05

Hi3861

2020-10-30 17:42:36

鴻蒙 OS Hi386
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)