一个应用于单片机的按键处理模块!.docx

一个应用于单片机的按键处理模块!.docx

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

丹青 + 关注
实名认证
内容提供者

锄禾日当午 汗滴禾下土

1亿VIP精品文档

相关文档