电子发烧友网 > 今日头条 > 正文

基于鸿蒙OS的按键驱动

2020年11月11日 10:03 次阅读

按键作为常用的输入系统,如何准确并高效的获取按键值,是一个经常要面对的问题,今天我们看看在鸿蒙系统中,如何得到独立按键的按键值。

实现目标

我们这次以Hi3861核心板左下角的USER按键S2为例,当按键按下时,通过USBType-c对应的串口输出信息。

按键S2在实物中的对应关系如下图黄线所示:

按键原理图

核心板左下角的按键S2的原理图如下:

当S2被按下之后,GPIO05与GND相连,此时GPIO05输入为低电平。

代码实现

实现方式一:读取输入IO的状态

#include#include#include"ohos_init.h"#include"cmsis_os2.h"#include"wifiiot_gpio.h"#include"wifiiot_gpio_ex.h"#include"wifiiot_errno.h"staTIcvoidKey_Task(constchar*arg){(void)arg;printf("EntertheKey_Task...\n");while(1){WifiIotGpioValuewigv;GpioGeTInputVal(WIFI_IOT_IO_NAME_GPIO_5,&wigv);if(wigv==WIFI_IOT_GPIO_VALUE0){usleep(10*1000);//10mswhile(1){GpioGeTInputVal(WIFI_IOT_IO_NAME_GPIO_5,&wigv);if(wigv==WIFI_IOT_GPIO_VALUE1){printf("[DEMO]GPIO05Lowlevel.\n");break;}}}}return;}staTIcvoidKeyExampleEntry(void){unsignedintret=0;GpioInit();IoSetFunc(WIFI_IOT_IO_NAME_GPIO_5,WIFI_IOT_IO_FUNC_GPIO_5_GPIO);GpioSetDir(WIFI_IOT_GPIO_IDX_5,WIFI_IOT_GPIO_DIR_IN);if(ret!=WIFI_IOT_SUCCESS){printf("=====ERROR======gpio->GpioSetDirret:%d\r\n",ret);return;}osThreadAttr_tattr={0};attr.name="Key_Task";attr.attr_bits=0U;attr.cb_mem=NULL;attr.cb_size=0U;attr.stack_mem=NULL;attr.stack_size=1024;attr.priority=osPriorityNormal;if(osThreadNew((osThreadFunc_t)Key_Task,NULL,&attr)==NULL){printf("FailedtocreateKey_Task!\n");}}SYS_RUN(KeyExampleEntry);

编译代码:

pythonbuild.pywifiiot

更新固件之后重启最小系统板,打开串口助手,点击核心板上的USER按键S2,串口助手输出信息如下:

注意:此实例新建了一个任务用于循环读取按键的状态,KeyExampleEntry作为应用程序的入口函数,不能随意使用while(1)这种耗时的操作,必须快速返回,否则会妨碍鸿蒙OS中其他应用程序的运行,因此,在这个入口函数中创建一个按键状态监测的专属任务(线程)用于判断按键的状态。

GPIO中断

通过上面的原理图我们可知,当按键S2没有被按下的时候,GPIO05为默认状态高电平,当按键S2被按下时,GPIO05与GND相连,GPIO05被拉低,当松开按键S2的时候,GPIO05又恢复高电平。

在此过程中,当按键S2被按下时,GPIO05会收到一个由高到低的电平变化,我们称这个过程为下降沿;当按键S2被松开时,GPIO05会收到一个由低到高的电平变化,我们称这个过程为上升沿。

综上所述,在不考虑抖动影响的前提下,每次按键被按下,GPIO05将会收到一个下降沿;按键被释放,GPIO05会收到一个上升沿。

我们在GPIO05这个引脚上注册一个边沿触发函数(上升沿或者下降沿触发都可以),那么这个注册的边沿触发回调函数被调用一次,理论上就是有一次按键的动作发生。

#include#include#include"ohos_init.h"#include"cmsis_os2.h"#include"wifiiot_gpio.h"#include"wifiiot_gpio_ex.h"#include"wifiiot_errno.h"/*gpiocallbackfunc*/voidgpio5_isr_func(char*arg){(void)arg;printf("-----gpio05isrsuccess-----\r\n");}staticvoidKeyExampleEntry(void){unsignedintret=0;GpioInit();IoSetFunc(WIFI_IOT_IO_NAME_GPIO_5,WIFI_IOT_IO_FUNC_GPIO_5_GPIO);GpioSetDir(WIFI_IOT_GPIO_IDX_5,WIFI_IOT_GPIO_DIR_IN);//IoSetPull(WIFI_IOT_GPIO_IDX_5,WIFI_IOT_IO_PULL_UP);if(ret!=WIFI_IOT_SUCCESS){printf("=====ERROR======gpio->GpioSetDirret:%d\r\n",ret);return;}ret=GpioRegisterIsrFunc(WIFI_IOT_GPIO_IDX_5,WIFI_IOT_INT_TYPE_EDGE,WIFI_IOT_GPIO_EDGE_RISE_LEVEL_HIGH,gpio5_isr_func,NULL);if(ret!=WIFI_IOT_SUCCESS){printf("=====ERROR======gpio->hi_gpio_register_isr_functionret:%d\r\n",ret);}}SYS_RUN(KeyExampleEntry);

