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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RTT大賽作品:AB32VG1開(kāi)發(fā)板—按鍵掃描

嵌入式開(kāi)發(fā) ? 來(lái)源:AB32VG1開(kāi)發(fā)筆記 ? 作者:AB32VG1開(kāi)發(fā)筆記 ? 2021-11-15 09:54 ? 次閱讀

【RTT大賽作品連載】AB32VG1開(kāi)發(fā)板——按鍵掃描

1. 實(shí)驗(yàn)?zāi)康?/strong>

讓板載 三個(gè)用戶按鍵,通過(guò)掃描按鍵,打印按鍵值。

2. 開(kāi)發(fā)板硬件平臺(tái)

poYBAGGGRgCAejjsABX3VGGeJIc209.png

按鍵硬件電路,可知,使用 按鍵要使用

PF1 —— S2

PF0 —— S3

PAS —— S4

poYBAGGGnvCAQcGHAABcdDRNTVI869.png

3. 軟件編寫(xiě)

在 application 目錄下,新建 key.c 和 key.h

//key.c
/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2021-11-06     Administrator       the first version
 */
#include "key.h"
#include 
#include "board.h"

struct key_s
{
    uint8_t k0;
    uint8_t k1;
    uint8_t k2;
};
struct key_s button;

//PF0   PF1     PA2
static int key_init(void)
{
    button.k0 = rt_pin_get("PF.0");
    button.k1 = rt_pin_get("PF.1");

    rt_pin_mode(button.k0, PIN_MODE_INPUT_PULLUP);
    rt_pin_mode(button.k1, PIN_MODE_INPUT_PULLUP);

    rt_kprintf("key init\n");
    return 0;
}

#define KEY0_PRES 1
#define KEY1_PRES 2

static uint8_t btn_scan(uint8_t mode)
{
    static uint8_t key_up = 1;

    if(mode)
        key_up = 1;

    if(key_up && ((rt_pin_read(button.k0) == PIN_LOW) || (rt_pin_read(button.k1) == PIN_LOW)))
    {
        rt_thread_mdelay(10);
        key_up = 0;
        if(rt_pin_read(button.k0) == PIN_LOW)
            return KEY0_PRES;
        else if(rt_pin_read(button.k1) == PIN_LOW)
            return KEY1_PRES;
    }else if((rt_pin_read(button.k0) == PIN_HIGH) && (rt_pin_read(button.k1) == PIN_HIGH))
        key_up = 1;

    return 0;
}

static void btn_thread_entry(void* p)
{
    uint8_t byn_value = 0;

    while(1)
    {
        byn_value = btn_scan(0);
        switch(byn_value)
        {
            case KEY0_PRES:
                rt_kprintf("key0 pushed\n");
                break;
            case KEY1_PRES:
                rt_kprintf("key1 pushed\n");
                break;
            default:
                break;
        }
        rt_thread_mdelay(100);
    }
}

static int Thread_btn(void)
{
    rt_thread_t thread = RT_NULL;

    key_init();
    thread = rt_thread_create("button", btn_thread_entry, RT_NULL, 512, 11, 10);
    if(thread == RT_NULL)
    {
        rt_kprintf("Thread_btn Init ERROR");
        return RT_ERROR;
    }
    rt_thread_startup(thread);
}

INIT_APP_EXPORT(Thread_btn);


//key.h
/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2021-11-06     Administrator       the first version
 */
#ifndef APPLICATIONS_KEY_H_
#define APPLICATIONS_KEY_H_


#endif /* APPLICATIONS_KEY_H_ */

修改main.c

/*
 * Copyright (c) 2020-2021, Bluetrum Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2020/12/10     greedyhao    The first version
 */

/**
 * Notice!
 * All functions or data that are called during an interrupt need to be in RAM.
 * You can do it the way exception_isr() does.
 */

#include 
#include "board.h"

int main(void)
{
    rt_kprintf("Hello, world\n");

    while (1)
    {
        rt_thread_mdelay(500);
        rt_thread_mdelay(500);
    }
}

4. 程序編譯下載

編譯程序,點(diǎn)擊小錘子即可。

pYYBAGGGRnmADAsxAAKXmT_LCcc372.png

下載程序

打開(kāi)我們下載的Downloader軟件,雙擊Downloader.exe

配置連接串口,千萬(wàn)不要搞錯(cuò)串口號(hào)哦。

選擇工程目錄下的\Debug\rtthread.dcf,這里我的完整目錄是

D:\RT-ThreadStudio\workspace\ab32vg1_demo\Debug\rtthread.dcf

