找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3808|回复: 15
收起左侧

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

  [复制链接]
ID:425206 发表于 2018-11-26 11:01 | 显示全部楼层 |阅读模式
按钮1按下后过一段时间(比如2s)后,按下按钮2,控制继电器启动,按钮2按下后过一段时间(比如2s)后,按下按钮1,控制继电器启动,我想理解怎么让按钮2知道按钮1按下,有大佬可以给一下思路吗,看一下程序

评分

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

查看全部评分

回复

使用道具 举报

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
回复

使用道具 举报

ID:429166 发表于 2018-11-26 13:40 | 显示全部楼层
你的按钮二不能自动按下吧,按钮一按下2s后按钮二按下的话,你写个延时函数就可以啊
回复

使用道具 举报

ID:404720 发表于 2018-11-26 15:02 | 显示全部楼层
定义一个标志位,改变按钮1的时候给标志位赋值就ok
回复

使用道具 举报

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

使用道具 举报

ID:433533 发表于 2018-11-26 16:23 | 显示全部楼层
按下按钮1后启动定时器,当定时器超过2s后,持续查询按钮2状态,如果按钮2按下,启动继电器
回复

使用道具 举报

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

使用道具 举报

ID:423639 发表于 2018-11-26 20:24 | 显示全部楼层
A2代表按钮2的标志,当按钮1按下后,A1=1,按下按钮2里,判断A1=1的话就启动继电器 并让A1=0
回复

使用道具 举报

ID:433747 发表于 2018-11-26 21:15 | 显示全部楼层
按键按下,看P口是什么情况,给按键编号,通过比较P口值判断是几号按键按下
回复

使用道具 举报

ID:434015 发表于 2018-11-27 11:06 | 显示全部楼层
比较判断嵌套,满足第一个条件和第二个条件之后进行跳转,可以跳转到一个子程序去执行你想要的功能。
回复

使用道具 举报

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 按下标志
}

回复

使用道具 举报

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

使用道具 举报

ID:367840 发表于 2018-11-28 08:49 | 显示全部楼层
标志位
回复

使用道具 举报

ID:434735 发表于 2018-11-28 09:55 | 显示全部楼层
使用定时器延时,仔细看下规格书
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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