【RTT大赛作品连载】AB32VG1开发板——按键扫描
1. 实验目的
让板载 三个用户按键,通过扫描按键,打印按键值。
2. 开发板硬件平台
按键硬件电路,可知,使用 按键要使用
PF1 —— S2
PF0 —— S3
PAS —— S4
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. 程序编译下载
编译程序,点击小锤子即可。
下载程序
打开我们下载的Downloader软件,双击Downloader.exe
配置连接串口,千万不要搞错串口号哦。
选择工程目录下的\Debug\rtthread.dcf,这里我的完整目录是
D:\RT-ThreadStudio\workspace\ab32vg1_demo\Debug\rtthread.dcf
点击开始即可下载成功
5. 实验现象:
download 串口打印 msh 控制台信息。
按键触发打印,不支持连按。
6. 总结
目前是通过引脚轮询读取来实现按键扫描,后面可以试试IO中断的方式实现,哈哈。
编辑:fqj
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
单片机
+关注
关注
6001文章
43973浏览量
620847 -
开发板
+关注
关注
25文章
4429浏览量
93996 -
RTT
+关注
关注
0文章
63浏览量
16882 -
中科蓝讯
+关注
关注
8文章
50浏览量
9630
发布评论请先 登录
相关推荐
玩转PSoC 6 RTT积木式开发套件,实现毫米波雷达等实用功能
本期英飞凌手工课,将由来自英飞凌的工程师Jenson给大家带来PSoC62withCAPSENSEevaluationkit(下称PSoC6RTT开发板)和其积木式开发套件的全面介绍。让我们跟着
【每周一练】小眼睛FPGA1K开发板硬件平台
感谢电子发烧友提供的每周一练的测评机会。本次测评试用的是深圳市小眼睛半导体科技有限公司的MES1K开发板,以紫光Compact系列PGC1KG-LPG100器件为核心,丰富的扩展IO 及数码管、
发表于 12-19 23:37
开源作品!稚晖君超迷你低成本开发板、超酷机器人、智能手环等参考方案
;>点此查看全文&下载资料
5.稚晖君整活作品!基于全志F1C200s的超迷你&低成本开发板开源
曾经靠着“B站最强小电视”以及号称“钢铁侠机械臂”等硬核产品
发表于 12-12 10:28
【ELF 1开发板试用】+ RGB LED及按键的控制
在GPIO的输入设备中,最常用的便是按键。在ELF 1开发板上,自然也短不了它,其在开发板上的位置如图6所示,共有3个,分别为K1、K2及
发表于 11-21 11:11
CSM32RV003开发板的按键及timer1溢出中断的应用
1、前言
申请的CSM32RV003开发板研究好长一段时间了,但是还有不少问题需要解决,一点一点的啃,终于把I/O口和timer1溢出中断弄得差不多了,这里感谢南京中科微的工程师和微信群的好友的帮助
发表于 10-30 10:46
【社区工程师专题系列第七期】嵌入式工程师离不开技术创新——张海良
应用设计大赛一个桌面智能坞小工具
项目简介
很荣幸能申请到AB32VG1开发板参加这次RTT的创新大赛,这个芯片的功能很强大。我基于这个
发表于 08-11 15:32
英飞凌开发板模块评测任务大挑战-SPI驱动测试
使用PSoC™ 62 with CAPSENSE™ evaluation kit开发板适配的RTT SPI驱动,做显示测试。
发表于 08-10 15:44
•467次阅读
【社区工程师专题系列第二期】电子工程师需要在参赛中历练成长——林宏华
项目简介:
基于RT-Thread和中蓝讯科的AB32VG1开发板实现的家庭安全检测功能,主要包含如下功能: 1、基于RT-Thread操作系统的按键组件,音频播放组件等; 2、基于
发表于 06-13 15:26
【英飞凌PSoC 6 RTT开发板试用】+开箱测试
【英飞凌PSoC 6 RTT开发板试用】+开箱测试
硬件资源介绍
Psoc6-evaluationkit-062S2 是 RT-Thread 联合英飞凌推出的一款集成32位双核CPU子系统( ARM
发表于 06-05 01:06
【沁恒CH32V208开发板试用】1-构建RTT-Stdio开发环境
【沁恒CH32V208开发板试用】1-创建RTT-Stdio开发环境
首先真诚感谢电子发烧友、沁恒微电子举办【沁恒CH32V208开发板试用
发表于 05-28 15:41
【沁恒 CH32V208 开发板免费试用】RTT 模拟Arduino库开发项目
title: 【沁恒 CH32V208 开发板免费试用】RTT 模拟Arduino库开发项目
date: 2023-05-24 20:16:10
tags: [嵌入式,rt-thread移植]
本文
发表于 05-24 20:31
【CW32饭盒派开发板试用体验】开发板简单介绍和开发板初体验
今天开箱一款基于CW32F030C8T6的开发板,开发板命名为CW32饭盒派。
下面简单的对开发板做个介绍:
CW32饭盒派板载资源非常丰富:有一电位器、蜂鸣器、3路用户按键、3路指示
发表于 05-22 10:56
【CW32饭盒派开发板试用体验】开发板简单介绍及初体验
今天开箱一款基于CW32F030C8T6的开发板,开发板命名为CW32饭盒派。
下面简单的对开发板做个介绍:
CW32饭盒派板载资源非常丰富:有一电位器、蜂鸣器、3路用户按键、3路指示
发表于 05-22 10:47
评论