點(diǎn)擊開(kāi)始即可下載成功

5. 實(shí)驗(yàn)現(xiàn)象:

download 串口打印 msh 控制臺(tái)信息

按鍵觸發(fā)打印,不支持連按。

poYBAGGGoY6AMvHBAACVkF7P9kU341.png

6. 總結(jié)

目前是通過(guò)引腳輪詢(xún)讀取來(lái)實(shí)現(xiàn)按鍵掃描,后面可以試試IO中斷的方式實(shí)現(xiàn),哈哈。

編輯:fqj

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6026

    文章

    44455

    瀏覽量

    630942
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4838

    瀏覽量

    96853
  • RTT
    RTT
    +關(guān)注

    關(guān)注

    0

    文章

    64

    瀏覽量

    17035
  • 中科藍(lán)訊
    +關(guān)注

    關(guān)注

    9

    文章

    53

    瀏覽量

    9823
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用Air780E開(kāi)發(fā)板?看這篇就夠了!

    ? 一、綜述 CORE-AIR780E 開(kāi)發(fā)板是合宙通信推出的基于 Air780E 模組所開(kāi)發(fā)的,包含電源,SIM 卡,USB,天線,音頻等必要功能的最小硬件系統(tǒng)。以方便用戶在設(shè)計(jì)前期
    的頭像 發(fā)表于 10-23 17:07 ?111次閱讀
    如何使用Air780E<b class='flag-5'>開(kāi)發(fā)板</b>?看這篇就夠了!

    51開(kāi)發(fā)板芯片資料

    51開(kāi)發(fā)板芯片資料
    發(fā)表于 09-18 09:29 ?1次下載

    ElfBoard技術(shù)貼|在NXP源碼基礎(chǔ)上適配ELF 1開(kāi)發(fā)板按鍵功能

    ,將以按鍵功能的適配作為具體示例,深入解析整個(gè)適配的流程。一、準(zhǔn)備工作NXP源碼路徑:ELF1開(kāi)發(fā)板資料包\07-NXP原廠資料\07-1NXP官方源碼\linux-
    的頭像 發(fā)表于 07-10 09:54 ?484次閱讀
    ElfBoard技術(shù)貼|在NXP源碼基礎(chǔ)上適配ELF <b class='flag-5'>1</b><b class='flag-5'>開(kāi)發(fā)板</b>的<b class='flag-5'>按鍵</b>功能

    米爾NXP i.MX 93開(kāi)發(fā)板的Qt開(kāi)發(fā)指南

    1.概述Qt是一個(gè)跨平臺(tái)的圖形應(yīng)用開(kāi)發(fā)框架,被應(yīng)用在不同尺寸設(shè)備和平臺(tái)上,同時(shí)提供不同版權(quán)版本供用戶選擇。米爾NXPi.MX93開(kāi)發(fā)板(MYD-LMX9X開(kāi)發(fā)板)使用Qt6.5版本進(jìn)行
    的頭像 發(fā)表于 06-07 08:01 ?1578次閱讀
    米爾NXP i.MX 93<b class='flag-5'>開(kāi)發(fā)板</b>的Qt<b class='flag-5'>開(kāi)發(fā)</b>指南

    玩轉(zhuǎn)PSoC 6 RTT積木式開(kāi)發(fā)套件,實(shí)現(xiàn)毫米波雷達(dá)等實(shí)用功能

    本期英飛凌手工課,將由來(lái)自英飛凌的工程師Jenson給大家?guī)?lái)PSoC62withCAPSENSEevaluationkit(下稱(chēng)PSoC6RTT開(kāi)發(fā)板)和其積木式開(kāi)發(fā)套件的全面介紹。讓我們跟著
    的頭像 發(fā)表于 03-20 08:35 ?786次閱讀
    玩轉(zhuǎn)PSoC 6 <b class='flag-5'>RTT</b>積木式<b class='flag-5'>開(kāi)發(fā)</b>套件,實(shí)現(xiàn)毫米波雷達(dá)等實(shí)用功能

    fpga開(kāi)發(fā)板是什么?fpga開(kāi)發(fā)板有哪些?

    FPGA開(kāi)發(fā)板是一種基于FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)技術(shù)的開(kāi)發(fā)平臺(tái),它允許工程師通過(guò)編程來(lái)定義和配置FPGA芯片上的邏輯電路,以實(shí)現(xiàn)各種數(shù)字電路和邏輯功能。FPGA開(kāi)發(fā)板通常包括FPGA芯片、時(shí)鐘模塊、電源模塊、輸入輸出接口等組
    的頭像 發(fā)表于 03-14 18:20 ?1667次閱讀

    fpga開(kāi)發(fā)板使用教程

    FPGA開(kāi)發(fā)板的使用教程主要包括以下幾個(gè)關(guān)鍵步驟。
    的頭像 發(fā)表于 03-14 15:50 ?889次閱讀

    ELF 1技術(shù)貼|在NXP源碼基礎(chǔ)上適配開(kāi)發(fā)板按鍵功能

    至ELF1開(kāi)發(fā)板。接下來(lái),我們將詳細(xì)闡述適配過(guò)程中關(guān)于按鍵功能實(shí)現(xiàn)的完整步驟。值得一提的是,ELF1開(kāi)發(fā)板上預(yù)置了標(biāo)識(shí)為K
    的頭像 發(fā)表于 03-08 16:58 ?880次閱讀
    ELF <b class='flag-5'>1</b>技術(shù)貼|在NXP源碼基礎(chǔ)上適配<b class='flag-5'>開(kāi)發(fā)板</b>的<b class='flag-5'>按鍵</b>功能

    fpga開(kāi)發(fā)板與linux開(kāi)發(fā)板區(qū)別

    FPGA開(kāi)發(fā)板與Linux開(kāi)發(fā)板是兩種不同的硬件開(kāi)發(fā)平臺(tái),各自具有不同的特點(diǎn)和應(yīng)用場(chǎng)景。在以下的文章中,我將詳細(xì)介紹FPGA開(kāi)發(fā)板和Linux開(kāi)發(fā)板
    的頭像 發(fā)表于 02-01 17:09 ?1923次閱讀

    DIY個(gè)人的Linux開(kāi)發(fā)板教程

    作者簡(jiǎn)介:大佬已在硬創(chuàng)社開(kāi)源了近50款開(kāi)發(fā)板,動(dòng)手能力極強(qiáng),于去年年底開(kāi)始接觸學(xué)習(xí)Linux,并由全志V3s、F1C200S等芯片開(kāi)始上手DIY個(gè)人的Linux開(kāi)發(fā)板。
    的頭像 發(fā)表于 01-07 09:52 ?1742次閱讀
    DIY個(gè)人的Linux<b class='flag-5'>開(kāi)發(fā)板</b>教程

    EGO1開(kāi)發(fā)板的硬件規(guī)格、軟件支持、應(yīng)用場(chǎng)景及優(yōu)勢(shì)

    EGO1開(kāi)發(fā)板是一款功能強(qiáng)大、性?xún)r(jià)比高的開(kāi)發(fā)板,廣泛應(yīng)用于各種嵌入式系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)。本文將從硬件規(guī)格、軟件支持、應(yīng)用場(chǎng)景及優(yōu)勢(shì)等方面詳細(xì)介紹EGO
    的頭像 發(fā)表于 12-21 15:49 ?2282次閱讀

    【ELF 1開(kāi)發(fā)板試用】+ RGB LED及按鍵的控制

    在GPIO的輸入設(shè)備中,最常用的便是按鍵。在ELF 1開(kāi)發(fā)板上,自然也短不了它,其在開(kāi)發(fā)板上的位置如圖6所示,共有3個(gè),分別為K1、K2及
    發(fā)表于 11-21 11:11

    GSM開(kāi)發(fā)板V1調(diào)試手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《GSM開(kāi)發(fā)板V1調(diào)試手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 11-17 14:50 ?0次下載
    GSM<b class='flag-5'>開(kāi)發(fā)板</b>V<b class='flag-5'>1</b>調(diào)試手冊(cè)

    基于單片機(jī)的按鍵電路設(shè)計(jì)(1)

    按鍵作為一個(gè)輸入模塊,在單片機(jī)開(kāi)發(fā)板中必不可少,本文來(lái)討論按鍵的設(shè)計(jì)方案。本文1500字。下篇文章將展示出電路圖。
    的頭像 發(fā)表于 10-31 15:15 ?1987次閱讀
    基于單片機(jī)的<b class='flag-5'>按鍵</b>電路設(shè)計(jì)(<b class='flag-5'>1</b>)

    RA6M3 HMI Board之硬件SPI實(shí)踐

    第一次接觸RTT是在2022年的參加的系統(tǒng)集成與芯片設(shè)計(jì)大賽,當(dāng)時(shí)報(bào)名了RTT賽道從此就打開(kāi)了我使用RTT的大門(mén),RTT是一個(gè)非常好的實(shí)時(shí)操
    的頭像 發(fā)表于 10-30 17:49 ?994次閱讀
    RA6M3 HMI Board之硬件SPI實(shí)踐