91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內不再提示

Key_Scan按鍵掃描函數(shù)詳解

瑞薩嵌入式小百科 ? 來源:野火電子 ? 2025-08-04 14:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

11.3.3Key_Scan按鍵掃描函數(shù)

按鍵程序設計思路可以非常簡單:想要知道某個按鍵是否被按下,只需檢測連接到改按鍵的IO引腳是高電平還是低電平,若是低電平,說明按鍵正處于被按下的狀態(tài)。

通過使用R_IOPORT_PinRead函數(shù),我們可以獲取某個IO引腳的電平狀態(tài)。R_IOPORT_PinRead函數(shù)原型如下:

左右滑動查看完整內容

fsp_err_tR_IOPORT_PinRead(ioport_ctrl_t*constp_ctrl,bsp_io_port_pin_t?
→pin,bsp_io_level_t* p_pin_value);

說明

通過bsp_io_port_pin_t枚舉類型的變量pin傳入要讀取的IO引腳的端口號和引腳號;

通過bsp_io_level_t枚舉類型的指針p_pin_value來獲取該IO引腳的電平狀態(tài)。

bsp_io_level_t枚舉類型的定義如下:

列表2:e_bsp_io_level枚舉類型定義

左右滑動查看完整內容

/* 可以為單個引腳設置電平和讀取電平 */
typedefenume_bsp_io_level
{
BSP_IO_LEVEL_LOW =0,///< Low
BSP_IO_LEVEL_HIGH?///< High
}?bsp_io_level_t;

Key_Scan按鍵掃描函數(shù)如下:

列表3:

代碼清單11-1:Key_Scan按鍵掃描函數(shù)

左右滑動查看完整內容

/* 定義宏 KEY_ON 表示按鍵按下
定義宏 KEY_OFF 表示按鍵沒有按下
*/
#defineKEY_ON 1
#defineKEY_OFF 0


/* 按鍵掃描函數(shù)(阻塞式)
* key: KEY1_SW2_PIN 用戶按鍵 1(絲印 SW2)的引腳
* KEY2_SW3_PIN 用戶按鍵 2(絲印 SW3)的引腳
*/
uint32_tKey_Scan(bsp_io_port_pin_tkey)
{
bsp_io_level_tstate;


// 讀取按鍵引腳電平
R_IOPORT_PinRead(&g_ioport_ctrl, key, &state);
if(BSP_IO_LEVEL_HIGH == state)
{
returnKEY_OFF;//按鍵沒有被按下
}
else
{
do//等待按鍵釋放
{
R_IOPORT_PinRead(&g_ioport_ctrl, key, &state);
}while(BSP_IO_LEVEL_LOW == state);
}


returnKEY_ON;//按鍵被按下了
}

這是一個簡單的按鍵掃描函數(shù),當調用該函數(shù)并且檢測到按鍵被按下的時候,就會在do-while語句里重復檢測按鍵是否被松開,一直到當手松開按鍵的時候才能跳出循環(huán),并返回KEY_ON數(shù)值表明按鍵被按下;而當按鍵沒有被按下的時候Key_Scan函數(shù)則返回KEY_OFF的數(shù)值。

值得注意的是,若程序在do-while循環(huán)里一直檢測到手沒有松開按鍵,則程序會被一直阻塞在這里,因此這是一個阻塞式的掃描函數(shù)。

11.3.4hal_entry入口函數(shù)

在hal_entry函數(shù)里,首先初始化了LED和按鍵,接著進入了while主循環(huán),在該循環(huán)下反復地調用Key_Scan函數(shù)對兩個用戶按鍵進行實時掃描。若按鍵1按下,則翻轉LED1的狀態(tài);若按鍵2按下,則翻轉LED2的狀態(tài)。

需要注意的是,KEY1_SW2_PIN和KEY2_SW3_PIN宏定義了兩個用戶按鍵的引腳,不同的板子按鍵引腳是不一樣的。

左右滑動查看完整內容

/* 啟明 6M5 開發(fā)板,兩個按鍵引腳定義 */
#defineKEY1_SW2_PIN BSP_IO_PORT_00_PIN_04
#defineKEY2_SW3_PIN BSP_IO_PORT_00_PIN_05


/* 啟明 4M2 開發(fā)板,兩個按鍵引腳定義 */
#defineKEY1_SW2_PIN BSP_IO_PORT_04_PIN_03
#defineKEY2_SW3_PIN BSP_IO_PORT_04_PIN_04


/* 啟明 2L1 開發(fā)板,兩個按鍵引腳定義 */
#defineKEY1_SW2_PIN BSP_IO_PORT_00_PIN_01
#defineKEY2_SW3_PIN BSP_IO_PORT_00_PIN_02

hal_entry入口函數(shù)如下:

列表4:代碼清單11-2:hal_entry入口函數(shù)

左右滑動查看完整內容

/* 用戶頭文件包含 */
#include"led/bsp_led.h"
#include"key/bsp_key.h"


