标题: 求助大额延时小时级控制继电器输出延时程序 [打印本页]

作者: 190482107    时间: 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不会同时触发,

作者: admin    时间: 2016-1-5 22:04
6个小时这么长的延时不建议使用延时函数,要是这中间出现过断电死机之类的,就会发生错误。。。所以还是用,实时时钟比较好。
作者: plnh8258    时间: 2016-1-5 22:19
“板子的P2.0和P2.1分别控制继电器K1和K2的线圈。”
没有这样控制的,要加驱动滴l。哈
作者: plnh8258    时间: 2016-1-5 22:27
如果用单位机控制继电器。单片机有点吃不消。
作者: 190482107    时间: 2016-1-5 22:44
plnh8258 发表于 2016-1-5 22:19
“板子的P2.0和P2.1分别控制继电器K1和K2的线圈。”
没有这样控制的,要加驱动滴l。哈

是的,继电器是24V的,管脚控制三极管的,
作者: 190482107    时间: 2016-1-5 22:49
写漏了,是用三极管驱动外围电路控制的,
作者: plnh8258    时间: 2016-1-5 22:52
明天有时间帮你写一个。(按照你说的要求写)
作者: 190482107    时间: 2016-1-5 22:56
admin 发表于 2016-1-5 22:04
6个小时这么长的延时不建议使用延时函数,要是这中间出现过断电死机之类的,就会发生错误。。。所以还是用 ...

实时时钟是什么意思,另外要专门的芯片么,
作者: plnh8258    时间: 2016-1-5 23:07
是滴  实时时钟是芯片。有的片内有电池,有的没有

作者: plnh8258    时间: 2016-1-5 23:14
有电池的在不使用的时候,能放大约十年。(它里的面的时钟继续工作,而且非常精确度如:DS12887)使用时用程序将它调出,而无电池的如果停电里面的时钟就会复位(如:DS1032)。
作者: 190482107    时间: 2016-1-5 23:26
plnh8258 发表于 2016-1-5 22:52
明天有时间帮你写一个。(按照你说的要求写)

感谢,我也学习学习,
作者: 190482107    时间: 2016-1-5 23:29
plnh8258 发表于 2016-1-5 23:14
有电池的在不使用的时候,能放大约十年。(它里的面的时钟继续工作,而且非常精确度如:DS12887)使用时用 ...

原来如此,
作者: plnh8258    时间: 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;        //断电器吸哈
                 }               
        }
}
作者: 190482107    时间: 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秒,
作者: plnh8258    时间: 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小时
作者: 2016    时间: 2016-1-6 21:28
你时间是固定还是任意可调的。如果固定很简单,做一个定时技术程序与你要求时间比较即可。若果是任意时间,可用按键开关或8421播码开设置定时值输入都行。
作者: fly丶丶飞    时间: 2016-12-23 00:26
是测电流   然后继电保护吗?
作者: fly丶丶飞    时间: 2016-12-23 00:27
是测电流   继电保护吗?




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