欢迎来到第壹文秘! | 帮助中心 分享价值,成长自我!
第壹文秘
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 第壹文秘 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:919813       资源大小:71.07KB        全文页数:13页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    keyjoard介绍key_board用于单片机中的小巧多功能按键支持,软件采用了分层的思想,并且做到了与平台无关,用户只需要提供按键的基本信息和读写i。电平的函数即可,非常方便移植,同时支持多个矩阵键盘及多个单io控制键盘。目前已实现按下触发、弹起触发、长按自动触发、长按弹起触发、多击触发、连续触发等功能,并且能够随意组合(支持状态的同一时间轴和非同一时间轴),后续还会添加更多的功能。使用说明1 .初始化相关的硬件资源。2 .提供一个ImS的定时器,用于周期性的调用'key_check,函数。3 .提供按键的描述及读写io的函数。4 .将键盘注册到系统。5 .具体的操作参考提供的stm32例程。6 .因为程序默认使用了堆内存,当发现程序运行结果不正常时,尝试增大你的程序堆空间,或者注册调试接口查看原因。7 .更详细的使用教程见详细使用说明或者提供的stm32例程。已支持的键盘1.矩阵键盘1 s-a5 s 9 4,D LrrLTc矩阵键盘1.单io按键单i。按键详细使用说明将key_board.c,key_board.h,key_board_config.h放进key_board文件夹中并包含进你的工程,添加头文件路径。基础功能移植(以stm32矩阵键盘为例)首先需要一个可使用的定时器(如果不想使用定时器也可直接放到主循环中,但不推荐,会导致时基不准确),固定为ImS触发一次;准备待检测的按键的基本信息,可参考key_board_sample.c文件中的structkey_pin_t结构体,如:structkey_pin_tGPIO_TypeDef*port;按键端口号uintl6_tpin;按键的引脚号GPIO_PinStatevalid;按键的有效电平(即按健按卜时的电平)GPIO_PinStateinvalid;按健的无效电平(即按键空闲时的电平)/*可添加你的其它参数*/;定义待检测的按键信息,可参考key_board_sample.c文件中的conststructkey_pin_tkey_pin_sig结构体数组,对应头文件为key_board_sample.h,如:全局变量conststructkey_pin_tkey_pin_sig=.port=KEY_PORT_J12,.pin=KEY_PIN_J12,.valid=KEY_PRESS_LEVEL_J12,.invalid=KEYRELEASELEVELJ12,.port=KEY_P0RT_J34,.pin=KEY_PIN_J34,.valid=KEY_PRESS_LEVEL_J34,.invalid=KEY_RELEASE_LEVEL_334,.port=KEY_PORT_J56,.pin=KEY_PIN_J56,.valid=KEY_PRESS_LEVEL_J56,.invalid=KEY_RELEASE_LEVEL_356,;切果为箱隼健盘还需要定义控制io的相关信息,可参考key_bOareLSampie.c文件中的conststructkey_pin_tkey_pin_ctrl结构体数组,对应头文件为key_board_sample.h,如:conststructkey_pin_tkey_pin_ctrl=.port=KEY_P0RT_J135,.pin=KEY_PIN_J135,.valid=KEY_CTL_LINE_ENABLE,.invalid=KEY_CTL_LINE_DISABLE,.port=KEY_P0RT_J246,.pin=KEY_PIN_3246,.valid=KEY_CTL_LINE_ENABLE,.invalid=KEY_CTL_LINE_DISABLE,;实现按键io的电平读取函数,可参考key_board_sample.c文件中的pin_level_get函数,如:staticinlineboolpin_level_get(constvoid*desc)structkey_pin_t*pdesc;pdesc=(structkey_pin_t*)desc;returnHAL_GPIO_ReadPin(pdesc->port,pdesc->pin)=pdesc->valid;)如桌为矩摩健盘还需要实现按键io的电平写入函数,可参考key_board_sample.c文件中的pin_level_set函数,如:staticinlinevoidpin_level_set(constvoid*desc,boolflag)structkey_pin_t*pdesc;pdesc=(structkey_pin_t*)desc;HAL_GPIO_WritePin(pdesc->port,pdesc->pin,flag?pdesc->valid:desc->invalid);)定义按键的id及功能结构体structkey_public_sig_t,可参考key_board_sample.c文件中的conststructkey_public_sig_tkey_public_sig结构体数组,对应头文件key_board.h,如:conststructkey_public_sig_tkey_public_sig=KEY_PUBLIC_SIG_DEF(KEY_UP,&key_pin_sig0,pin_level_get,KEY_FLAG_NONE),KEY_PUBLIC_SIG_DEF(KEY_LEFT,&key_pin_sigl,pin_level_get,KEY_FLAG_NONE),KEY_PUBLIC_SIG_DEF(KEY_DOWN,&key_pin_sig2,pin_level_get,KEY_FLAG_NONE),/下面的是因为使用的矩阵键盘而扩展出来的三个按健KEY_PUBLIC_SIG_DEF(KEY_ENTER,&key_pin_sig0,pin_level_get,KEY_FLAG_NONE),KEY_PUBLIC_SIG_DEF(KEY_RIGHT,&key_pin_sigl,pin_level_get,KEY_FLAG_NONE),KEY_PUBLIC_SIG_DEF(KEY_EXIT,&key_pin_sig2,pin_level_get,KEY_FLAG_NONE),;如桌为矩摩健盘还需要定义控制io的id及功能结构体structkey_public_ctrl_t,可参考key_board_sample.c文件中的conststructkey_public_ctrl_tkey_public_ctrl结构体数组,对应头文件key_board.h,如:conststructkey_public_ctrl_tkey_public_ctrl=KEY_PUBLIC_CTRL_DEF(&key_pin_ctnl0,pin_level_set),KEY_PUBLIC_CTRL_DEF(&key_pin_ctrll,pin_level_set),;初始化键盘,可参考key_board_sample.c文件中的GPIO_Key_Board_Init函数,如:voidGPIO_Key_Board_Init(void)/硬件io的初始化GPIO_InitTypeDefGPIO_InitStruct;unsignedinti;RCC_KEY_BOARD_CLK_ENABLE();GPIO-InitStruct.Pull=GPIO-PULLUP;GPIO_InitStruct.Mode=GPIO_MODE_INPUT;for(i=0;i<ARRAY_SIZE(key_pin_sig);i+)GPIO_InitStruct.Pin=key_pin_sigi.pin;HAL_GPIO_Init(key_pin_sigi.port,&GPIO_InitStruct);GPIO-InitStruct.Speed=GPI0_SPEED_FREQ_L0W;GPIO-InitStruct.Pull=GPI0_N0PULL;GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;for(i=0;i<ARRAY_SIZE(key_pin_ctrl);i+)GPIO_InitStruct.Pin=key_pin_ctrli.pin;HAL_GPIO_Init(key_pin_ctrli.port,&GPIO_InitStruct);)/初始化键盘key_board-init();注册键盘到系统中(矩阵键盘)key_board_register(KEY_BOARD_MATRIX,key_public_sig,ARRAY_SIZE(key_public_sig),key_public_ctrl,ARRAY_SIZE(key_public_ctrl);)主流程伪代码框架,更多例子参考main_test.c文件:intmain(void)初始化硬件i。,并注册键盘GPIO_Key_Board_Init();初始化定时器,用于按健扫描(ImS)init_tmr();for(;)if(key_check_state(KEY_UP,KEY_RELEASE)PRINTF("KEY_UPKEY_RELEASErn");)if(key_check_state(KEY_UP,KEY-PRESS)PRINTF("KEY_UPKEY_PRESSrn");定时器到期回调处理函数voidtmr_irq_callback(void)调用按键扫描核心函数key_check();扩展功能长按的使用首先确保key_board_config.h文件中宏KEY_LONG_SUPPORT已处于使能状态,并且正确设置了宏KEY_DEFAULT_LONG_TRRIGER_TIME的值;设置按键功能需要对长按进行检测,如:KEY_PUBLIC_SIG_DEF(KEY_UP,&key_pin_sig0,pin_level_get,KEY_FLAG_PRESS_LONGKEY_FLAG_RELEASE_LONG)使用例程:if(key_check_state(KEY_UP,KEY_PRESS_LONG)PRINTF("KEY_UPKEY_PRESS_LONGrn");)if(key_check_state(KEY_UP,KEY_RELEASE_LONG)PRINTF("KEY_UPKEY_RELEASE_LONGrn");)扩展功能连按的使用首先确保key_board_config.h文件中宏KEY_CONTINUOUS_SUPPORT已处于使能状态,并且正确设置了宏KEY_DEFAULT_CONTINUOUS_INIT_TRRIGER_TIME和KEY_DEFAULT_CONTINUOUS_PERIOD_TRRIGER_TIME的值;设置按键功能需要对连按进行检测,如:KEY_PUBLIC_SIG_DEF(KEY_UP,&key_pin_

    注意事项

    本文(一个应用于单片机的按键处理模块!.docx)为本站会员(p**)主动上传,第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知第壹文秘(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 1wenmi网站版权所有

    经营许可证编号:宁ICP备2022001189号-1

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第壹文秘网,我们立即给予删除!

    收起
    展开