⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 secondccc

📁 ASC 信号机控制程序,国内最先进的信号机控制程序
💻
📖 第 1 页 / 共 3 页
字号:
                             lamp_state[j]=4;       /*灯组是行人灯组,在黄灯期间置红色*/
                       }
                       if(now_phase_tempn!=0)
                          lamp_state[j]=1;          /*下一阶段用的灯组仍置成绿色*/
                   }
                }
              }
        else if(now_uncount<=red_clear[i]) //当前倒计时处于全红时间范围内
          {
                if(now_phase_tempn==0)
                 now_phase_status = now_phase_status&(~now_phase_temp);
                if((XBYTE[baseaddr_now_phasesch+18*i+2]&0x04)!=0x04)
                {
                    now_step_uncount = now_uncount;         //当前阶段的倒计时
                }

                for(j=0; j<16; j++)
                {
                   toto1 = 0x0001;
                   toto1 = toto1<<j;
                   inuse_lamp_temp =  toto1&now_lamp;
                   if(inuse_lamp_temp!=0)
                   {
                       lamp_state[j]=4;         /*当前阶段用的灯组置成绿闪*/
                       if(now_phase_tempn!=0)
                          lamp_state[j]=1;      /*下一阶段用的灯组仍置成绿色*/
                   }
                }





          }



           }
        }
    }
    count_step++;

    now_step_key++;            //如果没有强制标志

    if(now_uncount==1)                          //一个阶段时间走完
    {
        if(re_control)
        step_counter=reph_number-1;
        else if(force_flag==1)
        step_counter=force_number-1;
        else
        step_counter++;
        //cal_clear_time();//计算个阶段的清空时间
        //max_clear_time();
        now_step_key = 0;
        sensor_virgin_flag = 1;
        /////////////////////////////////////////////////////////
        period_sch[7+step_counter]=count_step;   //当前阶段时间
        count_step=0;
        ///////////////////////////////////////////////////////
        if(step_counter>=step_num){ //周期结束
                                   period_update = 1;
                                   EA=0;
                                   trans_volum();         //周期更迭时传送流量信息
                                   tran_psh();            //周期更迭时传送方案信息
                                   EA=1;
                                   }
    }



}
/*****************************************************************************************************/
//  灯输出函数
/*****************************************************************************************************/
void lamp_out() using 1
{
    uchar xdata i;
    uchar xdata left;

    greenl=0;
    greenh=0;
    yell=0;
    yelh=0;
    redl=0;
    redh=0;

    for(i=0;i<8;i++)
    {
        left=0x01;
        left=left<<i;
        switch(lamp_state[i])
        {
           case  0x01:                      //绿灯
                      greenl=(greenl|left);
                      break;
           case  0x02:                      //绿闪
                      if(ssecond)  greenl=(greenl|left);
                      else         greenl=(greenl&(~left));
                      break;
           case  0x03:                      //黄灯
                      yell=(yell|left);
                      break;
           case  0x04:                      //红灯
                      redl=(redl|left);
                      break;
           case  0x05:                      //黄闪
                      if(ssecond)  yell=(yell|left);
                      else         yell=(yell&(~left));
                      break;
           default:break;
        }
        switch(lamp_state[i+8])
        {
           case  0x01:
                      greenh=(greenh|left);
                      break;
           case  0x02:
                      if(ssecond)  greenh=(greenh|left);
                      else         greenh=(greenh&(~left));
                      break;
           case  0x03:
                      yelh=(yelh|left);
                      break;
           case  0x04:
                      redh=(redh|left);
                      break;
           case  0x05:
                      if(ssecond)  yelh=(yelh|left);
                      else         yelh=(yelh&(~left));
                      break;
           default:break;
        }

    }

  //     XBYTE[0Xc103]=0x80;
  //     XBYTE[0Xc183]=0x80;
       XBYTE[0Xc100]=greenl;
       XBYTE[0Xc101]=yell;
       XBYTE[0Xc102]=redl;
       XBYTE[0Xc180]=greenh;
       XBYTE[0Xc181]=yelh;
       XBYTE[0Xc182]=redh;
}
/*****************************************************************************************************/
//  装载状态函数
/*****************************************************************************************************/
void  make0x83()
{

    led82[0] = now_day_planid;     //当前计划
    led82[1] = timeid;             //时段
    led82[2] = now_schemeid;       //当前方案

    led83[0] = now_step_schid/*+1*/;          //当前的阶段表号
    led83[1] = step_counter+1;                //当前阶段

    led83[4] = now_phase_status/256;
    led83[5] = now_phase_status%256;      //当前的相位状态


    led83[9] = inuse_phasen[step_counter]/256;
    led83[10] = inuse_phasen[step_counter]%256;    //下一阶段的放行相位


    led83[11] = now_step_uncount;//-1;               //当前阶段的倒计时
    led83[12] = machine_run_error;                //运行故障信息
    led83[13] = r_error1/256;
    led83[14] = r_error1%256;       /*驱而不亮的红灯组*/
    led83[15] = y_error1/256;
    led83[16] = y_error1%256;       /*驱而不亮的黄灯组*/
    led83[17] = g_error1/256;
    led83[18] = g_error1%256;       /*驱而不亮的绿灯组*/

    led83[19] = r_error2/256;
    led83[20] = r_error2%256;       /*不驱而亮的红灯组*/
    led83[21] = y_error2/256;
    led83[22] = y_error2%256;       /*不驱而亮的黄灯组*/
    led83[23] = g_error2/256;
    led83[24] = g_error2%256;       /*不驱而亮的绿灯组*/

    led83[25] =  hpp/256;
    led83[26] =  hpp%256;
    led83[27] =  lpp/256;
    led83[28] =  lpp%256;           //线圈故障信息

}

