在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

基于單片機的按鍵中斷控制

CHANBAEK ? 來源:凌云物聯網實驗室 ? 作者:郭工 ? 2022-12-19 09:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

4.1 原理圖分析

查看EK-RA6M4的原理圖,如下圖所示,該開發板上有2個用戶按鍵。

圖片

根據原理圖可知,這2個按鍵的控制邏輯為:

按鍵 S1 S2
引腳 P005 P006
電平 按鍵按下低電平、按鍵釋放高電平 按鍵按下低電平、按鍵釋放高電平

4.2 中斷配置

首先,在FSP配置中將按鍵所用的兩個GPIO口配置成中斷模式。

圖片

  • 在這里,我們可以查找到 P005P006的中斷號分別為 IRQ10 和 IRQ11;

接著選擇 Stacks , 點擊 "New Stack" -> "Input" -> "External IRQ(r_icu)" 添加外部中斷協議棧。

圖片

接下來配置相關的按鍵中斷,并重新生成代碼。

圖片

  • 通過 Name 字段可以修改按鍵中斷的名稱為 g_key1_irq,它將在IDE自動生成的文件 ra_gen/common_data.c/h 中定義按鍵操作相關的變量;
  • 通過 Channel 字段可以修改按鍵的中斷號,這里設置為10,下面的 Pins 將自動選擇 P005 這個引腳;
  • 通過 Trigger 字段可以修改中斷的觸發方式為下降沿觸發;
  • 通過 Callback 字段設置按鍵的中斷回調函數,它將配置在 g_key1_irq_cfg 變量中,該函數需要我們自己實現;
  • 另外,我們也可以在這里修改按鍵中斷的優先級;

4.3 源碼修改

創建按鍵操作相關的頭文件 src/bsp_key.h 如下:

#ifndef BSP_KEY_H_
#define BSP_KEY_H_

#define USER_KEY1_IRQ_NUMBER        10
#define USER_KEY2_IRQ_NUMBER        11

extern int key_init(void);

extern void icu_deinit(void);

#endif /* BSP_KEY_H_ */

創建按鍵操作相關的c文件 src/bsp_key.c 如下:

#include h>
#include "bsp_led.h"
#include "bsp_key.h"
#include "bsp_api.h"
#include "common_data.h"