代码说明:

  1. WIFI_IOT_IO_NAME_GPIO_5是与按键S2相连的GPIO,要实现按键中断捕获,需要先使用IoSetFunc()函数进行端口功能重定义;

  2. 调用GpioSetDir()函数,设置GPIO05为输入,并通过IoSetPull()函数将端口设置为上拉输入(PullUp);

  3. 调用GpioRegisterIsrFunc()函数,完成GPIO05和回调函数gpio5_isr_func()的注册绑定,设置触发模式为上升沿触发:WIFI_IOT_GPIO_EDGE_RISE_LEVEL_HIGH,当按键S2被抬起的时候,产生上升沿,触发回调函数gpio5_isr_func()工作。

通过上面两种方式,我们学会了独立按键状态的获取、鸿蒙系统中如何创建任务和外部中断的使用,利用此代码,我们还可以用于识别热释红外传感器的响应信号。

资料获取

公众号留言区置顶留言获取本文相关代码。

ps:文章首发于电子发烧友。

小哈有话说

最近在鸿蒙交流群中看到下面一大批开发板要移植鸿蒙操作系统了,等到这些厂商将板卡移植好了,那么鸿蒙就真的成气候了,作为一个嵌入式开发者,学习一个实时操作系统是必不可少的,学什么都是学,为什么不学一个有前途的呢?

欢迎关注

程序员小哈带你玩转嵌入式,微信搜索:嵌入式从0到1,更多干货等着你。

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

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

关注发烧友课堂

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

电子发烧友观察

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

评论

相关推荐

如何实现鸿蒙系统编译、烧录不跨平台的?

鸿蒙目前的弱点,Windows 下不能编译,Linux 下又没有烧写工具。虽然 vscode有个 D....
发表于 2020-11-11 09:59 0次阅读
如何实现鸿蒙系统编译、烧录不跨平台的?

荣耀手表 GS Pro首先升级华为鸿蒙 2.0内...

IT之家11月10日消息 数码博主 @长安数码君 今日爆料称,第一个升级华为鸿蒙 2.0 相关能力的....
发表于 2020-11-10 16:28 241次阅读
荣耀手表 GS Pro首先升级华为鸿蒙 2.0内...

12月发布鸿蒙系统测试版,网友:支持并期待更新

发表于 2020-11-10 14:38 265次阅读
12月发布鸿蒙系统测试版,网友:支持并期待更新

失去麒麟芯片王牌的华为手机,手里还有什么筹码?

昨日晚间,据数码博主@长安数码君爆料——华为消费者业务软件部总裁王成录表示:华为鸿蒙OS 2.0手机....
发表于 2020-11-10 11:56 424次阅读
失去麒麟芯片王牌的华为手机,手里还有什么筹码?

华为关注oppo魅族官微,暗示准备加入适配鸿蒙O...

发表于 2020-11-09 14:34 210次阅读
华为关注oppo魅族官微,暗示准备加入适配鸿蒙O...

鸿蒙OS系统Beta测试版本或将来临

11月9日消息,日前,据数码博主@长安数码君爆料,华为鸿蒙OS 2.0手机系统已经暂定在12月18日....
发表于 2020-11-09 13:46 276次阅读
鸿蒙OS系统Beta测试版本或将来临

深度操作系统宣布已在小米6上刷入它家的UOS

国产手机采用国产操作系统一直颇受国人关注,由此各手机操作系统一直就此进行比赛,近日国产操作系统之一的....
发表于 2020-11-09 10:39 1004次阅读
深度操作系统宣布已在小米6上刷入它家的UOS

继华为鸿蒙系统后,小米Vela加入操作系统战场

智能手机排行榜上,全球前五,中国厂商独占三席。然而,若论手机操作系统,即使是在全球范围内,除苹果之外....
发表于 2020-11-07 11:34 787次阅读
继华为鸿蒙系统后,小米Vela加入操作系统战场

余承东宣布华为Mate30系列正式升级EMUI1...

