OpenEdv-开源电子网

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

战舰板 按键输入实验

[复制链接]

9

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2012-2-16
在线时间
11 小时
发表于 2014-3-12 18:33:37 | 显示全部楼层 |阅读模式
原子哥你好
我在学习实验3 按键输入实验时碰到一个问题
KEY_Scan()函数的mode参数
KEY_Scan(0)和KEY_Scan(1)时key_up的值都是1,这样怎么区分连续按和不连续按键那?


//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//0,没有任何按键按下
//1,KEY0按下
//2,KEY1按下
//3,KEY2按下 
//4,KEY3按下 WK_UP
//注意此函数有响应优先级,KEY0>KEY1>KEY2>KEY3!!
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;// 无按键按下
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2012-2-16
在线时间
11 小时
 楼主| 发表于 2014-3-12 18:41:12 | 显示全部楼层
整个函数中特殊的地方就是static u8 key_up=1;//按键按松开标志
但是看了static的用法后还是感觉这个函数的mode参数好像没有用处






回复 支持 反对

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13083
金钱
13083
注册时间
2012-11-26
在线时间
3809 小时
发表于 2014-3-12 18:49:26 | 显示全部楼层
回复【2楼】tuzihog:
---------------------------------
仔细分析下  mode为0和1时,key_up这个flag是怎么变化的
学无止境
回复 支持 反对

使用道具 举报

9

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2012-2-16
在线时间
11 小时
 楼主| 发表于 2014-3-12 18:54:11 | 显示全部楼层
KEY_Scan(0)时,
下面这条语句置key_up=1
static u8 key_up=1;//按键按松开标志
下面这条语句跳过
if(mode)key_up=1;  //支持连按

KEY_Scan(1)时,
下面这条语句置key_up=1
static u8 key_up=1;//按键按松开标志
下面这条语句再次置key_up=1
if(mode)key_up=1;  //支持连按

后面的程序在KEY_Scan(0)和KEY_Scan(1)下就没有什么区别了啊
回复 支持 反对

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13083
金钱
13083
注册时间
2012-11-26
在线时间
3809 小时
发表于 2014-3-12 19:09:50 | 显示全部楼层
回复【4楼】tuzihog:
---------------------------------
仔细分析下逻辑吧!
学无止境
回复 支持 反对

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-3-12 19:21:32 | 显示全部楼层
支持连续按和不支持连续按的区别就是: 
不支持连续按的话,按下去,要等到松开,下一次才有效。。。
支持连续按,就是按下去,松不松开,只要下一次检测来了,都有效。


所以你一直按着:支持连续按就会检测为几次按下,,,不支持连续按就是只有一次
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-3-12 19:22:29 | 显示全部楼层
回复【4楼】tuzihog:
---------------------------------
static的用法一定要学好。。。
static是在静态存储区。。。
1.初始化只初始化一次。。。
2.函数执行结束他的值是多少,下次函数开始执行,他的值就是多少,,,不会释放。。。。而且初始化语句不会再执行。。。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

9

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2012-2-16
在线时间
11 小时
 楼主| 发表于 2014-3-12 19:42:05 | 显示全部楼层
好的,我再仔细思考一下,谢谢各位大侠的回复~~~~
能有这样请教的机会是战舰开发板的额外价值,再次表示感谢这样一个论坛~~~~
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-13 08:39:11 | 显示全部楼层
static这个家伙真的很好用的,学会了就爽了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-13 20:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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