int key_init(void)
{
    int err = FSP_SUCCESS;

    /* Open and enable key1 interrupt  */
    err = R_ICU_ExternalIrqOpen(&g_key1_irq_ctrl, &g_key1_irq_cfg);
    if (FSP_SUCCESS != err)
    {
        printf ("
**R_ICU_ExternalIrqOpen API FAILED**
");
        return err;
    }

    err = R_ICU_ExternalIrqEnable(&g_key1_irq_ctrl);
    if (FSP_SUCCESS != err)
    {
        printf ("
**R_ICU_ExternalIrqOpen API FAILED**
");
        return err;
    }

    /* Open and enable key1 interrupt  */
    err = R_ICU_ExternalIrqOpen(&g_key2_irq_ctrl, &g_key2_irq_cfg);
    if (FSP_SUCCESS != err)
    {
        printf ("
**R_ICU_ExternalIrqOpen API FAILED**
");
        return err;
    }

    err = R_ICU_ExternalIrqEnable(&g_key2_irq_ctrl);
    if (FSP_SUCCESS != err)
    {
        printf ("
**R_ICU_ExternalIrqOpen API FAILED**
");
        return err;
    }

    return err;
}

void icu_deinit(void)
{
    R_ICU_ExternalIrqClose(&g_key1_irq_ctrl);
    R_ICU_ExternalIrqClose(&g_key2_irq_ctrl);
}

void key_callback(external_irq_callback_args_t *p_args)
{
    static bsp_led_status_t      status[2] = { BSP_LEDON, BSP_LEDON};

    if(USER_KEY1_IRQ_NUMBER == p_args->channel)
    {
        turn_led(BSP_LEDRED, status[0]);
        status[0] ^= 1;
    }
    else if(USER_KEY2_IRQ_NUMBER == p_args->channel)
    {
        turn_led(BSP_LEDGREEN, status[1]);        status[1] ^= 1;
    }
}
  • 按鍵回調函數 key_callback() 將分別通過兩個按鍵控制 紅綠兩個燈的亮滅。

修改 src/hal_entry.c 源文件,在里面添加按鍵初始化代碼并修改藍色Led燈為系統運行的心跳燈狀態。

... ...
#include "bsp_key.h"
... ...
void hal_entry(void)
{
    ... ...
    key_init();
    while (1)
    {
        turn_led(BSP_LEDBLUE, BSP_LEDON);
        delay_ms(200);
        turn_led(BSP_LEDBLUE, BSP_LEDOFF);
        delay_ms(200);

        turn_led(BSP_LEDBLUE, BSP_LEDON);
        delay_ms(200);
        turn_led(BSP_LEDBLUE, BSP_LEDOFF);
        delay_ms(200);

        turn_led(BSP_LEDBLUE, BSP_LEDON);
        delay_ms(500);
        turn_led(BSP_LEDBLUE, BSP_LEDOFF);
        delay_ms(1000);
    }
}

4.4 編譯運行

代碼修改完成后,在開發板上編譯運行,藍色Led將作為系統狀態心跳燈,而按下S1、S2將點亮紅色和綠色Led,再次按下則將滅掉Led。

圖片

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

    關注

    1325

    文章

    6414

    瀏覽量

    239852
  • 單片機
    +關注

    關注

    6067

    文章

    44961

    瀏覽量

    648904
  • GPIO
    +關注

    關注

    16

    文章

    1279

    瀏覽量

    53828
  • 按鍵中斷
    +關注

    關注

    0

    文章

    15

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    單片機教程十七:單片機中斷系統

    單片機教程十七:單片機中斷系統 單片機中斷系統的概念:什么是中斷,我們從一個生活中的例程引入
    發表于 05-15 23:11 ?5081次閱讀
    <b class='flag-5'>單片機</b>教程十七:<b class='flag-5'>單片機</b>的<b class='flag-5'>中斷</b>系統

    單片機按鍵控制程序【匯編版】

    單片機按鍵控制程序【匯編版】單片機按鍵控制程序【匯編版】單片機按鍵控制程序【匯編版】
    發表于 12-29 11:04 ?0次下載

    單片機按鍵控制程序【C語言】

    單片機按鍵控制程序【C語言】單片機按鍵控制程序【C語言】單片機按鍵控制程序【C語言】
    發表于 12-29 11:04 ?29次下載

    單片機中斷系統介紹_51單片機中斷系統結構

    單片機中斷就是當單片機正在執行程序的時候,突然某個按鍵按下了(產生外部中斷),單片機就必須得去處
    發表于 01-10 17:29 ?1.3w次閱讀
    <b class='flag-5'>單片機</b><b class='flag-5'>中斷</b>系統介紹_51<b class='flag-5'>單片機</b><b class='flag-5'>中斷</b>系統結構

    單片機外部中斷程序下載

    單片機外部中斷程序和電路圖,通過按鍵控制計數和清零操作
    發表于 05-21 10:57 ?0次下載
    <b class='flag-5'>單片機</b>外部<b class='flag-5'>中斷</b>程序下載

    51單片機中斷用法實例解析

    51單片機的外部中斷0引腳接一只按鍵,該按鍵通過上拉電阻接到電源,即沒有按鍵發生時單片機檢測到的
    發表于 12-12 15:31 ?2.6w次閱讀
    51<b class='flag-5'>單片機</b><b class='flag-5'>中斷</b>用法實例解析

    使用51單片機外部中斷按鍵控制LED閃爍的程序免費下載

    本文檔的主要內容詳細介紹的是使用51單片機外部中斷按鍵控制LED閃爍的程序免費下載。
    發表于 07-05 17:41 ?27次下載
    使用51<b class='flag-5'>單片機</b>外部<b class='flag-5'>中斷</b><b class='flag-5'>按鍵控制</b>LED閃爍的程序免費下載

    單片機--中斷系統實驗

    實驗目的和任務目的:利用“模塊化單片機教學實驗平臺”,加深對單片機中斷系統的理解。任務:利用單片機中斷系統完成程序設計。 實驗內容使用A
    發表于 11-05 13:20 ?11次下載
    <b class='flag-5'>單片機</b>--<b class='flag-5'>中斷</b>系統實驗

    單片機按鍵調節時鐘

    按鍵調節時鐘的應用實驗一、實驗目的(一)進一步掌握數碼管的顯示控制;(二)進一步掌握單片機的定時器中斷的應用;(三)進一步掌握定時器工作方式的控制
    發表于 11-11 11:06 ?76次下載
    <b class='flag-5'>單片機</b>:<b class='flag-5'>按鍵</b>調節時鐘

    單片機按鍵使用程序 (51單片機

    單片機獨立按鍵使用程序 (51單片機)獨立按鍵單片機中很重要的一個器件,在這篇文章里,通過這個用獨立
    發表于 11-11 18:36 ?108次下載
    <b class='flag-5'>單片機</b><b class='flag-5'>按鍵</b>使用程序 (51<b class='flag-5'>單片機</b>)

    51單片機按鍵檢測--獨立按鍵與矩陣鍵盤

    按鍵可以說是51單片機項目開發的一個重要組件了,它是作為51單片機IO口輸入的一種重要方式。我們可以通過按鍵控制單片機執行相應的程序,得到我們想要得效果。51
    發表于 11-12 11:06 ?17次下載
    51<b class='flag-5'>單片機</b><b class='flag-5'>按鍵</b>檢測--獨立<b class='flag-5'>按鍵</b>與矩陣鍵盤

    PIC單片機 按鍵檢測識別

    目錄按鍵和PIC單片機一、按鍵二、按鍵的物理連接與檢測三、PIC16F18854單片機按鍵檢測及
    發表于 11-16 12:36 ?12次下載
    PIC<b class='flag-5'>單片機</b> <b class='flag-5'>按鍵</b>檢測識別

    瑞薩單片機之外部中斷實現按鍵的長按與短按(二)

    瑞薩單片機通過外部中斷實現按鍵的長按與短按
    發表于 11-22 14:21 ?21次下載
    瑞薩<b class='flag-5'>單片機</b>之外部<b class='flag-5'>中斷</b>實現<b class='flag-5'>按鍵</b>的長按與短按(二)

    51單片機 中斷控制蜂鳴器

    51單片機 中斷控制蜂鳴器單片機通過使用外部中斷控制蜂鳴器。#include <reg51
    發表于 11-23 16:51 ?27次下載
    51<b class='flag-5'>單片機</b> <b class='flag-5'>中斷</b><b class='flag-5'>控制</b>蜂鳴器

    單片機獨立按鍵控制led燈程序

    單片機獨立按鍵控制LED燈程序 單片機獨立按鍵控制LED燈程序是一種簡單而有趣的電子學習項目,它通常由一個單片機芯片、一個LED燈和一個
    的頭像 發表于 09-02 17:05 ?5271次閱讀
    主站蜘蛛池模板: 色播五月激情五月 | 视频免费1区二区三区 | 国产无限资源 | 日韩三级毛片 | 在线久综合色手机在线播放 | 天天曰天天干天天操 | 日本人善交69xxx| 男人日女人视频在线观看 | 亚洲精品免费视频 | 伊人狠狠丁香婷婷综合色 | 国产精品视频一区国模私拍 | 亚洲色图欧美在线 | 天天干天天干天天操 | 日日天天干 | 狠狠去| 黄网站播放 | 天天av天天翘天天综合网 | 97在线人人| 992tv国产精品福利在线 | 成人福利在线视频 | 又色又污又爽又黄的网站 | 午夜精品久久久久久久2023 | 天天爽天天爽天天片a久久网 | 美女免费视频一区二区三区 | 喷潮白浆直流在线播放 | 狠狠操狠狠插 | 天天搞天天色 | 色吧色吧色吧网 | 天天狠狠| 曰本女人一级毛片看一级毛 | 特级全黄大片 | 国产激情电影综合在线看 | 香蕉久久夜色精品国产2020 | 国产视频每日更新 | 国产精品秒播无毒不卡 | 天天操天天射天天操 | 91精品日本久久久久久牛牛 | 男人不识本站 | 丁香婷婷亚洲六月综合色 | 伦理片第一页 | 美女露出尿口让男人桶爽网站 |