0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RTT大赛作品:AB32VG1开发板—按键扫描

嵌入式开发 来源:AB32VG1开发笔记 作者:AB32VG1开发笔记 2021-11-15 09:54 次阅读

【RTT大赛作品连载】AB32VG1开发板——按键扫描

1. 实验目的

让板载 三个用户按键,通过扫描按键,打印按键值。

2. 开发板硬件平台

poYBAGGGRgCAejjsABX3VGGeJIc209.png

按键硬件电路,可知,使用 按键要使用

PF1 —— S2

PF0 —— S3

PAS —— S4

poYBAGGGnvCAQcGHAABcdDRNTVI869.png

3. 软件编写

在 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. 程序编译下载

编译程序,点击小锤子即可。

pYYBAGGGRnmADAsxAAKXmT_LCcc372.png

下载程序

打开我们下载的Downloader软件,双击Downloader.exe

配置连接串口,千万不要搞错串口号哦。

选择工程目录下的\Debug\rtthread.dcf,这里我的完整目录是

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

点击开始即可下载成功

5. 实验现象:

download 串口打印 msh 控制台信息

按键触发打印,不支持连按。

poYBAGGGoY6AMvHBAACVkF7P9kU341.png

6. 总结

目前是通过引脚轮询读取来实现按键扫描,后面可以试试IO中断的方式实现,哈哈。

编辑:fqj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6035

    文章

    44554

    浏览量

    634594
  • 开发板
    +关注

    关注

    25

    文章

    5032

    浏览量

    97371
  • RTT
    RTT
    +关注

    关注

    0

    文章

    65

    浏览量

    17114
  • 中科蓝讯
    +关注

    关注

    9

    文章

    57

    浏览量

    9867
收藏 人收藏

    评论

    相关推荐

    【迅为】瑞芯微RK3588开发板RK3568开发板区别及优势

    RK3568开发板
    的头像 发表于 11-18 14:19 343次阅读
    【迅为】瑞芯微RK3588<b class='flag-5'>开发板</b>RK3568<b class='flag-5'>开发板</b>区别及优势

    【RA8D1试用活动】RA8D1B-CPKCOR开发板移植linux

    【RA8D1试用活动】RA8D1B-CPKCOR开发板移植linux
    的头像 发表于 11-16 01:02 218次阅读
    【RA8D<b class='flag-5'>1</b>试用活动】RA8D<b class='flag-5'>1</b>B-CPKCOR<b class='flag-5'>开发板</b>移植linux

    正点原子fpga开发板不同型号

    正点原子作为国内领先的FPGA开发板供应商,其产品线覆盖了从入门级到高端应用的各个领域。这些开发板不仅适用于学术研究,还广泛应用于工业控制、通信、图像处理等多个领域。 1. 入门级开发板
    的头像 发表于 11-13 09:30 592次阅读

    【干货】性价比拉满!HK32F407VG开发板介绍

    开发板简介开发板是基于航顺芯片公司F4系列HK32F407VGT7芯片的一款开发板,Cortex-M4内核,最高主频168MHz,内置1MKBFlash和256KBSRAM,SDIO、
    的头像 发表于 11-08 13:27 206次阅读
    【干货】性价比拉满!HK32F407<b class='flag-5'>VG</b><b class='flag-5'>开发板</b>介绍

    如何使用Air780E开发板?看这篇就够了!

    ​ 一、综述 CORE-AIR780E 开发板是合宙通信推出的基于 Air780E 模组所开发的,包含电源,SIM 卡,USB,天线,音频等必要功能的最小硬件系统。以方便用户在设计前期
    的头像 发表于 10-23 17:07 385次阅读
    如何使用Air780E<b class='flag-5'>开发板</b>?看这篇就够了!

    51开发板芯片资料

    51开发板芯片资料
    发表于 09-18 09:29 1次下载

    linux开发板如何编译curl

    在Linux开发板上编译 curl 库通常涉及到几个步骤,包括准备开发环境、下载源代码、配置编译选项以及执行编译和安装过程。以下是一个基本的指南,帮助你在Linux开发板上编译 curl 。
    的头像 发表于 08-30 15:33 596次阅读

    ElfBoard技术贴|在NXP源码基础上适配ELF 1开发板按键功能

    ,将以按键功能的适配作为具体示例,深入解析整个适配的流程。一、准备工作NXP源码路径:ELF1开发板资料包\07-NXP原厂资料\07-1NXP官方源码\linux-
    的头像 发表于 07-10 09:54 594次阅读
    ElfBoard技术贴|在NXP源码基础上适配ELF <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的<b class='flag-5'>按键</b>功能

    米尔NXP i.MX 93开发板的Qt开发指南

    1.概述Qt是一个跨平台的图形应用开发框架,被应用在不同尺寸设备和平台上,同时提供不同版权版本供用户选择。米尔NXPi.MX93开发板(MYD-LMX9X开发板)使用Qt6.5版本进行
    的头像 发表于 06-07 08:01 1729次阅读
    米尔NXP i.MX 93<b class='flag-5'>开发板</b>的Qt<b class='flag-5'>开发</b>指南

    玩转PSoC 6 RTT积木式开发套件,实现毫米波雷达等实用功能

    本期英飞凌手工课,将由来自英飞凌的工程师Jenson给大家带来PSoC62withCAPSENSEevaluationkit(下称PSoC6RTT开发板)和其积木式开发套件的全面介绍。让我们跟着
    的头像 发表于 03-20 08:35 965次阅读
    玩转PSoC 6 <b class='flag-5'>RTT</b>积木式<b class='flag-5'>开发</b>套件,实现毫米波雷达等实用功能

    fpga开发板是什么?fpga开发板有哪些?

    FPGA开发板是一种基于FPGA(现场可编程门阵列)技术的开发平台,它允许工程师通过编程来定义和配置FPGA芯片上的逻辑电路,以实现各种数字电路和逻辑功能。FPGA开发板通常包括FPGA芯片、时钟模块、电源模块、输入输出接口等组
    的头像 发表于 03-14 18:20 1994次阅读

    fpga开发板使用教程

    FPGA开发板的使用教程主要包括以下几个关键步骤。
    的头像 发表于 03-14 15:50 1095次阅读

    ELF 1技术贴|在NXP源码基础上适配开发板按键功能

    至ELF1开发板。接下来,我们将详细阐述适配过程中关于按键功能实现的完整步骤。值得一提的是,ELF1开发板上预置了标识为K
    的头像 发表于 03-08 16:58 957次阅读
    ELF <b class='flag-5'>1</b>技术贴|在NXP源码基础上适配<b class='flag-5'>开发板</b>的<b class='flag-5'>按键</b>功能

    fpga开发板与linux开发板区别

    FPGA开发板与Linux开发板是两种不同的硬件开发平台,各自具有不同的特点和应用场景。在以下的文章中,我将详细介绍FPGA开发板和Linux开发板
    的头像 发表于 02-01 17:09 2226次阅读

    DIY个人的Linux开发板教程

    作者简介:大佬已在硬创社开源了近50款开发板,动手能力极强,于去年年底开始接触学习Linux,并由全志V3s、F1C200S等芯片开始上手DIY个人的Linux开发板
    的头像 发表于 01-07 09:52 2066次阅读
    DIY个人的Linux<b class='flag-5'>开发板</b>教程