经过一段时间的公测,余承东宣布,大家期待的EMUI 11今天可以在P40系列和Mate 30系列等8....
发表于 2020-11-06 18:04 1352次阅读
余承东宣布华为Mate30系列正式升级EMUI1...

安卓系统垄断梦灭!华为鸿蒙系统可实现全面替换

发表于 2020-11-06 11:47 385次阅读
安卓系统垄断梦灭!华为鸿蒙系统可实现全面替换

鸿蒙首秀!15款华为智选产品,全套1.3万

11月5日,华为举办2020智选品鉴会,这也是华为的第一场智选专场品鉴会,一口气发布了15款新品,涵....
发表于 2020-11-06 09:27 418次阅读
鸿蒙首秀!15款华为智选产品,全套1.3万

王成录:鸿蒙系统与现在的ios和安卓完全不在一个...

10月30日下午,华为Mate40系列国内发布会正式举行,其配备的华为最新创新技术引发了行业内外的激....
发表于 2020-11-06 09:20 228次阅读
王成录:鸿蒙系统与现在的ios和安卓完全不在一个...

华为智选智能摄像头Pro:支持鸿蒙OS、一键视频...

11月5日下午,在2020华为智选品鉴会上,华为正式推出了华为智选智能摄像头Pro系列,这是首款支持....
发表于 2020-11-05 15:50 362次阅读
华为智选智能摄像头Pro:支持鸿蒙OS、一键视频...

华为发布首款搭载鸿蒙系统的摄像头,售价299起

11月5日下午,在2020华为智选品鉴会上,华为正式推出了华为智选智能摄像头Pro系列,这是首款支持....
发表于 2020-11-05 15:30 367次阅读
华为发布首款搭载鸿蒙系统的摄像头,售价299起

华为智选车载智慧屏将12月上市:有望搭载鸿蒙系统

10月30日,华为年度旗舰手机Mate40系列在国内发布,同时亮相的还有华为智选车载智慧屏,由于时间....
发表于 2020-11-05 15:24 203次阅读
华为智选车载智慧屏将12月上市:有望搭载鸿蒙系统

终于官宣,华为智选车载智慧屏将于12月正式发布

10月30日,华为年度旗舰手机Mate40系列在国内发布,同时亮相的还有华为智选车载智慧屏,由于时间....
发表于 2020-11-05 15:19 2492次阅读
终于官宣,华为智选车载智慧屏将于12月正式发布

Hi3861 NV操作——如何保存数据到开发板,断电不丢失

实际产品开发过程中,我们肯定需要保存一些数据,并且掉电不丢失。例如很多人在使用我之前写的一篇WiFi配网功能后,...
发表于 2020-11-04 17:01 261次阅读
Hi3861 NV操作——如何保存数据到开发板,断电不丢失

没有人可以熄灭漫天星火,华为将走向万物互联

上周五,华为“跃见非凡”年度新品发布会如约而至。整场发布会的亮点,自然是拥有强大硬件配置和各项软实力....
发表于 2020-11-04 16:31 203次阅读
没有人可以熄灭漫天星火,华为将走向万物互联

万众瞩目!曝华为Mate40系列将全球首升鸿蒙2...

发表于 2020-11-04 11:38 250次阅读
万众瞩目!曝华为Mate40系列将全球首升鸿蒙2...

华为似乎并不担心谷歌收紧安卓系统

 之前外界一直担心,如果谷歌突然收紧安卓系统,对于华为来说,可能又是一次重要的打击,不过现在外界多虑....
发表于 2020-11-04 09:47 300次阅读
华为似乎并不担心谷歌收紧安卓系统

不重新造轮子为的是更好的提高开发效率

                         ...
发表于 2020-11-02 23:16 129次阅读
不重新造轮子为的是更好的提高开发效率

华为智选车载智慧屏即将上市,搭载鸿蒙系统,已合作...

发表于 2020-11-02 15:08 1279次阅读
华为智选车载智慧屏即将上市,搭载鸿蒙系统,已合作...

鸿蒙系统加持的华为Mate50Pro概念设计图

华为Mate40系列国行版已经正式发布了,麒麟9000芯片果然没有令人失望,在某些参数方面甚至比苹果....
发表于 2020-11-02 13:33 673次阅读
鸿蒙系统加持的华为Mate50Pro概念设计图

鸿蒙与 iOS 安卓不同赛道,万物互联中国有巨大...

10 月 31 日晚间消息,华为近日举行 Mate40 系列国内发布会,推出了智能手机、智能手表、智....
发表于 2020-11-01 11:57 334次阅读
鸿蒙与 iOS 安卓不同赛道,万物互联中国有巨大...

