2022年面向对象的C语言之按键 .pdf

上传人:Q****o 文档编号:31705974 上传时间:2022-08-08 格式:PDF 页数:3 大小:89.18KB
返回 下载 相关 举报
2022年面向对象的C语言之按键 .pdf_第1页
第1页 / 共3页
2022年面向对象的C语言之按键 .pdf_第2页
第2页 / 共3页
点击查看更多>>
资源描述

《2022年面向对象的C语言之按键 .pdf》由会员分享,可在线阅读,更多相关《2022年面向对象的C语言之按键 .pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、标签: 按键OOPC面向对象的 C语言( OOPC )之按键概述在嵌入式系控制系统中,通常使用按键(Key )来实现人机交互,完成一些控制功能。一般地,按键在按下(KeyDown)和抬起( KeyUp )的过程中会存在10 20ms的抖动毛刺,为了获取稳定的按键信息,必须通过一定的方法来避开这段不稳定的抖动期。本文介绍了一种软件去抖动的方法,并采用面向对象的程序设计,将按键进行封装起来,对外提供统一的接口,生成单独的按键驱动文件,便于程序的移植(程序在STM32F103(ST)和 M16C/62P (RENESAS)系统上调试通过)。1按键软件去抖方法1.1按键在按下( KeyDown)和抬起

2、( KeyUp )的过程中会存在10 20ms的抖动毛刺,软件采用“2 回一致”原则,主循环中每25ms对按键输入口进行采样,如果连续 2 次采样一致,则确认按键的输入信息。1.2Key 输入确认后, 可以在确认值的“上升沿” (上图中水绿色的1 处)触发 KeyUp抬起事件,在“下降沿”(上图中粉色的0 处)触发KeyDown事件。同样,也可以通过计数器来触发长按键KeyPress事件。2OOPC (面向对象的C 语言)对于嵌入式系统的开发,OOPC是一个非常不错的选择,既有 C 语言的小巧、 高效性,又有 C+的封装、 继承。 笔者学习了高焕堂先生编写的 UML+ OOPC嵌入式 C 语言

3、开发精讲,获益匪浅。本按键驱动文件就是使用了书中OOPC的思想完成。我的理解还不够深刻,在这里只是抛砖引玉,大家互相交流。在 MCU 硬件资源越发强悍的今天,感觉嵌入式系统的开发者也过上了“有钱人” 的生活,不需要再节衣缩食,过多的考虑ROM/RAM的占用以及代码的运行速度,而可以更加注重软件的可重用性、可维护性等。按键程序分3 个文件:KeyDrv.h 、 KeyDrv.c、 KeyApp.c。 其中 KeyDrv.h 、 KeyDrv.c属于驱动文件,KeyApp属于应用文件。对于用户而言,只需要在KeyApp文件中的KeyUp/Down/Press事件中编写自己的应用程序即可,代码非常清

4、爽。3Key的功能(1) 实现按键的三种事件( 抬起 KeyUp 、按下 KeyDown、长按 KeyPress)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - (2) KeyPress事件的变速度触发(例如: 开始 2s 触发 1 次,再 1s 触发 1 次,最后 40ms触发 1 次。时间可设)(3) 可选择按键长按再弹起时是否触发KeyUp事件 (默认不触发 )(4) 可选择按键长按是否多次触发KeyPress事件 ( 默

5、认不触发 )4接口函数:3 个设定, 1 个按键扫描,3 个服务,4.13 个设定(可以在进入主循环前进行设定-reset)set _ KeyPin() /设置按键的位置,在MCU 哪个引脚上set _ KeyPressUpCmd () / 使能(失能)按键长按再弹起时是否触发KeyUp事件set _ KeyPressContinuedCmd () / 使能(失能) 按键长按是否多次触发KeyPress事件4.2按键扫描(主循环中每隔2025ms调用,推荐25ms调用 1 次)KeyScan() / 按键扫描,确认按键状态,并自动触发下面3 跟服务类的事件4.33 个服务(在KeyApp文件中

6、,可以在3 个服务函数中写应用程序)KeyUp () / 抬起事件KeyDown () / 按下事件KeyPress () /长按事件对于用户而言,只需要在KeyApp文件中的KeyUp/Down/Press事件中编写自己的应用程序即可,代码非常清爽,同时便于移植。5用法详细示例* (1) 在 reset函数中(a) 包含 key 的头文件(b) 定义按键指针变量并初始化( 例定义 4 个 Key)(c) 设置按键与MCU 引脚对应,并设置相关属性* #include KeyDrv.h * 定义按键指针变量( 最多可以创建256个 Key)-TKey *Key1,*Key2;* 按键指针初始化

7、-Key1 = (TKey *)NewKey();Key2 = (TKey *)NewKey();* 按键 pin 对应 -Key1-IA.set_ KeyPin(Key1,(u32 *)GPIOA,GPIO_ Pin _ 0);Key2-IA.set_ KeyPin(Key2,(u32 *)GPIOC,GPIO_ Pin _13);* 使能(失能)长按键后的UP 事件 (ENABLE :触发; DISABLE:不触发 )-Key1-IA.set_ KeyPressUpCmd(Key1, DISABLE);Key2-IA.set_ KeyPressUpCmd(Key2, DISABLE);*

8、使能(失能)长按是否多次触发KeyPress事件 (ENABLE :触发; DISABLE:不触发 )-Key1-IA.set_ KeyPressContinuedCmd(Key1, ENABLE);Key2-IA.set_ KeyPressContinuedCmd(Key2, ENABLE);名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - * (2)在 main主循环中调用扫描函数(25ms扫描 1 次),程序自动检测按键状态

9、并触发相关事件#include KeyDrv.h Key1-IA.KeyScan(Key1,1); /按键 pin 扫描Key2-IA.KeyScan(Key2,2); /按键 pin 扫描* (3)在 KeyApp文件的相关事件中编写应用程序(idx为按键的索引号,main函数扫描时指定 )#include KeyDrv.h * 按键抬起-void KeyUp(const u8 idx)* 按键按下-void KeyDown(const u8 idx)* 按键长按-void KeyPress(const u8 idx)备注程序中运用的技巧:用局部变量防止指针别名引起的重载,详见arm嵌入式系统开发:软件设计与优化第5 章 高效的 C 编程7附录: KeyApp.c、 KeyDrv.h 、 DeyDrv.c名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