打印

求教:怎么实现单个按键的长按短按功能?

[复制链接]
7600|10
手机看帖
扫描二维码
随时随地手机跟帖
沙发
maychang| | 2010-3-17 10:30 | 只看该作者
既然是用单片机,那么可以计算按键按下的持续时间,达到某值仍未释放即为长按,未达到某值即释放为短按。
显然,单片机执行按键程序只能是在按键释放之后再执行。

使用特权

评论回复
板凳
zhangjunye| | 2010-3-17 10:42 | 只看该作者
程序里检测按键时长。

使用特权

评论回复
地板
jormen-zhu|  楼主 | 2010-3-17 10:56 | 只看该作者
谢谢楼上的大侠,我用个定时器计算按键按下的时间,基本实现了按键的短按 长按功能,就是有些问题而已,我自己摸索摸索。。不懂再来请教。

使用特权

评论回复
5
liao_fangxing| | 2010-3-17 11:46 | 只看该作者
支持自己摸索,这样印象更深,收获更大
  PS:提醒下LZ 若采用LS2位大哥的思路,最好注意下一些特殊的情况处理,比如长按不放…………:lol

使用特权

评论回复
6
jormen-zhu|  楼主 | 2010-3-17 11:52 | 只看该作者
长按已经能实现了,也不会出现太大问题,现在遇到一个问题是短按释放的判断。比如按键按下去为低电平,释放由低电平变为高电平,在这期间是怎么判断的?
void key()
{
        if(key1==0)
        {
                EA=1;
                if(count>=20)
                {
                        flag=1;
                        if(count>=40)
                        flag=0;
                        if(count>=60)
                        flag=1;

                }         
                while(key1==1)          
                {
                        if(count<10)
                        flag=0;
                }

        }
}

以上是我自己瞎写的代码,长按功能判断是没问题的,在开发板上可以看到事件的实现,按键短按释放那里是有问题的(红色字体),我不知道怎么判断,请教~~

使用特权

评论回复
7
mohanwei| | 2010-3-17 11:59 | 只看该作者
定时器+状态机。先画状态迁移图,再实现代码。具体搜一下本版就有很多实例

使用特权

评论回复
8
jormen-zhu|  楼主 | 2010-3-17 17:34 | 只看该作者
void key()
{
        if(key1==0)
        {
                EA=1;
                if(count>=20)
                {
                        flag=1;
                        count=0;
                }
        }

        while(key1==1)
        {
                if(count<=5)
                {
                        count=0;
                        flag=0;
                }
        }

       
}

这样写可以实现长按和短按功能,但是在松手那里,把while改成if就实现不了,为什么呢?

使用特权

评论回复
9
opal11| | 2013-8-17 15:59 | 只看该作者
支持自己摸索,这样印象更深,收获更大

使用特权

评论回复
10
xtzjkj| | 2013-8-20 09:07 | 只看该作者
目前也是要做这个,表示支持!

使用特权

评论回复
11
koeyb| | 2013-8-20 17:04 | 只看该作者
很抽象。。。。

使用特权

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

本版积分规则

个人签名:在你立足处深挖下去,                                        就会有泉水涌出!

0

主题

20

帖子

1

粉丝