基于鸿蒙系统+Hi3861的WiFi小车详解

我们得有一套WiFi小车套件,其实也是Hi3861加上电机、循迹模块、超声波等模块。
发表于 2020-11-01 09:41 345次阅读
基于鸿蒙系统+Hi3861的WiFi小车详解

如何区分鸿蒙跟 Linux ?Liteos-a ...

鸿蒙不是 Linux,也不是安卓 很多人会混淆鸿蒙跟 Linux 的关系。 先举个例子,大家很熟悉的....
发表于 2020-10-30 14:26 220次阅读
如何区分鸿蒙跟 Linux ?Liteos-a ...

《鸿蒙设备学习菜鸟指南》之【六、搭建编译环境】

《鸿蒙设备学习菜鸟指南》之【六、搭建编译环境】 六、搭建编译环境 我们同样首先使用最简化的方案,先入门,然...
发表于 2020-10-30 14:24 224次阅读
《鸿蒙设备学习菜鸟指南》之【六、搭建编译环境】

《鸿蒙设备学习菜鸟指南》之 【五、搭建开发环境】

《鸿蒙设备学习菜鸟指南》之 【五、搭建开发环境】 五、搭建开发环境 我们首先使用最简化的方案,先入门,...
发表于 2020-10-30 13:59 101次阅读
《鸿蒙设备学习菜鸟指南》之 【五、搭建开发环境】

《鸿蒙设备学习菜鸟指南》之【四、测试设备】

[文章] 《鸿蒙设备学习菜鸟指南》之【四、测试设备】 四、测试设备 我们先不对设备做完整的功能测试,只进行...
发表于 2020-10-30 13:56 101次阅读
《鸿蒙设备学习菜鸟指南》之【四、测试设备】

《鸿蒙设备学习菜鸟指南》之 【三、安装】

