OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2004|回复: 4

关于一个c程序的问题

[复制链接]

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2018-7-8
在线时间
7 小时
发表于 2018-7-9 21:38:18 | 显示全部楼层 |阅读模式
1金钱
屏幕截图(1).png 视频中那个key_up=0为什么要放在延时后面,而不是放在第二次判断是否确实按下的if语句中?放那里如果出现第一个if成立,第二个if不成立。这样不就把key_up=0了?而它实际却是没按下过的。第二次进行判断时不就会出错?

最佳答案

查看完整内容[请看2#楼]

程序逻辑是:共有三种情况 一:key_up=1 且 正有键被按下; 处理方法:延时消抖,令key_up=0;延时后键确实按下,返回键值。延时后已无键按下,说明是抖动,走最后一句,返回无键。 二:没有键被按下;说明键已释放,令key_up=1,也走最后一句,返回无键 三:key_up=0 且 正有键被按下;说明是老键还没有松开, 走最后一句,返回无键 所有本代码的实际效果是:当且仅当在前续按键已松开的情况下又有按键被按下,并且延时后 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4520
金钱
4520
注册时间
2018-5-11
在线时间
946 小时
发表于 2018-7-9 21:38:19 | 显示全部楼层
程序逻辑是:共有三种情况
一:key_up=1 且 正有键被按下;   处理方法:延时消抖,令key_up=0;延时后键确实按下,返回键值。延时后已无键按下,说明是抖动,走最后一句,返回无键。
二:没有键被按下;说明键已释放,令key_up=1,也走最后一句,返回无键
三:key_up=0 且 正有键被按下;说明是老键还没有松开, 走最后一句,返回无键

所有本代码的实际效果是:当且仅当在前续按键已松开的情况下又有按键被按下,并且延时后仍有效时才返回键值。 其它情况均返回无键,但会影响标志位。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2018-7-9 21:55:44 | 显示全部楼层
第二个if是一个二选一的分支结构,后面还有一个else if
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2018-7-8
在线时间
7 小时
 楼主| 发表于 2018-7-10 09:01:03 | 显示全部楼层
warship 发表于 2018-7-9 21:38
程序逻辑是:共有三种情况
一:key_up=1 且 正有键被按下;   处理方法:延时消抖,令key_up=0;延时后键 ...

我的意思是就是第一种情况下,如果延时后没有确实按下。这时候key_up已经被置为0了(key_up=0的赋值语句放在了第二个if前面),但是它没按下。
回复

使用道具 举报

8

主题

169

帖子

0

精华

高级会员

Rank: 4

积分
564
金钱
564
注册时间
2015-7-4
在线时间
105 小时
发表于 2018-7-10 09:05:40 | 显示全部楼层
硬件上key_up是高电平有效,其他低电平有效
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-15 15:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表