找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助大额延时小时级控制继电器输出延时程序

[复制链接]
跳转到指定楼层
楼主
ID:101987 发表于 2016-1-5 21:50 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 190482107 于 2016-1-5 22:47 编辑

硬件都有了,小弟正在学51中。。因为我需要延时的时间比较长(6个小时)定时和中断系统小弟还没理解透,哪位大神能这个参考程序给小弟研究研究也好,顺便注释下程序原理和思路。芯片是STC89C52晶振11.0592的。板子的P2.0和P2.1分别控制两个三极管来驱动继电器K1和K2的线圈。
这么长时间的延时程序我还不会写,我要的功能是:
P1.0和P1.1为输入触发信号,当P1.0低电平触发后,开始延时6小时后P2.0输出信号控制继电器K1动作,当P1.0恢复高电平后延时清零等待下一次触发,P1.1对应P2.1控制继电器K2同理,每次触发要么P1.0要么P1.1不会同时触发,
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2016-1-5 22:04 来自手机 | 只看该作者
6个小时这么长的延时不建议使用延时函数,要是这中间出现过断电死机之类的,就会发生错误。。。所以还是用,实时时钟比较好。
回复

使用道具 举报

板凳
ID:33984 发表于 2016-1-5 22:19 | 只看该作者
“板子的P2.0和P2.1分别控制继电器K1和K2的线圈。”
没有这样控制的,要加驱动滴l。哈
回复

使用道具 举报

地板
ID:33984 发表于 2016-1-5 22:27 | 只看该作者
如果用单位机控制继电器。单片机有点吃不消。
回复

使用道具 举报

5#
ID:101987 发表于 2016-1-5 22:44 来自手机 | 只看该作者
plnh8258 发表于 2016-1-5 22:19
“板子的P2.0和P2.1分别控制继电器K1和K2的线圈。”
没有这样控制的,要加驱动滴l。哈

是的,继电器是24V的,管脚控制三极管的,
回复

使用道具 举报

6#
ID:101987 发表于 2016-1-5 22:49 | 只看该作者
写漏了,是用三极管驱动外围电路控制的,
回复

使用道具 举报

7#
ID:33984 发表于 2016-1-5 22:52 | 只看该作者
明天有时间帮你写一个。(按照你说的要求写)
回复

使用道具 举报

8#
ID:101987 发表于 2016-1-5 22:56 来自手机 | 只看该作者
admin 发表于 2016-1-5 22:04
6个小时这么长的延时不建议使用延时函数,要是这中间出现过断电死机之类的,就会发生错误。。。所以还是用 ...

实时时钟是什么意思,另外要专门的芯片么,
回复

使用道具 举报

9#
ID:33984 发表于 2016-1-5 23:07 | 只看该作者
是滴  实时时钟是芯片。有的片内有电池,有的没有
回复

使用道具 举报

10#
ID:33984 发表于 2016-1-5 23:14 | 只看该作者
有电池的在不使用的时候,能放大约十年。(它里的面的时钟继续工作,而且非常精确度如:DS12887)使用时用程序将它调出,而无电池的如果停电里面的时钟就会复位(如:DS1032)。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

11#
ID:101987 发表于 2016-1-5 23:26 来自手机 | 只看该作者
plnh8258 发表于 2016-1-5 22:52
明天有时间帮你写一个。(按照你说的要求写)

感谢,我也学习学习,
回复

使用道具 举报

12#
ID:101987 发表于 2016-1-5 23:29 来自手机 | 只看该作者
plnh8258 发表于 2016-1-5 23:14
有电池的在不使用的时候,能放大约十年。(它里的面的时钟继续工作,而且非常精确度如:DS12887)使用时用 ...

原来如此,
回复

使用道具 举报

13#
ID:33984 发表于 2016-1-6 11:55 | 只看该作者
#include<reg52.h>
sbit button1=P1^0;        //定义button1(按钮1)
sbit k1=P2^0;        //定义K1(断电器)

sbit button2=P1^1;        //button2(按钮)
sbit k2=P2^1;        //定义K2(断电器)

void delay10s(void)   //10秒延时程序(11.0592MHZ)
{
    unsigned char a,b,c;
    for(c=203;c>0;c--)
       for(b=156;b>0;b--)
           for(a=144;a>0;a--);       
}

void main()
{
        while(1)
        {
                 if(0==button1)                //如果button1按下
                 {
                         for(i=2160;i>0;i--)          //6小时里有2160个10秒,所以循环2160次就是6小时
                        {
                                delay10s(); //10秒的延时
                        }
                         k1=0;        //断电器吸哈
                 }

                 if(0==button2)                //如果button2按下
                 {
                         for(i=2160;i>0;i--)          //6小时里有2160个10秒,所以循环2160次就是6小时
                        {
                                delay10s(); //10秒的延时
                        }
                         k2=0;        //断电器吸哈
                 }               
        }
}
回复

使用道具 举报

14#
ID:101987 发表于 2016-1-6 20:51 来自手机 | 只看该作者
plnh8258 发表于 2016-1-6 11:55
#include
sbit button1=P1^0;        //定义button1(按钮1)
sbit k1=P2^0;        //定义K1(断电器)

void delay10s(void) //10秒延时程序(11.0592MHZ)
{
  unsigned char a,b,c;
  for(c=203;c>0;c--)
   for(b=156;b>0;b--)
   for(a=144;a>0;a--);   
}
感谢赐教,这里有点不明白为什么是10秒,
回复

使用道具 举报

15#
ID:33984 发表于 2016-1-6 21:00 | 只看该作者
这里有点不明白为什么是10秒,....我总是有计量的的吧,1秒、100ms.......


void delay1s(void)   //1秒延时程序(11.0592MHZ)
{
    unsigned char a,b,c;
    for(c=95;c>0;c--)
        for(b=26;b>0;b--)
            for(a=185;a>0;a--);
}
......
这样也可。
for(i=21600;i>0;i--)          //6小时里有21600个1秒,所以循环21600次就是6小时
回复

使用道具 举报

16#
ID:102003 发表于 2016-1-6 21:28 | 只看该作者
你时间是固定还是任意可调的。如果固定很简单,做一个定时技术程序与你要求时间比较即可。若果是任意时间,可用按键开关或8421播码开设置定时值输入都行。
回复

使用道具 举报

17#
ID:152694 发表于 2016-12-23 00:26 | 只看该作者
是测电流   然后继电保护吗?
回复

使用道具 举报

18#
ID:152694 发表于 2016-12-23 00:27 | 只看该作者
是测电流   继电保护吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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