【平头哥RVB2601开发板试用体验】五、按键中断测试
[复制链接]
本帖最后由 gs001588 于 2022-6-30 02:36 编辑
五、按键中断测试
RVB2601开发板上有KEY1、KEY2两个按键可供用户使用,使用IO按键消抖是必不可少的。见有些朋友反馈板上中断检测按键时容易误触发,那么不妨咱也消个抖,使用操作系统延时“aos_msleep()”不占用太多时间。
一、参考说明
本贴工程参考样例工程“ch2601_helloworld”,在此基础上添加按键中断和消抖算法来实现。
二、硬件原理
从RVB2601原理图可知,按键KEY1、KEY2都接有上拉电阻,按键按下时与GND导通,使GPIO检测输入为低电平“0”;按键释放后,GPIO检测输入为高电平“1”。
三、程序实现代码及说明。
程序比较简单。首先添加两个头文件“gpio_pin.h”、“gpio.h”;接着声明按键初始化函数“key_init()”;定义IO按键“key1”,“key2”;定义按键事件全局变量。
按键初始化。首先初始化key1到PA11;注册中断回调函数,绑定按键中断服务;设置为输入上拉模式;设置下降沿中断;使能开启按键中断。同理设置key2。
中断服务函数。首先定义并初始化按下、抬起状态计数变量为0;for循环周期为10ms,检测按键IO的状态,并对状态计数;10次循环结束判断按下状态多,还是抬起状态多,如果按下状态多,那么置按键事件变量为1。虽然是在中断服务函数中做的消抖,但是因为使用了“aos_msleep()”做延时,应该不会占用系统太多时间片。这里有一点没有去详细研究,就是在消抖过程中,如果两次有中断到来,是否还会重复进入中断服务函数,还是会忽略?不过此程序,即便会再次进入,那么也不影响,会按最后一次进入重新开始对按下、抬起状态进行计数,不会影响程序执行效果。
在main()主函数中添加调用按键初始化函数。在主循环中每间隔50ms检测一次是否有按键事件,如有按键事件则打印输出;没有则忽略。
至此,按键中断测试程序代码已实现。
四、运行程序,观察串口打印结果。
下载,并全速运行程序后,可看到串口打印信息如下。
五、附上工程源码。
main.c
(2.11 KB, 下载次数: 1)
|