这个设计思想能启蒙你很多年,嵌入式裸机按键扫描

这个设计思想能启蒙你很多年,嵌入式裸机按键扫描

ea1620a8238b7f2e2869a0ffdb1bc0f5.png

摘要:本文目的是讲述一个按键扫描处理的面向对象开发的设计思想,适用于裸机开发,通过按键扫描,检测到按键是否按下,松开等状态,并将该状态通过其他形式反馈给其他模块进行处理。初次使用按键时,最常用的办法就是如以下代码一样,硬延时抖动滤波,等待确认后做相应的处理。

void KEY_Scan(void)
{    
if(KEY0 == 0)
    {
        delay_ms(10);//去抖动

if(KEY0 == 0)
        {
//处理想做的事情
        }
    } 
}

以上方式最大的弊端就是硬延时去抖动,极大的浪费了 CPU资源,对熟悉阻塞式和非阻塞式程序开发的人来说,这种写法是十分不可取的;程序框架稍微好的,会摒弃此种做法,采用分时调度(时间片论法)的形式按时(比如10ms)调用该函数,通过一定累计次数确定按键是否有动作,并处理相关数据。

///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比赛///

正文开始:

一、设计需求

软件功能需求

支持六种状态:没有按下、首次按下、短按持续按下、短按松开、长按持续按下和长按松开,其中后两种能够使能或禁。

支持独立设置每个按键的模式和时长:短按模式和长按模式(区分短按和长按两种状态),且时长也可独立设置。

支持大局部形式的按键输写,只有满足按键操作为 0和 1两种逻辑状态,如以下几种均支持,且兼容各种形式按键组合:

1、矩形按键:通过多组&nbsp;I/O识别到对应&nbsp;key按下;</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值