textview 结束后释放_等待按键释放,你的代码如何写?

70656c00e0aa5e17624061de4e6545a0.png

今天,还是一个问题,在QQ群(300384358)里有小伙伴一直在问一个问题,如上图。一个按键控制电机的转动,按键按下后,电机转动,按键释放,电机停止,再加一个按键按下时长的检测,当按下超过5秒后,电机也得停止。也就说每次按下按键后电机转动的时间不得超过5秒,就算按键按下时时长超过5秒。

问题其实很简单,才开始的小伙伴就是没想法,其他小伙伴出谋划策后还是没解决问题,今天我们就来慢慢叨叨。

这个问题的难点一是在按键按下5秒的识别,小伙伴说了不要求精确的5秒,大概是5秒就可以了。难点二是按键释放的检测,好多小伙伴想不到办法,还是用检测按键按下的if语句,效果不佳,小代在这呢推荐大家用while循环的方式去实现,具体怎么实现呢?

往下看

直接上代码

2bfaf4ddb7afde29bf71cb0d9c6b714c.png

按键识别还是采用大家最能接受的二次检测加延时的方式,便于好理解。小代说的while循环检测按键释放,其实 就是第23行,循环结束标志是按键的状态(0或1)再做“非”运算。解释一下,从上面我们的二次检测加延时的方式能看出,按键按下去后,状态值是0,那我们再做一个“非”运算后就变成了1,相反,按键没按下的时候,“非”运算后是0,当while语句的条件变为0了,自然循环就结束了,这里说的按键没按下,其实也可以说是按键从按下到释放的这个过程。我们来捋一捋这段代码的运行,首先到了while(!KEY){}这个循环,就说明按键已经按下了,此时有两种情况,一种是最简单的,按下时间没到5秒钟,那按键释放后直接停止电机转动就好,第二种情况是按键按下时长大于等于5秒钟,这时需要在按下时长到5秒的时候,关闭电机。上面我们分析过了,按键按下以后,while(!KEY){}循环继续执行,只要按键释放,自动跳出此循环,这样一来,我就只需要在这个while循环里去检测时间有没有到达5秒钟,时间精确度又不要求太高,那我们完全可以采用简单的记录次数来实现时间的计算,在以上代码中,我假设while循环2000次的时间是5秒钟,wh ile循环一次,对计次变量加1,完了再去检测有没有大于等于2000了,当大于等于2000了,就说明按下时间大于等于5秒钟了,此时我们需要关闭电机。 当出现第一种情况,就是按下时长小于5秒钟时间,这时直接退出while循环,在循环后面紧跟着关闭电机,再把按下计次变量清零,准备下一次的按键记录。这样一来就实现对时间的记录,分情况控制。分析问题时我们做了2种情况的分析,写代码时,其实我们只是对按键释放做了识别,又在按键释放之前,做了计次的处理。这样的按键释放检测方式可以用在其他的地方比如我们的按键调整时钟时间,计算器等等。这样的检测方式也是有弊端的,第一,我们在做按键释放时候,只做了按键的检测,如果有其他实时性要求高的代码段,需要放到这里的while循环中去,比如数码管显示的动态扫描。第二,循环计次的变量,这里我定义成了uint型,最大范围是65535,当记录次数大于这个值的时候,代码就有问题了,当我们长时间的按着按键不释放,比如按着1分钟。要解决这个问题,需要我们此时好一个最长按键时间,比如10秒,只要大于我们要求的时间就好,当到记录次数大于这个值后将不再加1运算。好了,今天的问题就叨叨到这里,希望我们都有所收获。

·END·

单片机技术宅

以最简单的方式服务初学者

f2e39eea4bb1ba91595d264a662a5310.png

微信号:单片机技术宅
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值