您当前的位置:五五电子网电子知识单片机-工控设备51单片机继电器定时器程序 正文
继电器定时器程序

继电器定时器程序

点击数:7888 次   录入时间:03-04 11:59:12   整理:http://www.55dianzi.com   51单片机
点亮十位数码管小数点*/
    else{P1=0x01;P3_3=0;P3_2=1;P3_1=1;P3_0=1;} /*否则十位数码管
小数点不亮*/
    p_out();
    delay(18);                        //需调整的数码管点亮18ms
}


/*显示调整定时2*/
void t2_adj()
{p_out1();
for(h=0;h<4;h++)                //四位数码管每位点亮3ms
    {if(h==left)P1=0x00;
    else {P1=DATA_7SEG[z[h]];        //需调整的数码管点亮18ms
    P3=act[h];p_out();
    delay(3);}}
    P1=DATA_7SEG[up];P3=act[left];
hour2=z[3]*10+z[2];min2=z[1]*10+z[0];
    p_out();
delay(18);
if(o_f2==1){P1=0x01;P3_3=1;P3_2=0;P3_1=1;P3_0=0;} /*若定时2启动,
点亮个位数码管小数点*/
    else{P1=0x01;P3_3=1;P3_2=0;P3_1=1;P3_0=1;} /*否则个位数码管
小数点不亮*/
    p_out();
    delay(18);                //需调整的数码管点亮18ms
}


/*时、分、秒计时单元转换*/
void conv()
{
if(deda<=5)d_05s=0;        //每500ms,秒点取反
    else d_05s=1;
if(deda>=10){sec++;deda=0;}    //每1000ms,秒单元递增
if(sec>=60){min++;sec=0;}        //每60s,分单元递增
if(min>=60){hour++;min=0;}    //每60m,时单元递增
if(hour>=24){hour=0;}            //每24h,时单元清零
}

/*判别定时到否子函数*/
void p_out()
{
if(o_f1==1)            //若定时1启动
{if(hour==hour1)        //定时1时间到
{if(min==min1)
{flag1=1;if(d_05s==1)P3_4=0;else P3_4=1;}}}    //继电器输出标志置1,蜂鸣器间断鸣响
if(flag1==1) P3_5=0;            //若输出标志为1,继电器吸合

if(o_f2==1)            //若定时2启动
{if(hour==hour2)        //定时2时间到
{if(min==min2)
{flag1=0;if(d_05s==1)P3_4=0;else P3_4=1;}}} //继电器输出标志置0,蜂鸣器间断鸣响
if(flag1==0) P3_5=1;            //若输出标志为0,继电器释放
}

/*判别定时到否子函数1*/
void p_out1()
{
if(o_f1==1)            //若定时1启动
{if(hour==hour1)        //定时1时间到
{if(min==min1)
{flag1=1;}}}            //继电器输出标志置1
if(flag1==1) P3_5=0;    //若输出标志为1,继电器吸合

if(o_f2==1)            //若定时2启动
{if(hour==hour2)        //定时2时间到
{if(min==min2)
{flag1=0;}}}            //继电器输出标志置0
if(flag1==0) P3_5=1;    //若输出标志为0,继电器释放
}


/*主函数*/
void main()
{
    init_timer0();            /*定时器T0初始化*/
    init_timer1();            /*定时器T1初始化*/
    
    while(1)
    {
/*将显示缓冲数组内容移到时、分计时单元*/
hour=x[3]*10+x[2];min=x[1]*10+x[0];
hour1=y[3]*10+y[2];min1=y[1]*10+y[0];
hour2=z[3]*10+z[2];min2=z[1]*10+z[0];
 conv();                    /*时、分、秒及100mS单元转换*/
/*将转换后的时、分计时单元内容移到显示缓冲数组*/
x[3]=hour/10;x[2]=hour%10;x[1]=min/10;x[0]=min%10;
y[3]=hour1/10;y[2]=hour1%10;y[1]=min1/10;y[0]=min1%10;
z[3]=hour2/10;z[2]=hour2%10;z[1]=min2/10;z[0]=min2%10;
switch(set)
{
case 0:time();break;/*显示走时*/
case 1:t_adj();break;/*显示调整走时*/
case 2:t1_adj();break;/*显示调整定时1*/
case 3:t2_adj();break;/*显示调整定时2*/
default:break;

if(flag!=0x55)                    /*判断RAM受干扰标志,若受干扰,
则显示器闪烁告警*/
    {uchar i;P3_4=1;P3_5=1;
        for(i=0;i<100;i++)        /*点亮显示器200mS*/
        {
        P1=DATA_7SEG[x[3]];P3=0xf7;delay(1);
        P1=DATA_7SEG[x[2]];P3=0xfb;delay(1);
        P1=DATA_7SEG[x[1]];P3=0xfd;delay(1);
        P1=DATA_7SEG[x[0]];P3=0xfe;delay(1);
        }
        
        P1=0xff;P3=0xff;delay(400);    /*熄灭显示器200mS*/
        P3_7=0;
/*如有键按下达0.5S则退出闪烁状态同时掉电标志置55H。*/
if(P1!=0xff){
delay(10);if(P1_0==0)flag=0x55;F0:if(P1!=0xff)goto F0;
            }P3_7=1;
    }
else TR1=1;/*启动定时器1*/
}}



上一页  [1] [2] 


本文关键字:继电器  程序  定时器  51单片机单片机-工控设备 - 51单片机

《继电器定时器程序》相关文章>>>