OpenEdv-开源电子网

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

思路堵了,按键都不清楚啦,求帮忙

[复制链接]

32

主题

195

帖子

2

精华

高级会员

Rank: 4

积分
646
金钱
646
注册时间
2013-7-23
在线时间
1 小时
发表于 2013-7-31 17:58:54 | 显示全部楼层 |阅读模式
今天刚开始看Zigbee,到按键的时候写了个程序,不是很好,我就参照正点原子的按键来写,才发现想不明白了,看图

这个模式不支持连续按时什么意思啊,?响应优先级又是怎么体现的啊?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

93

主题

746

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1852
金钱
1852
注册时间
2012-9-16
在线时间
287 小时
发表于 2013-7-31 20:19:37 | 显示全部楼层
回复【楼主位】pizhihui1993:
----------------------------
不支持连按意思说你按一下,按键弹起,之后按第二次才能起作用,否则,算按一次,代码仔细分析一下,很有趣!优先级,我想程序是按顺序执行,先执行优先级自然高了!
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复 支持 反对

使用道具 举报

32

主题

195

帖子

2

精华

高级会员

Rank: 4

积分
646
金钱
646
注册时间
2013-7-23
在线时间
1 小时
 楼主| 发表于 2013-7-31 21:15:51 | 显示全部楼层
回复【2楼】象牙塔:
---------------------------------
那支持连续按时什么意思啊,不支持连续按,这个好懂,但是支持连续按的还是没想明白,望还指教指教啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-31 21:17:45 | 显示全部楼层
回复【3楼】pizhihui1993:
---------------------------------
就是按下不松开,每次KEY_Scan都可以得到这个按键的键值.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-31 21:17:59 | 显示全部楼层
相当于一次按下,多次触发,即所谓的连续按.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2013-7-16
在线时间
0 小时
发表于 2013-7-31 21:50:07 | 显示全部楼层
如果 MODE==0  那么一次按下去之后  程序执行到底  循环回来  那么再往下执行的时候 KEY_UP 就等于0 了   那么就不会进入if(key_up&&(key0==0||key1==0))这个判断程序里  程序直接到 return 0  这里   就是表明这次按键只触发可一次 ,这个语句感觉原子写得很妙啊  我也是抠了好久才明白这么回事
STM32 学习中
回复 支持 反对

使用道具 举报

32

主题

195

帖子

2

精华

高级会员

Rank: 4

积分
646
金钱
646
注册时间
2013-7-23
在线时间
1 小时
 楼主| 发表于 2013-7-31 23:12:44 | 显示全部楼层
哈哈 谢谢原子大哥和LZ,真是豁然开朗啊,敢为原子大哥,这些妙的语句都是怎么写出来的啊,怎么积累编程经验啊?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-31 23:43:19 | 显示全部楼层
这个没什么妙的了,就是比较传统的作法。呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-7-22
在线时间
0 小时
发表于 2013-8-1 09:35:55 | 显示全部楼层
回复【6楼】xc1989:
---------------------------------
这个key_up定义了静态局部变量,每次循环的时候不都是1吗。假设mode=1,key_up=1;mode=0,由于前面定义了static,则key_up=1。那if(mode)key_up=1,不就多余了
将来的你,一定会感谢现在拼命努力的自己!
回复 支持 反对

使用道具 举报

70

主题

6769

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13157
金钱
13157
注册时间
2012-11-26
在线时间
3817 小时
发表于 2013-8-1 09:39:04 | 显示全部楼层
回复【9楼】摩托贵族:

回复【6楼】xc1989:
---------------------------------
这个key_up定义了静态局部变量,每次循环的时候不都是1吗。假设mode=1,key_up=1;mode=0,由于前面定义了static,则key_up=1。那if(mode)key_up=1,不就多余了

---------------------------------
static只初始化一次
学无止境
回复 支持 反对

使用道具 举报

4

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-7-22
在线时间
0 小时
发表于 2013-8-1 10:33:31 | 显示全部楼层
回复【10楼】jermy_z:
---------------------------------
对的
对静态局部变量的说明: 
(1) 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放。 
(2) 为静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的 值。而为自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。 

(3) 如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)。而对自动变量来说,如果不赋初 值,则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。 
(4) 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的,也就是说,在其他函数中它是“不可见”的。
将来的你,一定会感谢现在拼命努力的自己!
回复 支持 反对

使用道具 举报

4

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-7-22
在线时间
0 小时
发表于 2013-8-1 10:53:39 | 显示全部楼层
mode=0时 不支持连续按
第一次循环,静态局部变量,key_up=1,等待按键按下执行if(key_up&&(key0==0||key1==0)),然后key_up=0,函数返回值返回1或者2;第二次循环的时候,无法执行if(mode)key_up=1;则key_up=0(上次函数调用结束的值),当按键全部松开的时候,执行else if,得key_up=1,函数返回值0,无按键按下。就实现了不支持连续按。
mode=1时 支持连续按
第一次循环,静态局部变量,key_up=1,等待按键按下执行if(key_up&&(key0==0||key1==0)),然后key_up=0,函数返回值返回1或者2;第二次循环的时候,执行if(mode)key_up=1;key_up重新赋值为1,等待按键按下执行if(key_up&&(key0==0||key1==0)),然后key_up=0,函数返回值返回1或者2;如此循环,实现支持连续按
将来的你,一定会感谢现在拼命努力的自己!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-15 22:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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