3. 按键系统key
3.1. 按键类型介绍
3.1.1. IO按键
IO按键的基本配置在“key_drv_io.h”文件中。IO按键需要配置选择的IO口和IO是否需要内部上下拉。
小技巧
SDK中配置了3个IO按键,其配置如下:
IO按键配置
3.1.2. AD按键
AD按键的基本配置在“key_drv_ad.h”中。AD按键需要配置选择的ADC通道和外上拉电阻的阻值,如果外上拉电阻选择阻值为0,即使选择内上拉电阻。
小技巧
SDK中配置了1个AD按键,其配置如下:
AD按键配置
AD按键的键值基本配置在“key_drv_ad.c”中。可根据按键连接电阻阻值配置键值。
AD按键键值配置
3.1.3. IR按键
IR按键的基本配置在“key_ir.h”中。IR按键需要配置IR引脚和TIMER源。
小技巧
SDK中配置了1个IR按键,其配置如下:
IR按键配置
3.1.4. MATRIX按键
MATRIX 按键的基本配置在“ke_matrix.h”中。MATRIX 按键需要配置X轴的ADC 通道和Y轴的IO口,并且需要配置ADC通道检测到有按键的门阀值。MATRIX 按键配置
3.1.5. touch按键:
3.1.5.1. 触摸按键识别的原理:
触摸按键引脚,其网络对地存在寄生电容。当人手接触网络时,寄生电容会变大。常态下,引脚为输出,并输出高,保证寄生电容满电。当引脚突然设为输入,关上拉,开下拉,则寄生电容的电会从下拉电阻放电,当程序读引脚电平为0时,则表示放电结束。寄生电容越大则放电时间就越久(如人手触摸该引脚,相当于寄生电容增大)。此时我们可以通过一个计数模块,来计算放电时间,通过时间的变化量来判断是否有人手触摸。
3.1.5.2. SDK参数配置:
触摸按键共关心三个参数: 引脚,标定周期,变化阈值。通过key_touch.h修改。
key_touch.h
TOUCH_KEY_SEL //触摸用到的引脚自行定义
触摸按键IO配置
小技巧
- TOUCH_VAL_CALIBRATE_CYCLE
- //标定常态值的时间,单位为key_scand的时间,默认配置是1s左右。//这是SDK参考的标定常态值的算法用到,如果用户有自己的一套算法,该参数可以不用理会。
- TOUCH_DELDA
- //手按下时变化量的阈值,大于阈值说明被按下。//这个阈值是要调试出来的,先给的很大的值,保证不触发按键。下文会告诉怎么调试这个值。当然,这是SDK参考的处理变化量的的算法用到,如果用户有自己的一套算法,该参数可以不用理会。
触摸按键调试
key.h文件使能触摸按键:
key_touch.c文件打开按键扫描的打印:
下载程序,可以看到,按键的常态下的计数值,参考如下:
当按键被手触摸时,计数值会变大,参考如下:
可以看出变化量有到3000左右,那么此时,我们可以将变化量的阈值设为1000左右就行,回到key_touch.h文件修改阈值:
3.1.5.3. 触摸按键的数据处理
SDK提供的是参考的示例,其中包括简单的滤波,滤波后的值的处理,常态值的标定,这些用户都可以自己修改,或者完全重写重新自定义。主要涉及pl_cnt.c 、 pl_cnt.h 、 key_touch.c 、 key_touch.h文件
3.2. 按键接口介绍:
3.2.1. 函数void key_init(void)
此函数根据key的使能类型来初始化不同的key。
3.2.2. 函数void key_table_sel(void *msg_filter)
此函数用来注册一个msg_filter函数,来获取key事件对应的msg。 | 1、msg_filter:key事件转换成消息的函数接口。
3.2.3. 函数void key_scan(void)
此函数在tick_timer中断中调用,用来扫描处理key事件。