电子发烧友网>物联网> > 正文

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

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播

电子发烧友观察

一线报道 · 深度观察 · 最新资讯
收藏 人收藏
分享:

评论

相关推荐

【联盛德W806-KIT开发板试用体验】GPIO点灯基础测试

今天收到开发板,主要测试一下新手是否好上手,之前一直玩的51和STM32的单片机,算是有一定的基础吧,话不多说,先...
发表于 2021-11-13 21:53 202次阅读
【联盛德W806-KIT开发板试用体验】GPIO点灯基础测试

【联盛德W806-KIT开发板试用体验】板载led闪烁

【联盛德W806-KIT开发板试用体验】led闪烁1. 开发环境搭建​ 程序开发平台:CDK ​ 程序下载软件:Upgrade_T...
发表于 2021-11-13 12:54 0次阅读
【联盛德W806-KIT开发板试用体验】板载led闪烁

lcd1

代码没有问题,但是矩阵按键按下后lcd1602没有反应,为什么呢,大佬求助!!!!! #include #include #defi...
发表于 2021-11-13 12:45 0次阅读
lcd1

【联盛德W806-KIT开发板试用体验】+ 开箱测试(LED)

今天收到测试板了,上手点灯测试了一下,感觉体验很好,先上个效果图 作为一个从STM32转过来的人,上手这个小板子...
发表于 2021-11-12 11:20 404次阅读
【联盛德W806-KIT开发板试用体验】+ 开箱测试(LED)

8位RISC核MCU,全新上市,请各位大佬关注

8位risc架构、带12-bit ADC的高性能单片机。该款芯片内带64 Byte SRAM、外围配置简单,可在节约电路成本前提下...
发表于 2021-11-12 10:52 0次阅读
8位RISC核MCU,全新上市,请各位大佬关注

桥式可逆斩波电路设计相关资料分享

桥式可逆斩波电路设计方法与心得(1)原理分析驱动电路(基本配置)包括PWM信号处理、封锁信号处理、死区生成、MO...
发表于 2021-11-12 08:36 0次阅读
桥式可逆斩波电路设计相关资料分享

如何去实现一种基于单片机的TLC稳压电源系统设计

三极管射极电压是稳压电源的输出电压,可以接用电器或负载,这个电压值通过TLC549(A/D,同TLC548)数据转换后...
发表于 2021-11-12 08:34 0次阅读
如何去实现一种基于单片机的TLC稳压电源系统设计

稳压电源的工作原理分析

一、稳压电源简介上图是一个简单的,也是一个完整的电源电路。交流输入电路(图中的输入电源和电源变压器)有两个用意...
发表于 2021-11-12 07:24 0次阅读
稳压电源的工作原理分析

数字控制电源技术是什么

数控直流稳压电源一、实验目的二、实验内容三、实验步骤四、C代码如下五、实验结果六、实验体会一、实验目的数字控制...
发表于 2021-11-12 06:39 0次阅读
数字控制电源技术是什么

如何利用稳压芯片去设计一个恒流源呢

一、先从一个简单的稳压电路说起LM7805(12V-5V)稳压电路如下图所示。标箭头的是能确定的电流的走向,那么图中序...
发表于 2021-11-12 06:06 0次阅读
如何利用稳压芯片去设计一个恒流源呢