标题: 萌新想请问一下单片机大佬怎么实现同一个按钮第一次按下和第二次按下效果不一样。 [打印本页]

作者: 琲世    时间: 2020-8-5 11:25
标题: 萌新想请问一下单片机大佬怎么实现同一个按钮第一次按下和第二次按下效果不一样。
具体来说就是第一次按下按钮小灯会亮10S,如果在小灯亮的10S之内再次按下开关,小灯就会熄灭。麻烦各位大佬了!

作者: xianfajushi    时间: 2020-8-5 14:38
提前结束延时就是
作者: xianfajushi    时间: 2020-8-5 14:40
设置一个变量表示第一次按下,第二次按下判断此变量结束延时。
作者: hello_ps    时间: 2020-8-5 16:23
可以按照下面代码的思路来实现

static int flag = 0;

void main(void) {
        int32 i = 0;
        while (1) {
                if ((flag == 0) && (key)){
                        //延时10s 设置delay标志
                        if(delay) {
                                flag = 1;
                        } else {
                                flag = 0;
                        }
                } else if ((flag == 1) && (key)) {
                        //关闭led
                        flag = 0;
                }
        }
}
作者: hello_ps    时间: 2020-8-5 16:25
可以按照下面代码的思路进行编码

static int flag = 0;

void main(void) {
        int32 i = 0;
        while (1) {
                if ((flag == 0) && (key)){
                        //延时10s 设置delay标志
                        if(delay) {
                                flag = 1;
                        } else {
                                flag = 0;
                        }
                } else if ((flag == 1) && (key)) {
                        //关闭led
                        flag = 0;
                }
        }
}
作者: lvxiangbei    时间: 2020-8-5 17:08
1.方法1:设置计数器记下案件的次数,然后再不同次数完成不同操作
1.方法2:用定时器判断按下按键的时间,不同时间不同操作。
作者: 黄youhui    时间: 2020-8-5 17:23
定义一个全局变量当标志位,每按一次标志位数字改变一次。不同数值的标志位启动不同功能
作者: hantu    时间: 2020-8-5 21:09
用状态标识就行
作者: 压着我头发啦    时间: 2020-8-6 11:12
按键-消抖-按键-松手,a++,if(a%=?)
作者: 我么得感情    时间: 2020-8-6 16:29
简单来说,就是一个逻辑问题。
作者: 我么得感情    时间: 2020-8-6 16:31
简单来说就是逻辑问题,如果你的按键有用,你原来是检测按键按下之后执行一个函数,那你就设置一个变量。只要按下一次这个变量+1,那么再使用CASE去检测变量的值,这样就可以实现,按不同的次数执行不同的函数程序,记得要将变量清零,然后按键的防抖动要做好。
作者: 琲世    时间: 2020-8-12 15:47
xianfajushi 发表于 2020-8-5 14:40
设置一个变量表示第一次按下,第二次按下判断此变量结束延时。

谢谢您!
作者: 鎏火.doc    时间: 2020-8-13 20:37
可以用按键计数,第一下与第二下电位相反




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1