OpenEdv-开源电子网

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

按键是否支持连续按下

[复制链接]

19

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2013-12-2
在线时间
0 小时
发表于 2014-7-28 17:12:29 | 显示全部楼层 |阅读模式
5金钱
//mode 0;不支持连续按下
//     1;支持连续按下
u8 KEY_Scan(u8 mode)
{  
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1;  //支持连按  
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))
{
delay_ms(10);//去抖动 
key_up=0;
if(KEY0==0)return KEY_RIGHT;
else if(KEY1==0)return KEY_DOWN;
else if(KEY2==0)return KEY_LEFT;
else if(KEY3==1)return KEY_UP;
}else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;    
  return 0;// 无按键按下
}
  题::当mode=0时候,不支持连续按下,那程序第一次执行时候在if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))中的key_up是由static中的key_up=1;确定的,可是当程序运行后,怎么判断按键是否松开?麻烦大虾说下运行的具体过程被

最佳答案

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

关键是这一句if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;     即所有按键松开才会执行key_up=1;    你有疑问的是这个地方吧?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2014-7-22
在线时间
0 小时
发表于 2014-7-28 17:12:30 | 显示全部楼层
关键是这一句if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;    
即所有按键松开才会执行key_up=1;    你有疑问的是这个地方吧?
回复

使用道具 举报

16

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2014-7-22
在线时间
0 小时
发表于 2014-7-28 17:25:15 | 显示全部楼层
static u8 key_up是静态变量,即无论u8 KEY_Scan(u8 mode)在程序中扫描多少次,其实static u8 key_up=1;在程序中从头到尾只执行过一次而已,第二次执行KEY_Scan(u8 mode)等以后都不会再执行static u8 key_up=1;你要问的是这个吗?
回复

使用道具 举报

19

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2013-12-2
在线时间
0 小时
 楼主| 发表于 2014-7-28 18:25:11 | 显示全部楼层
回复【2楼】潘浩锐:
---------------------------------
亲 不是这个,这个我懂,。
我的问题是,mode=0时,程序第二次扫描以后,怎么根据这个程序判断按键松开?
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-7-28 18:52:22 | 显示全部楼层
回复【3楼】红尘灬醉逍遥:
---------------------------------
返回0,按键就松开了
站在巨人的肩膀上不断的前进。。。
回复

使用道具 举报

19

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2013-12-2
在线时间
0 小时
 楼主| 发表于 2014-7-29 07:51:09 | 显示全部楼层
回复【5楼】潘浩锐:
---------------------------------
我这个冒泡眼睛,懂了。亲 你看看我这个解读程序是否正确
u8 KEY_Scan(0)             //不支持连续按下
{  
static u8 key_up=1;    //  第一次运行时,另key_up==1;
if(mode)key_up=1;   // 跳过这个指令。即不执行  
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))  /***      没有按键按下时候    是这个状态                 
                                                                                             KEY0==1,KEY1==1,KEY2==1,KEY3==0.                                                                                        /                                                                                      //假设KEY0按下,则执行下面的程序                    
{
delay_ms(10);//去抖动 
key_up=0;
if(KEY0==0)return KEY_RIGHT;                //  返回KEY_RIGHT
else if(KEY1==0)return KEY_DOWN;
else if(KEY2==0)return KEY_LEFT;
else if(KEY3==1)return KEY_UP;
}else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;    //当KEY0不松开的时候key_up==0,无 、                                                                                                  //  法执行,即停在if()里,当KEY0松开
。                                                                                                 //执行else if中key_up=1,程序继续扫描
  return 0;// 无按键按下
}

u8 KEY_Scan(1)
{  
static u8 key_up=1;//
if(mode)key_up=1;                           //无论程序扫描到哪里,这个程序中key_up==1,是永久的   
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))
{
delay_ms(10);//去抖动 
key_up=0;
if(KEY0==0)return KEY_RIGHT;
else if(KEY1==0)return KEY_DOWN;
else if(KEY2==0)return KEY_LEFT;
else if(KEY3==1)return KEY_UP;
}else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;    //这条指令就没有意义 
  return 0;// 无按键按下
}
多否??
回复

使用道具 举报

19

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2013-12-2
在线时间
0 小时
 楼主| 发表于 2014-7-29 07:51:25 | 显示全部楼层
回复【4楼】xiaoyan:
---------------------------------
谢谢亲╭(╯3╰)╮
回复

使用道具 举报

16

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2014-7-22
在线时间
0 小时
发表于 2014-7-29 10:44:23 | 显示全部楼层
其实我上次也是看错了。。。。
回复

使用道具 举报

19

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2013-12-2
在线时间
0 小时
 楼主| 发表于 2014-7-29 13:53:45 | 显示全部楼层
回复【8楼】潘浩锐:
---------------------------------
马有失蹄,嘿嘿 
不管咋样 O(∩_∩)O谢谢你
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-4 16:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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