找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4060|回复: 12
打印 上一主题 下一主题
收起左侧

萌新想请问一下单片机大佬怎么实现同一个按钮第一次按下和第二次按下效果不一样。

[复制链接]
跳转到指定楼层
楼主
ID:811125 发表于 2020-8-5 11:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
具体来说就是第一次按下按钮小灯会亮10S,如果在小灯亮的10S之内再次按下开关,小灯就会熄灭。麻烦各位大佬了!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:332444 发表于 2020-8-5 14:38 | 只看该作者
提前结束延时就是
回复

使用道具 举报

板凳
ID:332444 发表于 2020-8-5 14:40 | 只看该作者
设置一个变量表示第一次按下,第二次按下判断此变量结束延时。
回复

使用道具 举报

地板
ID:811576 发表于 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;
                }
        }
}
回复

使用道具 举报

5#
ID:811576 发表于 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;
                }
        }
}
回复

使用道具 举报

6#
ID:811568 发表于 2020-8-5 17:08 | 只看该作者
1.方法1:设置计数器记下案件的次数,然后再不同次数完成不同操作
1.方法2:用定时器判断按下按键的时间,不同时间不同操作。
回复

使用道具 举报

7#
ID:592807 发表于 2020-8-5 17:23 | 只看该作者
定义一个全局变量当标志位,每按一次标志位数字改变一次。不同数值的标志位启动不同功能
回复

使用道具 举报

8#
ID:462827 发表于 2020-8-5 21:09 | 只看该作者
用状态标识就行
回复

使用道具 举报

9#
ID:716656 发表于 2020-8-6 11:12 | 只看该作者
按键-消抖-按键-松手,a++,if(a%=?)
回复

使用道具 举报

10#
ID:457495 发表于 2020-8-6 16:29 | 只看该作者
简单来说,就是一个逻辑问题。
回复

使用道具 举报

11#
ID:457495 发表于 2020-8-6 16:31 | 只看该作者
简单来说就是逻辑问题,如果你的按键有用,你原来是检测按键按下之后执行一个函数,那你就设置一个变量。只要按下一次这个变量+1,那么再使用CASE去检测变量的值,这样就可以实现,按不同的次数执行不同的函数程序,记得要将变量清零,然后按键的防抖动要做好。
回复

使用道具 举报

12#
ID:811125 发表于 2020-8-12 15:47 | 只看该作者
xianfajushi 发表于 2020-8-5 14:40
设置一个变量表示第一次按下,第二次按下判断此变量结束延时。

谢谢您!
回复

使用道具 举报

13#
ID:813773 发表于 2020-8-13 20:37 | 只看该作者
可以用按键计数,第一下与第二下电位相反
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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