OpenEdv-开源电子网

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

不能理解这个按键扫描程序的精髓啊!主要是对它里面的标志位key_up的作用不太理解!求解释……

[复制链接]

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
发表于 2013-2-24 17:31:19 | 显示全部楼层 |阅读模式

u8 KEY_Scan(void)

 static u8 key_up=1;//按键按松开标志 
 JTAG_Set(JTAG_SWD_DISABLE);
 if(key_up&&(KEY0==0||KEY1==0||KEY2==1))
 {
  delay_ms(10);//去抖动
  key_up=0;
  if(KEY0==0)
  {
   JTAG_Set(SWD_ENABLE);
   return 1;
  }
  else if(KEY1==0)
  {
   JTAG_Set(SWD_ENABLE);
   return 2;
  }
  else if(KEY2==1)
  {
   JTAG_Set(SWD_ENABLE);
   return 3;
  }
 }else if(KEY0==1&&KEY1==1&&KEY2==0)key_up=1;     
 JTAG_Set(SWD_ENABLE);
 return 0;// 无按键按下
}

我有意取消使用标志位key_up,但结果是按键抖动的现象很明显!我真心不懂这个标志位和消抖有什么关系哦!
急急急……




乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-2-24 17:33:35 | 显示全部楼层
我取消使用标志位key_up后的程序:按键抖动的现象很明显!为什么啊?
u8 KEY_Scan(void)
{  
static u8 key_up=1;//按键按松开标志
JTAG_Set(JTAG_SWD_DISABLE);
// if(key_up&&(KEY0==0||KEY1==0||KEY2==1))
    if(KEY0==0||KEY1==0||KEY2==1)
{
delay_ms(10);//去抖动 
key_up=0;
if(KEY0==0)
{
JTAG_Set(SWD_ENABLE);
return 1;
}
else if(KEY1==0)
{
JTAG_Set(SWD_ENABLE);
return 2;
}
else if(KEY2==1)
{
JTAG_Set(SWD_ENABLE);
return 3;
}
}
//else if(KEY0==1&&KEY1==1&&KEY2==0)key_up=1;      
JTAG_Set(SWD_ENABLE);
return 0;// 无按键按下
}
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-2-24 18:28:55 | 显示全部楼层
因为你取消了key_up,按键扫描程序就变成了不用等待按键松开,即可开启下一次检测。
我们加入key_up的目的,就是为了让按键按下,必须松开,才能算完成一次按键。你去掉,就等于按下就可以不停的被检测到有按键了,自然就不停的取反了,不是你说的抖动。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-2-24 19:26:38 | 显示全部楼层
哦 有道理!
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2016-7-8 20:26:46 | 显示全部楼层
本帖最后由 aiyeba 于 2016-7-8 20:30 编辑
正点原子 发表于 2013-2-24 18:28
因为你取消了key_up,按键扫描程序就变成了不用等待按键松开,即可开启下一次检测。
我们加入key_up的目的 ...

原子哥问你一个奇怪的问题哈。

我用key_up   自己写了一个判断  但是卡住了

if(key3==1)    //key是高电平有效  这个按键接的PA0  我配置成了下拉输入
{
   delay_ms(10);
   if(key3==1)
   key_velue=4;
   while(key3);

}
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 13:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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