- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
key_board介绍
key_board用于单片机中的小巧多功能按键支持,软件采用了分层的思想,并且做到了与平台无关,用户只需要提供按键的基本信息和读写io电平的函数即可,非常方便移植,同时支持多个矩阵键盘及多个单io控制键盘。
目前已实现按下触发、弹起触发、长按自动触发、长按弹起触发、多击触发、连续触发等功能,并且能够随意组合(支持状态的同一时间轴和非同一时间轴),后续还会添加更多的功能。
使用说明
初始化相关的硬件资源。
提供一个1ms的定时器,用于周期性的调用'key_check'函数。
提供按键的描述及读写io的函数。
将键盘注册到系统。
具体的操作参考提供的stm32例程。
因为程序默认使用了堆内存,当发现程序运行结果不正常时,尝试增大你的程序堆空间,或者注册调试接口查看原因。
更详细的使用教程见详细使用说明或者提供的stm32例程。
已支持的键盘
矩阵键盘
矩阵键盘
单io按键
单io按键
详细使用说明
将key_board.c,key_board.h,key_board_config.h放进key_board文件夹中并包含进你的工程,添加头文件路径。
基础功能移植(以stm32矩阵键盘为例)
首先需要一个可使用的定时器(如果不想使用定时器也可直接放到主循环中,但不推荐,会导致时基不准确),固定为1ms触发一次;
准备待检测的按键的基本信息,可参考key_board_sample.c文件中的structkey_pin_t结构体,如:
struct?key_pin_t?{
????GPIO_TypeDef?*port;?????//按键端口号
????uint16_t?pin;???????????//按键的引脚号
????GPIO_PinState?valid;????//按键的有效电平(即按键按下时的电平)
????GPIO_PinState?invalid;??//按键的无效电平(即按键空闲时的电平)
????/*
????可添加你的其它参数
????*/
};
定义待检测的按键信息,可参考key_board_sample.c文件中的conststructkey_pin_tkey_pin_sig[]结构体数组,对应头文件为key_board_sample.h,如:
//全局变量
const?struct?key_pin_t?key_pin_sig[]?=?{
????{
????????.port?=?KEY_PORT_J12,
????????.pin?=?KEY_PIN_J12,
????????.valid?=?KEY_PRESS_LEVEL_J12,
????????.invalid?=?KEY_RELEASE_LEVEL_J12
????},
????{
????????.port?=?KEY_PORT_J34,
????????.pin?=?KEY_PIN_J34,
????????.valid?=?KEY_PRESS_LEVEL_J34,
????????.invalid?=?KEY_RELEASE_LEVEL_J34
????},
????{
????????.port?=?KEY_PORT_J56,
????????.pin?=?KEY_PIN_J56,
????????.valid?=?KEY_PRESS_LEVEL_J56,
????????.invalid?=?KEY_RELEASE_LEVEL_J56
????},
};
如果为矩阵键盘还需要定义控制io的相关信息,可参考key_board_sample.c文件中的conststructkey_pin_tkey_pin_ctrl[]结构体数组,对应头文件为key_board_sample.h,如:
const?struct?key_pin_t?key_pin_ctrl[]?=?{
????{
????????.port?=?KEY_PORT_J135,
????????.pin?=?KEY_PIN_J135,
????????.valid?=?KEY_CTL_LINE_ENABLE,
????????.invalid?=?KEY_CTL_LINE_DISABLE
????},
????{
????????.port?=?KEY_PORT_J246,
????????.pin?=?KEY_PIN_J246,
????????.valid?=?KEY_CTL_LINE_ENABLE,
????????.invalid?=?KEY_CTL_LINE_DISABLE
????},
};
实现按键io的电平读取函数,可参考key_board_sample.c文件中的pin_level_get函数,如:
static?inline?
文档评论(0)