欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:31705974       资源大小:89.18KB        全文页数:3页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

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

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

    标签: 按键OOPC面向对象的 C语言( OOPC )之按键概述在嵌入式系控制系统中,通常使用按键(Key )来实现人机交互,完成一些控制功能。一般地,按键在按下(KeyDown)和抬起( KeyUp )的过程中会存在10 20ms的抖动毛刺,为了获取稳定的按键信息,必须通过一定的方法来避开这段不稳定的抖动期。本文介绍了一种软件去抖动的方法,并采用面向对象的程序设计,将按键进行封装起来,对外提供统一的接口,生成单独的按键驱动文件,便于程序的移植(程序在STM32F103(ST)和 M16C/62P (RENESAS)系统上调试通过)。1按键软件去抖方法1.1按键在按下( KeyDown)和抬起( KeyUp )的过程中会存在10 20ms的抖动毛刺,软件采用“2 回一致”原则,主循环中每25ms对按键输入口进行采样,如果连续 2 次采样一致,则确认按键的输入信息。1.2Key 输入确认后, 可以在确认值的“上升沿” (上图中水绿色的1 处)触发 KeyUp抬起事件,在“下降沿”(上图中粉色的0 处)触发KeyDown事件。同样,也可以通过计数器来触发长按键KeyPress事件。2OOPC (面向对象的C 语言)对于嵌入式系统的开发,OOPC是一个非常不错的选择,既有 C 语言的小巧、 高效性,又有 C+的封装、 继承。 笔者学习了高焕堂先生编写的 UML+ OOPC嵌入式 C 语言开发精讲,获益匪浅。本按键驱动文件就是使用了书中OOPC的思想完成。我的理解还不够深刻,在这里只是抛砖引玉,大家互相交流。在 MCU 硬件资源越发强悍的今天,感觉嵌入式系统的开发者也过上了“有钱人” 的生活,不需要再节衣缩食,过多的考虑ROM/RAM的占用以及代码的运行速度,而可以更加注重软件的可重用性、可维护性等。按键程序分3 个文件:KeyDrv.h 、 KeyDrv.c、 KeyApp.c。 其中 KeyDrv.h 、 KeyDrv.c属于驱动文件,KeyApp属于应用文件。对于用户而言,只需要在KeyApp文件中的KeyUp/Down/Press事件中编写自己的应用程序即可,代码非常清爽。3Key的功能(1) 实现按键的三种事件( 抬起 KeyUp 、按下 KeyDown、长按 KeyPress)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - (2) KeyPress事件的变速度触发(例如: 开始 2s 触发 1 次,再 1s 触发 1 次,最后 40ms触发 1 次。时间可设)(3) 可选择按键长按再弹起时是否触发KeyUp事件 (默认不触发 )(4) 可选择按键长按是否多次触发KeyPress事件 ( 默认不触发 )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文件中,可以在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;* 按键指针初始化-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);* 使能(失能)长按是否多次触发KeyPress事件 (ENABLE :触发; DISABLE:不触发 )-Key1-IA.set_ KeyPressContinuedCmd(Key1, ENABLE);Key2-IA.set_ KeyPressContinuedCmd(Key2, ENABLE);名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - * (2)在 main主循环中调用扫描函数(25ms扫描 1 次),程序自动检测按键状态并触发相关事件#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 页 - - - - - - - - -

    注意事项

    本文(2022年面向对象的C语言之按键 .pdf)为本站会员(Q****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开