找回密码
 立即注册

QQ登录

只需一步,快速开始

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

想用单片机做一个延时电路,却没有思路

  [复制链接]
跳转到指定楼层
楼主
ID:425206 发表于 2018-11-26 11:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
按钮1按下后过一段时间(比如2s)后,按下按钮2,控制继电器启动,按钮2按下后过一段时间(比如2s)后,按下按钮1,控制继电器启动,我想理解怎么让按钮2知道按钮1按下,有大佬可以给一下思路吗,看一下程序

评分

参与人数 1黑币 +8 收起 理由
灭雷决88 + 8 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:94031 发表于 2018-11-26 11:32 | 只看该作者
按键状态应建一个标志,根据标志就知道那个按下,那个没按下。
回复

使用道具 举报

板凳
ID:277550 发表于 2018-11-26 12:32 | 只看该作者
全局变量,记住按键状态


~~~~~~
回复

使用道具 举报

地板
ID:424598 发表于 2018-11-26 13:05 来自手机 | 只看该作者
比较A1代表按钮1的标志,A2代表按钮2的标志,当按钮1按下后,A1=1,按下按钮2里,判断A1=1的话就启动继电器 并让A1=0
回复

使用道具 举报

5#
ID:429166 发表于 2018-11-26 13:40 | 只看该作者
你的按钮二不能自动按下吧,按钮一按下2s后按钮二按下的话,你写个延时函数就可以啊
回复

使用道具 举报

6#
ID:404720 发表于 2018-11-26 15:02 | 只看该作者
定义一个标志位,改变按钮1的时候给标志位赋值就ok
回复

使用道具 举报

7#
ID:430265 发表于 2018-11-26 15:43 | 只看该作者
最简单的是在按钮的程序时候定义标志位,根据标志位不同实现不同的功能。如果考虑到按下的时间就很复杂了
回复

使用道具 举报

8#
ID:433533 发表于 2018-11-26 16:23 | 只看该作者
按下按钮1后启动定时器,当定时器超过2s后,持续查询按钮2状态,如果按钮2按下,启动继电器
回复

使用道具 举报

9#
ID:397465 发表于 2018-11-26 17:25 | 只看该作者
用单片机做延时电路,确实是浪费,还得编程。用555电路做就行,焊完电路通电就能用,方便很多。非要用单片机也行,你会编写程序吗,会编程就好办了,用单片机延时是最简单事了,延时的时间长短控制也非常灵活,范围更大,延时一年都行,最短几毫秒也行。
回复

使用道具 举报

10#
ID:423639 发表于 2018-11-26 20:24 | 只看该作者
A2代表按钮2的标志,当按钮1按下后,A1=1,按下按钮2里,判断A1=1的话就启动继电器 并让A1=0
回复

使用道具 举报

11#
ID:433747 发表于 2018-11-26 21:15 | 只看该作者
按键按下,看P口是什么情况,给按键编号,通过比较P口值判断是几号按键按下
回复

使用道具 举报

12#
ID:434015 发表于 2018-11-27 11:06 | 只看该作者
比较判断嵌套,满足第一个条件和第二个条件之后进行跳转,可以跳转到一个子程序去执行你想要的功能。
回复

使用道具 举报

13#
ID:138119 发表于 2018-11-27 16:38 | 只看该作者

//仅提供编程思路,代码仅供参考,以51单片机为例:

sbit S1  Px.x
sbit S2  Px.x


bit S1_down_bit
bit S2_down_bit


if(S1 == 0)                                //按钮1 按下
{
        S1_down_bit = 1;        //按钮1 按下标志
}


if(S2 == 0)                                //按钮2 按下
{
        S2_down_bit = 1;        //按钮1 按下标志
}


if(S1_down_bit == 1)        //按钮1按下过,且在2秒内
{
        if(S2 == 0)                        //按钮2 按下
        {
                OUT1 = 1;                //继电器1输出
        }
}

if(S2_down_bit == 1)        //按钮2按下过,且在2秒内
{
        if(S1 == 0)                        //按钮1 按下
        {
                OUT2 = 1;                //继电器2输出
        }
}



//定时器中断程序

void TIMx() interrupt 1        //配置成2秒定时器中断
{
        //清中断标志
        S1_down_bit = 0;        //清0 按钮1 按下标志
        S2_down_bit = 0;        //清0 按钮2 按下标志
}

回复

使用道具 举报

14#
ID:388197 发表于 2018-11-27 23:49 | 只看该作者
简单的延迟功能用单片机确实有点浪费,555或者用分立原件加个LM358搭个RC延迟电路就能胜任了
回复

使用道具 举报

15#
ID:367840 发表于 2018-11-28 08:49 | 只看该作者
标志位
回复

使用道具 举报

16#
ID:434735 发表于 2018-11-28 09:55 | 只看该作者
使用定时器延时,仔细看下规格书
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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