《鸿蒙设备学习菜鸟指南》之 【三、安装】 三、安装 废话少说,直接看:(论坛不能传视频,只好请大家去润...
发表于 2020-10-30 13:45 101次阅读
《鸿蒙设备学习菜鸟指南》之 【三、安装】

《鸿蒙设备学习菜鸟指南》之【二、拿到设备以后,我们要怎么玩?】

《鸿蒙设备学习菜鸟指南》之【二、拿到设备以后,我们要怎么玩?】 二、拿到设备以后,我们要怎么玩? &nbs...
发表于 2020-10-30 13:16 101次阅读
《鸿蒙设备学习菜鸟指南》之【二、拿到设备以后,我们要怎么玩?】

《鸿蒙设备学习菜鸟指南》之【一、认识手中的设备】

《鸿蒙设备学习菜鸟指南》之【一、认识手中的设备】 一、认识手中的设备我们拿到的套件,目前有以下三款: 没...
发表于 2020-10-30 13:15 101次阅读
《鸿蒙设备学习菜鸟指南》之【一、认识手中的设备】

《鸿蒙设备学习菜鸟指南》之 【索引及PDF和工具分享】

《鸿蒙设备学习菜鸟指南》之 【目录索引】 本帖为索引贴,各节的内容,将逐步发布。本菜鸟指南的写作目的,是为了...
发表于 2020-10-30 13:14 802次阅读
《鸿蒙设备学习菜鸟指南》之 【索引及PDF和工具分享】

鸿蒙OS 2.0手机测试版12月准时到来

9月份的开发者大会上,华为正式发布了面向全场景的新一代分布式操作系统鸿蒙HarmonyOS 2.0,....
发表于 2020-10-29 16:16 306次阅读
鸿蒙OS 2.0手机测试版12月准时到来

华为鸿蒙系统2.0手机研发已准备就绪,将在12月...

9月份的开发者大会上,华为正式发布了面向全场景的新一代分布式操作系统鸿蒙HarmonyOS 2.0,....
发表于 2020-10-29 16:11 459次阅读
华为鸿蒙系统2.0手机研发已准备就绪,将在12月...

我和鸿蒙的亲密接触----linux环境搭建

首先十分感觉电子发烧友让我找到不少坑的解决办法。 目前鸿蒙系统的开发方式是在Linux系统上面编译源码,Windows...
发表于 2020-10-28 21:49 0次阅读
我和鸿蒙的亲密接触----linux环境搭建

华为Mate40新功能将于10月30日国内发布会...

发表于 2020-10-28 11:18 1022次阅读
华为Mate40新功能将于10月30日国内发布会...

EMUI 11、鸿蒙在基本技术上的重用度越来越高

Mate 40系列上预装的仍然是底层基于安卓的EMUI 11,而发布多日的鸿蒙OS依然没有出现在手机....
发表于 2020-10-28 09:51 271次阅读
EMUI 11、鸿蒙在基本技术上的重用度越来越高

华为:努力推进搭载鸿蒙系统的手机

对于不少用户来说,都很期望看到搭载鸿蒙系统的手机,而按照华为消费者BG软件部总裁王成录的说法,这件事....
发表于 2020-10-28 09:26 324次阅读
华为:努力推进搭载鸿蒙系统的手机

EMUI 11、鸿蒙OS是什么关系呢?

Mate 40系列上预装的仍然是底层基于安卓的EMUI 11,而发布多日的鸿蒙OS依然没有出现在手机....
发表于 2020-10-28 09:24 600次阅读
EMUI 11、鸿蒙OS是什么关系呢?

华为车载智慧屏与Mate40 系列国行一同发布,...

今日,华为终端官方微博宣布,华为智选车载智慧屏将于10月30日在上海发布,不出意外将和Mate40系....
发表于 2020-10-27 14:04 434次阅读
华为车载智慧屏与Mate40 系列国行一同发布,...

华为智选车载智慧屏:搭载鸿蒙 OS 2.0 系统...

今天华为官方宣布了华为智选车载智慧屏,新品将于 10 月 30 日发布,届时国行 Mate40 系列....
发表于 2020-10-27 13:55 483次阅读
华为智选车载智慧屏:搭载鸿蒙 OS 2.0 系统...

【每日资料精选】开关电源电子书+逆变电源+鸿蒙精...

发表于 2020-10-26 18:44 335次阅读
【每日资料精选】开关电源电子书+逆变电源+鸿蒙精...

1024精彩回看:首场HarmonyOS官方技术...

在1024开发者日,这个特殊的日子里,由华为消费者BG软件部开源中心和开放原子开源基金会联合主办、电....
发表于 2020-10-26 09:03 1568次阅读
1024精彩回看:首场HarmonyOS官方技术...

如何使用 HiBurn 工具烧录鸿蒙的 .bin...

鸿蒙官方文档的Hi3861开发板第一个示例程序中描述了如何使用 DevEco Device Tool....
发表于 2020-10-25 09:23 364次阅读
如何使用 HiBurn 工具烧录鸿蒙的 .bin...

详细教程:在鸿蒙系统源码中添加第三方软件包

打开鸿蒙系统的源码,可以看到有这么一个文件夹:third_party。里面存放的是第三方的代码。 点....
发表于 2020-10-24 11:12 334次阅读
详细教程:在鸿蒙系统源码中添加第三方软件包

在鸿蒙系统中移植Paho-MQTT实现MQTT协...

MQTT 是当前最主流的物联网通信协议,需要物联网云平台,例如华为云、阿里云、移动 OneNET 都....
发表于 2020-10-24 11:05 518次阅读
在鸿蒙系统中移植Paho-MQTT实现MQTT协...

浅谈鸿蒙内核代码调度队列

鸿蒙内核代码中有两个源文件是关于队列的,一个是用于调度的队列,另一个是用于线程间通讯的IPC队列。
发表于 2020-10-23 11:00 223次阅读
浅谈鸿蒙内核代码调度队列

华为Mate40正式发布:旗舰高水准,搭载麒麟9...

发表于 2020-10-23 10:17 374次阅读
华为Mate40正式发布:旗舰高水准,搭载麒麟9...

Mate40抢先曝光:60w快充+双模5G+鸿蒙...

发表于 2020-10-21 15:05 666次阅读
Mate40抢先曝光:60w快充+双模5G+鸿蒙...

美的首批搭载鸿蒙系统的厨电亮相“科技月”,创新产...

发表于 2020-10-20 11:41 510次阅读
美的首批搭载鸿蒙系统的厨电亮相“科技月”,创新产...

华为为什么要做鸿蒙操作系统?

首先声明,本文仅代表笔者本人的看法。信我就正确,不信我就未必正确。 华为的朋友给我申请了一个特邀码,....
发表于 2020-10-19 10:03 847次阅读
华为为什么要做鸿蒙操作系统?

鸿蒙系统预计明年初正式应用到手机,小米、OV是否...

发表于 2020-10-16 15:43 725次阅读
鸿蒙系统预计明年初正式应用到手机,小米、OV是否...

令人惊喜!麒麟芯片+方舟编译器,鸿蒙系统彻底解决...

发表于 2020-10-16 15:04 523次阅读
令人惊喜!麒麟芯片+方舟编译器,鸿蒙系统彻底解决...