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

📄 second.c

📁 ASC 信号机控制程序,国内最先进的信号机控制程序
💻 C
📖 第 1 页 / 共 3 页
字号:
                             lamp_state[j]=4;       /*灯组是行人灯组,在黄灯期间置红色*/
                       }
                       if(now_phase_tempn!=0)
                          lamp_state[j]=1;          /*下一阶段用的灯组仍置成绿色*/
                   }
                }
              }
       // else if(now_uncount<=red_clear[i]) //当前倒计时处于全红时间范围内
         else if(now_uncount<=max_red_clear) //当前倒计时处于全红时间范围内
          {     clear_flag=1;
                clear_force=1;
                if(now_phase_tempn==0)
                 now_phase_status = now_phase_status&(~now_phase_temp);
                 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==2)updatanvram=1;
    if(now_uncount==1)                          //一个阶段时间走完
    {   //感应自学习赋值语句 
        period_sch[9+step_counter]=count_step;
        count_step=0;
        alt_change=1;                          //新阶段开始标志
        exit_remote=0;
        max_end_flag=0x00;                     //新的阶段开始感应没有达到最大标志
        if(re_control==1){//遥控和手动状况
               re_keep_flag=1;              //状态维持标志

               clear_state=0;
               re_exe_flag=0;              //进入新阶段后认为遥控动作结束,进入静态显示状态
               force_exe_flag=0;
               step_counter=reph_number-1;  //新的阶段号
                          }
        if(force_flag==1){
                forceacting=0;       //一次强制转换结束
                re_keep_force=1;
                re_exe_flag=0;
                force_exe_flag=0;
                step_counter=force_number-1;
                          }else{//非遥控强制阶段状况下
                           if(re_control!=1)step_counter++;
                                }

        now_step_key = 0;
        sensor_virgin_flag = 1;  //R

        if(step_counter>=step_num){ //周期结束
                                   period_update = 1;
                                   trans_volum();         //周期更迭时传送流量信息
                                   selcal_flag=1;//tran_psh();            //周期更迭时传送方案信息



                                   }
    }



}
/*****************************************************************************************************/
//  灯输出函数
/*****************************************************************************************************/
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*/;          //当前的阶段表号
    if(step_counter+1>step_num)led83[1]=1;
                           else led83[1]=step_counter+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;               //当前阶段的倒计时
    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[13] = r_load1/256;
      led83[14] = r_load1%256;       /*驱而不亮的红灯组*/
      led83[15] = y_load1/256;
      led83[16] = y_load1%256;       /*驱而不亮的黄灯组*/
      led83[17] = g_load1/256;
      led83[18] = g_load1%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;           //线圈故障信息

}


/*****************************************************************************************************/
//  半秒中断
/*****************************************************************************************************/
void secondint() interrupt 2 using 1
{
    uchar  i;
    uint gg;
    i = D12887C;
    auto_down=0;
  //  FarContrlLed= !FarContrlLed;
    //WatchDog = !WatchDog;
    ssecond = !ssecond;
    machine_flag=XBYTE[0X8008];  //主机或从机标志,  1:主机  0:从机
    if(ssecond)//秒中断
     //////////////////////////////////////////////////////////////

    {
         if(machine_flag==1){   //如果设定为主机
                   for(i=0;i<5;i++){   //查找从机相位差
                           zone_differ[i]=XBYTE[0X800d+3*i];
                           gg=XBYTE[0X800B+3*i];
                           gg=gg<<8;
                           gg=gg|XBYTE[0X800c+3*i];
                           zone_number[i] =gg;
                                     }
                            }
         turn_off_state=XBYTE[0X72E6];
         last_stepcounter=step_counter;
         force_flag=XBYTE[0X6d28];         /*读取强制标志*/
         force_number=XBYTE[0x6d29];       //强制相位号
         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)
         {

             remote_deal() ; //遥控处理函数
             man_deal();      //手动控制处理程序
             max_clear_time();
             search_color();       // key++;
             if(now_step_key==0x02)hard_greenconflic(); //阶段开始第2秒进行硬件绿冲突检测
             make0x83();
             if(machine_flag==0x01){
                                   send_zone();        //区域控制发送函数
                             //      send_zone();        //区域控制发送函数
                                    }
         }

    }
  //强制解除操作
// hand_control();       //手动控制
 if((now_schemeid==0x21)&&(start_counter>=3)){
     for(i=0;i<16;i++)
            {
               lamp_state[i]=5;
            }
                                            }

 re_ye_allred();        //遥控黄闪,四面红

 if(work_time==0){
        if(turn_off_state==0x01){
             for(i=0;i<16;i++){  //全灭
                   lamp_state[i]=7;
                               }
                                 }
             if(turn_off_state==0x02){
                   for(i=0;i<16;i++){
                   lamp_state[i]=5;   //关机黄闪
                               }
                                 }

                  }
       if(auto_down==0x01)run_state=0x06;
       if(conflag==0x01)run_state=0x04;
       if(hconflag==0x01)run_state=0x05;

       if((conflag==0x01)||(hconflag==0x01)){
              for(i=0;i<16;i++){
                   lamp_state[i]=5;
                               }
                         }

 //正常工作状态下,或设定关机后自动运行的
/* for(i=0;i<14;i++){
   if(lamp_state[i]==0x07){
                no_lamp++;
                           }
                   } */
 lamp_out();            //灯色输出
 IP=0X10;
 EA=1;

}

⌨️ 快捷键说明

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