/*-----------------------强制-------------*/
hand_control() using 1
{
  unsigned char  data kkk=0;
  unsigned int   toto;
            temp=XBYTE[0X6d28];      //手动强制标志            ///////////////////////////////////////////////
            force_number=XBYTE[0x6d29];        //强制的阶段号
if(temp==1)
   {

                                         if(force_number>step_num)
                                                             {
                                                     //不再阶段范围内,解除
                                                              force_flag=0;
                                                              if(force_state!=4&&force_state!=0)
                                                               force_state=3;
                                                               }

                                         else
                                                              {
                                                              force_flag=1;
                                                              if(force_state!=2&&force_state!=4)
                                                              force_state=1;
                                                                }



     }
if(temp==2){  /*黄闪*/
                      force_state=5;
                      for(kkk=0;kkk<16;kkk++){
                        toto = 0x0001;
                        toto = toto<<kkk;
                        if((use_lamp&toto)==toto)
                                                 lamp_state[kkk]=4;      /*使用的灯组置成黄闪先*/
                                             else
                                                 lamp_state[kkk]=7;
                                            }
                      }
  else if(temp==3){  /*全红*/
                        force_state=5;
                        for(kkk=0;kkk<16;kkk++){
                        toto = 0x0001;
                        toto = toto<<kkk;
                        if((use_lamp&toto)==toto)
                                                 lamp_state[kkk]=5;      /*使用的灯组置成红色先*/
                                             else
                                                  lamp_state[kkk]=7;
                                   }
                      }

 else if(temp==4){  /*解除*/
                      //re_control=0;
                      force_flag=0;
                      //if(remote_state!=4&&remote_state!=0)
                      if(force_state==2)
                      force_state=3;
                               //remote_state=1:按下遥控按键
                               //remote_state=2:按下遥控按键后,尚未执行遥控相位,继续走本阶段时间
                               //remote_state=3:按下遥控解除按键
                               //remote_state=4:按下遥控解除按键,继续走完遥控阶段时间
                     if(force_state==5)
                        {
                         period_update = 1;
                         step_counter=1;
                         force_state=0;
                         }
                      }


}

/*****************************************************************************************************/
//  半秒中断
/*****************************************************************************************************/
void secondint() interrupt 2 using 1
{
    uchar  i;
    i = D12887C;
    FarContrlLed = !FarContrlLed;
    //WatchDog = !WatchDog;
    ssecond = !ssecond;
    if(ssecond)
    {  //  trans_volum();
       //  if(XBYTE[A031]>
         //force_flag=XBYTE[0X6d28];         /*读取强制标志*/
         tran_count++;                     /*发送测试包的计数器*/
         start_counter++;
         if(start_counter>20)  start_counter=20;
         if(start_counter<=3)             /*开机黄闪*/
         {
            for(i=0;i<16;i++)
            {
               lamp_state[i]=5;
            }
         }
         else if((start_counter>3) && (start_counter<6))    /*开机全红*/
         {
            for(i=0;i<16;i++)
            {
               lamp_state[i]=4;
            }
         }
         else if(start_counter==6)
            period_update=1;  /*开机黄闪全红后,更改周期更迭标志*/
         else if(start_counter>=7)
         {
             // if(re_control!=1)
             max_clear_time();
             search_color();       // key++;
             
             make0x83();
         }
    }
  //强制解除操作
 hand_control();       //手动控制
 if((now_schemeid==0x21)&&(start_counter>=3)){
     for(i=0;i<16;i++)
            {
               lamp_state[i]=5;
            }
                                            }

 remote_ph();

 re_ye_allred();
 lamp_out();
 IP=0X10;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -