求助各位坛友 如何实现一个按键精灵论坛按顺序执行三个功能

21ic官方微信-->
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
求助各位坛友
如何实现一个按键按顺序执行三个功能呢
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
具体就是下面5个按键有两个作为功能选择键,需要有三种功能。另外三个键作为个十百位按一下加1&&0-9循环加&&该如何实现呢?
我现在实现了单个按键的长按和短按的状态机扫描&&接下来不知道该怎么改了
uint32_t GetKEY(void)
& & /* 获取KEY按键的输入电平状态,按键按下时为低电平0 */
& & if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9) == 0)
& && && & return KEY1_DOWN;
& &if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0) == 0)
& && && & return KEY2_DOWN;
& & & & & & & & if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7) == 0)
& & {& && &
& && && & return KEY3_DOWN;
& & & & & & & & if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6) == 0)
& & {& && &
& && && & return KEY4_DOWN;
& & & & & & & & if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1) == 0)
& & {& && &
& && && & return KEY5_DOWN;
& & }& & & & & & & & & & & & & & & & & & & & & & & && && &&&
& & return NO_KEY;
uint32_t ReadKeyStatus(void)
& & & & static uint8_t KeyState = KEY_UP;//按键状态
& & & & static uint8_t KeyPrev = NO_KEY; //上一次按键值
& & & & uint8_t KeyPress = NO_KEY;& & & & & & & &&&//按键值
& & & & uint8_t KeyReturn = KEY_UP;& & & & & & & &&&//返回按键状态
& & & & KeyPress = GetKEY();//得到被按下的状态
& & & & switch(KeyState)
& & & & & & & & //状态0:没有按键按下
& & & & & & & & case KEY_UP:
& & & & & & & & & & & & if(KeyPress != NO_KEY)//有按键按下
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & KeyState = KEY_SURE;//转入状态1
& & & & & & & & & & & & & & & & KeyPrev = KeyP//记录按键值
& & & & & & & & & & & & }
& & & & & & & & & & & &
& & & & & & & & //状态1:按键确认状态
& & & & & & & & case KEY_SURE:
& & & & & & & & & & & & if(KeyPress == KeyPrev)//确认和上次相同
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & KeyState = KEY_DOWN;//转入状态2
& & & & & & & & & & & & }
& & & & & & & & & & & & else
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & KeyState = KEY_UP;//转入状态0
& & & & & & & & & & & & }
& & & & & & & & & & & &
& & & & & & & & //状态2:按键按下
& & & & & & & & case KEY_DOWN:
& & & & & & & & & & & & if(KeyPress != KeyPrev)//按键释放,端口高电平
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & KeyState = KEY_UP;//转入状态0
& & & & & & & & & & & & & & & & KeyReturn = KEY_DOWN | KeyP//返回单次按下 或运算得到哪个按键处于什么状态
& & & & & & & & & & & & }
& & & & & & & &
& & & & & & & & & & & & & & & & & & & &
& & & & }& & & &
& & & & return KeyR
助理工程师, 积分 1146, 距离下一级还需 854 积分
助理工程师, 积分 1146, 距离下一级还需 854 积分
助理工程师, 积分 1146, 距离下一级还需 854 积分
助理工程师, 积分 1146, 距离下一级还需 854 积分
组合键可以是这样:
KEY1 + KEY1
KEY1 + KEY2
KEY2 + KEY2
KEY2 + KEY1
可以用一个字节来表示:
组合键可以是这样:
KEY1 + KEY1& &0B
KEY1 + KEY2& &0B
KEY2 + KEY2& &0B
KEY2 + KEY1& &0B
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
组合键可以是这样:
KEY1 + KEY1
KEY1 + KEY2
这个怎么用呢?我现在想实现对一个按键,按下三次,每次实现的功能不同:按下一次,开始采集,再按一次,开始加热,再按一次,开始显示;对另一个按键按一下加1,按到9后下一次回0&&主要是这两种按键处理
这个怎么用呢?我现在想实现对一个按键,按下三次,每次实现的功能不同:按下一次,开始采集,再按一次, ...
一个按键要三种状态,必须要有提示呀,有LED没?
高级技术员, 积分 791, 距离下一级还需 209 积分
高级技术员, 积分 791, 距离下一级还需 209 积分
高级技术员, 积分 791, 距离下一级还需 209 积分
高级技术员, 积分 791, 距离下一级还需 209 积分
这个怎么用呢?我现在想实现对一个按键,按下三次,每次实现的功能不同:按下一次,开始采集,再按一次, ...
用个变量作标记不就好了,识别到第一按下记1,执行动作1,再次按下+1,执行动作2,以此类推。
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
本帖最后由 babyrabbit 于
13:35 编辑
用个变量作标记不就好了,识别到第一按下记1,执行动作1,再次按下+1,执行动作2,以此类推。 ...
void key_Scan()
{& && && && && &
& && && && && & KEY = ReadKeyStatus();& && && &&&
void key3()
& & static k=0;& && &&&
& && &&&if(k==0&&KEY==KEY2_ONE_DOWN)
& &&&n=444;
& && && &led_
& && && &}
& & if(k==1&&KEY==KEY2_ONE_DOWN)
& && &&&{& && &&&
& && && &n=111;& && && && && &
& && &&&if(k==2&&KEY==KEY2_ONE_DOWN)
& && &&&{& && &&&
& && &&&n=345;& && && &&&
& && &&&k++;
& && &&&if(k==3)k=0;& && &&&
其中n为数码管显示的值,把这两个函数放在定时器里,10ms扫一次,数码管也是用定时器做的。这样的问题是每次按完按键,n不完全是按照指定顺序执行,我猜想可能是扫的时间不匹配。请教大神该如何写 一个按键顺序执行三个功能的程序。
高级技术员, 积分 791, 距离下一级还需 209 积分
高级技术员, 积分 791, 距离下一级还需 209 积分
高级技术员, 积分 791, 距离下一级还需 209 积分
高级技术员, 积分 791, 距离下一级还需 209 积分
void key_Scan()
{& && && && && &
& && && && && & KEY = ReadKeyStatus();& && && &&&
10ms扫一次每问题,关键是每次确定有按键按下了,K才+1啊,你现在这里每10ms都+1,那肯定不对啊。
助理工程师, 积分 1146, 距离下一级还需 854 积分
助理工程师, 积分 1146, 距离下一级还需 854 积分
助理工程师, 积分 1146, 距离下一级还需 854 积分
助理工程师, 积分 1146, 距离下一级还需 854 积分
uint8_t key1_
void key1_pused()
& & key1_val = key1_val &&1;
& & key1_val &= 0b;
& & ley1_val |= 1;
// first key1_val = b1
//second& && && &&&= b11
// third& && && && && &&&b111
助理工程师, 积分 1146, 距离下一级还需 854 积分
助理工程师, 积分 1146, 距离下一级还需 854 积分
助理工程师, 积分 1146, 距离下一级还需 854 积分
助理工程师, 积分 1146, 距离下一级还需 854 积分
建议你还是去学校回回炉,这实在是有点差
助理工程师, 积分 1432, 距离下一级还需 568 积分
助理工程师, 积分 1432, 距离下一级还需 568 积分
助理工程师, 积分 1432, 距离下一级还需 568 积分
助理工程师, 积分 1432, 距离下一级还需 568 积分
这个怎么用呢?我现在想实现对一个按键,按下三次,每次实现的功能不同:按下一次,开始采集,再按一次, ...
设一个变量,每按一次按键变量加1,执行1个任务。你要执行100个都可以。何止3个?
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
10ms扫一次每问题,关键是每次确定有按键按下了,K才+1啊,你现在这里每10ms都+1,那肯定不对啊。 ...
我之前写的是没按一次加1,但是也不行,
void key3()
& & static k=0;& & & & & & & &
& & & & if(k==0&&KEY==KEY2_ONE_DOWN)
& &&&n=444;
& & & &&&k++;
& & & &&&}
& & if(k==1&&KEY==KEY2_ONE_DOWN)
& & & & {& & & &
& & & &&&n=111;& & & &
& & & &&&k++;& & & &
& & & & if(k==2&&KEY==KEY2_ONE_DOWN)
& & & & {& & & &
& & & & n=345;
& & & & k=0;& & & && &
& & & & & & & &
这样写的结果就是直接&&显示345
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
建议你还是去学校回回炉,这实在是有点差
现在就是学生一枚,每天就自己摸索,有什么好的学习方式和途径吗&&求推荐
助理工程师, 积分 1146, 距离下一级还需 854 积分
助理工程师, 积分 1146, 距离下一级还需 854 积分
助理工程师, 积分 1146, 距离下一级还需 854 积分
助理工程师, 积分 1146, 距离下一级还需 854 积分
就是多练,遇见过,解决了,就会了
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
就是多练,遇见过,解决了,就会了
既然有2个按键,1个作为功能切换键好了
按下切换功能
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
设一个变量,每按一次按键变量加1,执行1个任务。你要执行100个都可以。何止3个? ...
我的程序就是设置了变量k,可是没次直接执行到第三个功能了,状态机里 是抬起按键有效,可是在key3程序里,按一下&&直接数码管显示345了。不想想象中逻辑执行,每加一次,执行一个新功能。
资深技术员, 积分 466, 距离下一级还需 34 积分
资深技术员, 积分 466, 距离下一级还需 34 积分
资深技术员, 积分 466, 距离下一级还需 34 积分
资深技术员, 积分 466, 距离下一级还需 34 积分
单击、双击、长按(笑)
初级技术员, 积分 61, 距离下一级还需 39 积分
初级技术员, 积分 61, 距离下一级还需 39 积分
初级技术员, 积分 61, 距离下一级还需 39 积分
初级技术员, 积分 61, 距离下一级还需 39 积分
一个按键也可以弄出很多状态的 短按的时间 0.2 0.5 1&&长按 2秒 3秒 5秒 ====&&连按2次 3次===== 可以玩出很多花样
助理工程师, 积分 1432, 距离下一级还需 568 积分
助理工程师, 积分 1432, 距离下一级还需 568 积分
助理工程师, 积分 1432, 距离下一级还需 568 积分
助理工程师, 积分 1432, 距离下一级还需 568 积分
我的程序就是设置了变量k,可是没次直接执行到第三个功能了,状态机里 是抬起按键有效,可是在key3程序里 ...
可能你没有进行按键消抖所致。可以每次按键按下时读按键状态等待按键抬起再加1变量值。
高级技术员, 积分 654, 距离下一级还需 346 积分
高级技术员, 积分 654, 距离下一级还需 346 积分
高级技术员, 积分 654, 距离下一级还需 346 积分
高级技术员, 积分 654, 距离下一级还需 346 积分
建议用Systick中断去抖,可以参考我的blog文章,稍微改一下就能用了。
https://blog.csdn.net/toopoo/article/details/
扫描二维码,随时随地手机跟帖
时间类勋章
技术高手奖章
人才类勋章
技术领袖奖章
人才类勋章
时间类勋章
坚毅之洋流
发帖类勋章
荣誉元老奖章
等级类勋章
时间类勋章
您需要登录后才可以回帖阅读数:2798
回复数:17
最后更新于:
各位大神知道哪里租房便宜吗,或者便宜点旅馆可以带狗狗的,我家狗狗因为才五个月,经常乱咬东西,我爸妈最后通牒今天要处理掉,我打算以死抗争,带狗狗离家出走了m有好心的坛友帮我出出主意吗,万分感谢,我会经常看这帖子的,还有我qq,求大家帮助啊
共获得金币 0
共获得金币 0
帮帮小组核心成员
楼主你这是想与爸妈抗争到底吗
共获得金币 0
必须的啊,养了两个月了,都有感情了
共获得金币 0
你这不是长久之计了
共获得金币 0
没办法啊,离家出走几天再说,我爸妈应该会找我的
共获得金币 0
共获得金币 0
有嘴罩,人在旁边或吃东西喝水时摘掉,也是没有办法。
共获得金币 0
你还是去找旅馆吧&&租房基本都是押一付三的..没住几天就要回去了,划不来,或者朋友家借住一下,狗狗么,寄养几天,和宠物店商量一下,反正你自带狗粮,白天带着玩,晚上送去睡个觉
共获得金币 0
我妈不同意我养猫咪,我直接自己住出来了
共获得金币 0
引用:1有嘴罩,人在旁边或吃东西喝水时摘掉,也是没有办法。可以寄养先
共获得金币 0
引用:1有嘴罩,人在旁边或吃东西喝水时摘掉,也是没有办法。引用:2可以寄养先额,虽然我店里是酒店式寄养的,条件很好。可是感觉LZ经济有压力,所以也就不提了
与本帖相关的人: 展开
共获得金币 0
引用:1跪求可以寄养
共获得金币 0
引用:1我妈不同意我养猫咪,我直接自己住出来了你搬出去住了?
与本帖相关的人: 展开
共获得金币 0
引用:1有嘴罩,人在旁边或吃东西喝水时摘掉,也是没有办法。引用:2可以寄养先引用:3额,虽然我店里是酒店式寄养的,条件很好。可是感觉LZ经济有压力,所以也就不提了不管怎样还是谢谢你的热心,好人一生平安
与本帖相关的人: 展开
共获得金币 0
引用:1我妈不同意我养猫咪,我直接自己住出来了引用:2你搬出去住了?是啊,住在别的房子里去了,不和爸妈一起~
与本帖相关的人: 展开
共获得金币 0
磨牙期,磨牙棒买点,而且狗狗咬磨牙棒的话要给它奖励
共获得金币 0
多看看养狗训练的app
共获得金币 0
使用(可批量传图、插入视频等)
&&Ctrl + Enter 快速发布
热门推荐:
&19楼百事通
违法和不良信息举报电话:9
举报邮箱:日生属于什么生效啊?_百度知道
日生属于什么生效啊?
现在把我弄糊涂了!记载中也不清楚 我会
我有更好的答案
两个小时为一个时辰,23:00-01:00为子时(即是虎年的第一个时辰),而除夕晚上20点出生,还没跨进虎年,所以是属牛的,如果是23点之后出生的那么就是属虎了!
采纳率:56%
还是属虎吖~~ 在除夕那天生的,只要是12点之前都是虎,12点过了就是兔
我也是这天生的!属牛!属牛最后一天牛尾巴!很多人按立春算是不对的!只要没超过夜里12点都算属牛!9号就是属虎了!
1条折叠回答
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。查看: 235|回复: 7
注册时间最后登录在线时间566 小时阅读权限90积分16829帖子精华2UID48411
爱表资深人士, 积分 16829, 距离下一级还需 3171 积分
金币6434 社区知名度81 威望2420 积分16829帖子精华2UID48411
本人有个大块头妹妹,游泳运动员出生,170厘米的身高,快20岁生日了,想送个礼物作为纪念,预算1到2千,不要超过。女生嘛,要石英的。要求防水好一些,最好是旋入式表把。谢谢各位大神推荐推荐
总评分:&金币 + 50&
注册时间最后登录在线时间2937 小时阅读权限100积分607367帖子精华41UID1202970
菠菜。菠菜,菠菜。。。。。
金币253093 社区知名度3428 威望67567 积分607367帖子精华41UID1202970
“出生”?“出身”?
注册时间最后登录在线时间2937 小时阅读权限100积分607367帖子精华41UID1202970
菠菜。菠菜,菠菜。。。。。
金币253093 社区知名度3428 威望67567 积分607367帖子精华41UID1202970
200米防水& &石英& &SCDC055 钛
注册时间最后登录在线时间2937 小时阅读权限100积分607367帖子精华41UID1202970
菠菜。菠菜,菠菜。。。。。
金币253093 社区知名度3428 威望67567 积分607367帖子精华41UID1202970
本帖最后由 不下水的潜水表 于
05:29 编辑
女表& &电波& &SWFH029 SWFH032&&100米
05:29:24 上传
注册时间最后登录在线时间2937 小时阅读权限100积分607367帖子精华41UID1202970
菠菜。菠菜,菠菜。。。。。
金币253093 社区知名度3428 威望67567 积分607367帖子精华41UID1202970
不嫌大还有光动能潜水表。。。。。
注册时间最后登录在线时间1832 小时阅读权限100积分108831帖子精华32UID235892
金币46949 社区知名度395 威望9092 积分108831帖子精华32UID235892
卡西欧蛙人
注册时间最后登录在线时间566 小时阅读权限90积分16829帖子精华2UID48411
爱表资深人士, 积分 16829, 距离下一级还需 3171 积分
金币6434 社区知名度81 威望2420 积分16829帖子精华2UID48411
不下水的潜水表 发表于
05:17 200米防水& &石...SCDC055这表怎么样?质量好吗?
注册时间最后登录在线时间2453 小时阅读权限100积分177748帖子精华12UID528176
金币73141 社区知名度826 威望20384 积分177748帖子精华12UID528176
爱表族认证会员
您是爱表族认证会员!!!非常感谢您发表的原创文章为其他消费者提供的帮助,同时您将享受到爱表族认证会员的服务。希望您继续努力,并影响身边的人一起分享。
爱表族名人
这是【爱表名人】的专属标识,佩戴它意味着您已经脱离了低级趣味,脱离了菜鸟种群。
显然您的地位是鹤立鸡群,您的身份是卓尔不凡的。在不久的将来,更多专属服务将会为您订制!
爱表水军勋章
爱表水军勋章
新人进步勋章
新人进步勋章
Powered by支付宝提现到已被挂失的银行卡里还有转入别的银行卡吗_百度知道
支付宝提现到已被挂失的银行卡里还有转入别的银行卡吗
支付宝提现到已被挂失的银行卡里还有转入别的银行卡吗
我有更好的答案
如果你的银行卡已经挂失掉,就说明这张卡已经不存在了。提现是不可能成功的。那么,提现的钱,24小时之后还会退回到支付宝账户里。
采纳率:92%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 按键精灵论坛 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信