打印

单片机按键问题

[复制链接]
3053|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lpz110|  楼主 | 2010-10-20 18:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
网友们好.我想问个问题,就是一个按键需要处理多个任务...假如第一次按下执行一个任务,第二次按下处理另外一个任务程序,第三次按下在处理其他的任务程序,,程序上该怎么设计啊. 我想了下,我的思路是按键按下后.,,,设置变量加1,到了3次就清零,在判段该变量的数值来决定按键的次数,,从而调用任务程序,   ,,,这样做能行吗...有没有更简单的办法啊

相关帖子

沙发
chen3bing| | 2010-10-20 19:01 | 只看该作者
这样做可以的。

使用特权

评论回复
板凳
singleywy| | 2010-10-20 19:41 | 只看该作者
这样不行,因为按一次,执行任务1,再按一次执行任务2,再按一次执行任务3,显然这样检测导致任务优先级的产生,同时任务被多次执行
解决办法:在一定时间内,检测按键的次数,延时后对按键的次数进行处理,选择不同的任务,然后按键次数归零

使用特权

评论回复
地板
zhufdf| | 2010-10-20 22:11 | 只看该作者
3楼 OK

使用特权

评论回复
5
免证入网| | 2010-10-20 22:20 | 只看该作者
再就是可以再用一个键用于确认第一个键的输入。如果用3楼等待法,可能按下之间会因为延时导致操作间隔。而确认键的引入可以避免这个问题出现。

使用特权

评论回复
6
zhjyao021| | 2010-10-28 13:00 | 只看该作者
按下次数判断
=========================================================================*/
void shannum_jian(void)
{   
    count_A++;
    if(count_A==1)          //        buttondown 1
    {
        first_sure=1;
        second_sure=0;
        third_sure=0;
    }
    else if(count_A==2)    // buttondown 2
    {       
        first_sure=0;
        second_sure=1;
        third_sure=0;
    }
    else if(count_A==3)    // buttondown 3
    {   count_A=0;
        first_sure=0;
        second_sure=0;
        third_sure=1;
    }
   
}

使用特权

评论回复
7
zhu_han_2| | 2011-7-10 19:35 | 只看该作者
LZ方案可行,程序要注意!!

使用特权

评论回复
8
JLINGON| | 2011-7-10 23:31 | 只看该作者
这样做是可以的

使用特权

评论回复
9
xd54622| | 2011-7-16 19:51 | 只看该作者
不知道又没有更好的方法,5楼确认键的方法感觉不错

使用特权

评论回复
10
wangflw| | 2011-7-17 00:08 | 只看该作者
这种方法可以实现LZ的基本要求了,但是我觉得不是最好的方案。这样判断键值,会导致一个问题:就是执行任务只能按照顺序执行,可能会出现点问题。当然具体的还要看LZ他的应用需求是什么样的。其实可以通过定时器来判断按下的时间,把按键划分为短按、长按、双击(这个好像是从匠人出得那边书里面看到的。:P )这样的话,3个任务就没有执行顺序的限制了。
6# zhjyao021

使用特权

评论回复
11
outstanding| | 2013-7-20 15:18 | 只看该作者
状态机制吧,或者是多线程吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

28

帖子

1

粉丝