voidhal_entry(void)
{
/*TODO:add your own code here */


LED_Init();// LED 初始化
Key_Init();// 按鍵初始化


while(1)
{
if(Key_Scan(KEY1_SW2_PIN) == KEY_ON )//掃描按鍵 1
{
LED1_TOGGLE;//翻轉 LED1 狀態(tài)
}
if(Key_Scan(KEY2_SW3_PIN) == KEY_ON )//掃描按鍵 2
{
LED2_TOGGLE;//翻轉 LED2 狀態(tài)
}
}


#ifBSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}

11.4下載驗證

將程序編譯并下載到開發(fā)板之后,按下復位按鍵來復位開發(fā)板。

然后按下用戶按鍵1可以控制LED1燈的亮滅;按下用戶按鍵2則可以控制LED2燈的亮滅。

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

    關注

    16

    文章

    2111

    瀏覽量

    55682
  • 程序
    +關注

    關注

    117

    文章

    3846

    瀏覽量

    85232
  • 函數(shù)
    +關注

    關注

    3

    文章

    4417

    瀏覽量

    67499
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【戰(zhàn)艦例程系列連載+教學】第八章 按鍵輸入實驗

    。  KEY_Scan函數(shù),則是用來掃描這4個IO口是否有按鍵按下。KEY_Scan函數(shù),支持兩
    發(fā)表于 01-25 10:14

    按鍵掃描Key_Scan中為什么設2個變量

    本帖最后由 playwife_花 于 2015-1-21 09:04 編輯 疑問:把變量 key_check去掉, key_check = KeyPort和 switch (key_check &= 0x0F)中的chec
    發(fā)表于 01-20 14:38

    為什么自有key_scan()==1有用,而key_scan()==2沒有起作用?求解釋?

    key_scan(){static uchar sta = 1;//設置一個狀態(tài),表示按鍵是否按下,1為抬起if(sta == 1&&(KEY18 == 0||KEY19 == 0|
    發(fā)表于 09-06 22:18

    3*4按鍵掃描這樣行不行

    );}//*****************************************************************************************//函數(shù)名稱:Key_scan()按鍵
    發(fā)表于 02-21 23:54

    請問if中的按鍵掃描占用時間嗎?

    突然發(fā)現(xiàn)個問題,我的定時函數(shù)中有個IF(KEY_SCAN()!=0),這個按鍵掃描10MS,那這個IF判斷需要10MS嗎?我覺得應該需要,但如果需要,我的LED
    發(fā)表于 09-06 15:56

    按鍵處理程序問題

    剛入手stm32,試驗按鍵 程序,但是現(xiàn)在有個問題:,我把代碼貼上,大家?guī)兔聪鹿?,main函數(shù)調用key_scan(),上電后沒有按鍵按下時key
    發(fā)表于 03-18 04:35

    MCU按鍵消抖問題

    函數(shù)有響應優(yōu)先級,KEY_FR_1>KEY_FR_2>KEY_OK>KEY_3!!UINT8 KEY_
    發(fā)表于 11-04 06:37

    Stm32按鍵輸入的程序步驟有哪些

    :RCC_APB2PeriphClockCmd();2.初始化IO模式:上拉/下拉輸入。調用函數(shù):GPIO_Init();3.掃描IO口電平(庫函數(shù)/寄存器/位操作)按鍵
    發(fā)表于 01-06 07:43

    鍵盤掃描靜態(tài)數(shù)碼管顯示的相關資料推薦

    簡單鍵盤掃描靜態(tài)數(shù)碼管顯示總結一、矩陣按鍵掃描程序采用行列翻轉掃描void Key_Scan()//行列翻轉式
    發(fā)表于 01-07 07:29

    3-Key_Scan 風馳STM8開發(fā)板程序源代碼 例9

    關天STM8 Key_Scan使用程序源代碼
    發(fā)表于 07-04 17:40 ?14次下載

    .單片機開發(fā)過程中按鍵處理函數(shù)的實現(xiàn)

    **.**單片機開發(fā)過程中按鍵處理函數(shù)的實現(xiàn)? **.**方法一? 這種方法在單片機處理中反應不夠好,當按鍵交替按時,會表現(xiàn)的不夠好?void Key_Scan(void
    發(fā)表于 11-13 12:36 ?16次下載
    .單片機開發(fā)過程中<b class='flag-5'>按鍵</b>處理<b class='flag-5'>函數(shù)</b>的實現(xiàn)

    單片機按鍵掃描的一般思路?

    以下給出三種思路,可以借鑒第一種://按鍵掃描(支持連續(xù)按)u8 KEY_Scan(void){ if(key按下) { delay(10);
    發(fā)表于 12-31 19:37 ?0次下載
    單片機<b class='flag-5'>按鍵</b><b class='flag-5'>掃描</b>的一般思路?

    跑馬燈按鍵

    =0;i
    發(fā)表于 01-13 12:32 ?1次下載
    跑馬燈<b class='flag-5'>按鍵</b>

    STM32按鍵輸入實驗的按鍵優(yōu)先級和上下拉電阻的配置

    3,也就是說假如四個按鍵同時按下,那么只會執(zhí)行KEY0按鍵的指令//注意此函數(shù)有響應優(yōu)先級,KEY0>K
    發(fā)表于 01-14 14:14 ?6次下載
    STM32<b class='flag-5'>按鍵</b>輸入實驗的<b class='flag-5'>按鍵</b>優(yōu)先級和上下拉電阻的配置

    KEY Process按鍵掃描學習記錄

    按鍵掃描函數(shù) void KEY_Process(void) intkey1_state key2_state
    發(fā)表于 03-10 10:25 ?0次下載
    <b class='flag-5'>KEY</b> Process<b class='flag-5'>按鍵</b><b class='flag-5'>掃描</b>學習記錄