电子产业一站式赋能平台

PCB联盟网

搜索
查看: 538|回复: 0
收起左侧

基于鸿蒙OS的按键驱动

[复制链接]

2607

主题

2607

帖子

7472

积分

高级会员

Rank: 5Rank: 5

积分
7472
发表于 2020-11-11 11:56:18 | 显示全部楼层 |阅读模式
基于鸿蒙OS的按键驱动, 按键作为常用的输入系统,如何准确并高效的获取按键值,是一个经常要面对的问题,今天我们看看在
鸿蒙系统中,如何得到独立按键的按键值。




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



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



1.png (759.67 KB, 下载次数: 0)

下载附件  保存到相册  

1 小时前 上传




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

2.png (17.52 KB, 下载次数: 0)

下载附件  保存到相册  

1 小时前 上传



当S2被按下之后,GPIO05与GND相连,此时GPIO05输入为低电平。
代码实现
实现方式一:读取输入IO的状态

  • #include#include

复制代码 编译代码:



  • pythonbuild.pywifiiot

复制代码

3.png (64.22 KB, 下载次数: 0)

下载附件  保存到相册  

1 小时前 上传

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



4.png (154.33 KB, 下载次数: 0)

下载附件  保存到相册  

1 小时前 上传

注意:此实例新建了一个任务用于循环读取按键的状态,KeyExampleEntry作为应用程序的入口函数,不能随意使用while(1)这种耗时的操作,必须快速返回,否则会妨碍鸿蒙OS中其他应用程序的运行,因此,在这个入口函数中创建一个按键状态监测的专属任务(线程)用于判断按键的状态。
GPIO中断 通过上面的原理图我们可知,当按键S2没有被按下的时候,GPIO05为默认状态高电平,当按键S2被按下时,GPIO05与GND相连,GPIO05被拉低,当松开按键S2的时候,GPIO05又恢复高电平。 在此过程中,当按键S2被按下时,GPIO05会收到一个由高到低的电平变化,我们称这个过程为下降沿;当按键S2被松开时,GPIO05会收到一个由低到高的电平变化,我们称这个过程为上升沿。 综上所述,在不考虑抖动影响的前提下,每次按键被按下,GPIO05将会收到一个下降沿;按键被释放,GPIO05会收到一个上升沿。 我们在GPIO05这个引脚上注册一个边沿触发函数(上升沿或者下降沿触发都可以),那么这个注册的边沿触发回调函数被调用一次,理论上就是有一次按键的动作发生。

  • #include#include

复制代码
代码说明:

  • WIFI_IOT_IO_NAME_GPIO_5是与按键S2相连的GPIO,要实现按键中断捕获,需要先使用IoSetFunc()函数进行端口功能重定义;
  • 调用GpioSetDir()函数,设置GPIO05为输入,并通过IoSetPull()函数将端口设置为上拉输入(PullUp);
  • 调用GpioRegisterIsRFunc()函数,完成GPIO05和回调函数gpio5_isr_func()的注册绑定,设置触发模式为上升沿触发:WIFI_IOT_GPIO_EDGE_RISE_LEVEL_HIGH,当按键S2被抬起的时候,产生上升沿,触发回调函数gpio5_isr_func()工作。
      


5.png (31.31 KB, 下载次数: 0)

下载附件  保存到相册  

1 小时前 上传

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

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表