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

📄 secondccc

📁 ASC 信号机控制程序,国内最先进的信号机控制程序
💻
📖 第 1 页 / 共 3 页
字号:
                   if(inuse_lamp_temp!=0)
                   {
                       lamp_state[j]=1;   /*当前阶段用的灯组置成绿色*/
                   }
                }

             }
             else if(now_uncount>=red_yellow_clear[i]) ///////////////*当前阶段处于绿闪*/
             {
            //    if((XBYTE[baseaddr_now_phasesch+18*i+2]&0x04)!=0x04)
            //    {
                    now_step_uncount = now_uncount-red_yellow_clear[i];
            //    }
                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]=2;         /*当前阶段用的灯组置成绿闪*/
                       if(now_phase_tempn!=0)
                          lamp_state[j]=1;      /*下一阶段用的灯组仍置成绿色*/
                   }
                }
             }
             else if(now_uncount<red_yellow_clear[i]&&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-red_clear[i] ;
                    //now_uncount:当前阶段的倒计时 now_step_uncount:当前绿灯的倒计时
                }
                for(j=0; j<16; j++)
                {
                   toto1 = 0x0001;
                   toto1 = toto1<<j;
                   inuse_lamp_temp =  toto1&now_lamp;
                   if(inuse_lamp_temp!=0)
                   {
                      // if(now_uncount>red_clear[i])
                       {
                           lamp_state[j]=3;         /*当前阶段用的灯组置成黄色*/
                           if((XBYTE[baseaddr_now_phasesch+18*i+2]&0x04)==0x04)
                             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;      /*下一阶段用的灯组仍置成绿色*/
                   }
                }
              }
            }
          }
        }
      
    else if(sensor_step[step_counter]==1)              //阶段为感应配时
    {

        if(sensor_virgin_flag)
        {
           sensor_virgin_flag = 0;
           step_time = search_step_time();             //阶段时间在开始时只加载一次=最小绿灯+红灯+黄灯
        }
        if(re_control==1||force_flag==1||hand_step_flag==1)     //遥控 强制
    	                   {
                          /*   //手动***************************************
                             if(step_counter==hand_step-1&&hand_step_flag==1)//正在执行手动相位
                                 {
                                  hand_state=2;
                                  now_uncount =max_red_clear+max_yellow+max_green_flash+1;
                                  now_step_key=1;
                                  }
                              else if((hand_state==1||hand_state==4)&&hand_step_flag==1) //尚未执行手动相位
                              {
    	                      hand_state=2;
                               now_uncount =max_red_clear+max_yellow+max_green_flash;
                               now_step_key=1;
                               }
                              else if(hand_state==2&&hand_step_flag==1) //尚未执行遥控相位,继续走完本阶段
                              {
    	                      now_uncount =max_red_clear+max_yellow+max_green_flash-now_step_key;

                               }                         */


                            //遥控****************************************
                             if(step_counter==reph_number-1)//正在执行遥控相位
                                 {
                                  remote_state=2;
                                  now_uncount =max_red_clear+max_yellow+max_green_flash+1;
                                  now_step_key=1;
                                  }
                              else if(remote_state==1||remote_state==4) //尚未执行遥控相位
                              {
    	                      remote_state=2;
                               now_uncount =max_red_clear+max_yellow+max_green_flash;
                               now_step_key=1;
                               }
                              else if(remote_state==2) //尚未执行遥控相位,继续走完本阶段
                              {
    	                      now_uncount =max_red_clear+max_yellow+max_green_flash-now_step_key;

                               }
                               //remote_state=1:按下遥控按键
                               //remote_state=2:按下遥控按键后,尚未执行遥控相位,继续走本阶段时间
                               //               或正在执行遥控相位
                               //remote_state=3:按下遥控解除按键
                               //remote_state=4:按下遥控解除按键 继续走完遥控阶段时间
                              //else if(remote_state==3) //解除遥控,
                             // now_step_key=XBYTE[baseaddr_now_schemesch+8+step_counter]-now_uncount;

                            //***************强制****************************************//
                           else if(step_counter==force_number-1)//正在执行强制相位
                                 {
                                  force_state=2;
                                  now_uncount =max_red_clear+max_yellow+max_green_flash+1;
                                  now_step_key=1;
                                  }
                              else if(force_state==1||force_state==4) //尚未执行强制相位
                              {
    	                      force_state=2;
                               now_uncount =max_red_clear+max_yellow+max_green_flash;
                               now_step_key=1;
                               }
                              else if(force_state==2) //尚未执行强制相位,继续走完本阶段
                              {
    	                      now_uncount =max_red_clear+max_yellow+max_green_flash-now_step_key;

                               }
                               //remote_state=1:按下遥控按键
                               //remote_state=2:按下遥控按键后,尚未执行遥控相位,继续走本阶段时间
                               //remote_state=3:按下遥控解除按键
                               //remote_state=4:按下遥控解除按键 继续走完遥控阶段时间
                              //else if(remote_state==3) //解除遥控,
                             // now_step_key=XBYTE[baseaddr_now_schemesch+8+step_counter]-now_uncount;
    	            }

           else
           {
           if(remote_state==3) //解除遥控
                  {
                   now_step_key=step_time-now_uncount;
                   remote_state=4;
                   if(reph_number>step_num&&reph_number!=12)
                   remote_state=0;
                   }
           else if(force_state==3) //解除强制
                  {
                   now_step_key=step_time-now_uncount;
                   force_state=4;
                   if(force_number>step_num&&force_number!=0)
                   force_state=0;
                   }
            else
               //查表的阶段时间与当前历时的倒计时
            now_uncount = step_time-now_step_key;

            }

        for(i=0; i<16; i++)                            //此循环用于查找当前阶段用到的相位
        {

           toto = 0x0001;
           toto = toto<<i;

           now_phase_temp = toto&inuse_phase[step_counter];   //当前阶段是否包含该相位
           if(re_control==1&&step_counter!=reph_number-1)//遥控响应尚未开始执行
                now_phase_tempn = toto&inuse_phasen[reph_number-1];
          else if(force_flag==1&&step_counter!=force_number-1)//遥控响应尚未开始执行
                now_phase_tempn = toto&inuse_phasen[force_number-1];
          else
                now_phase_tempn = toto&inuse_phasen[step_counter];
           if(now_phase_temp!=0)                        //
           {
              now_lamp_temp = XBYTE[baseaddr_now_phasesch+18*i];
              now_lamp_temp = now_lamp_temp<<8;
              now_lamp = now_lamp_temp|XBYTE[baseaddr_now_phasesch+18*i+1];


             if(now_uncount>red_yellow_green_clear[i])  //当前倒计时处于绿灯时间范围内
              {
                now_phase_status = now_phase_status|now_phase_temp;
               if((XBYTE[baseaddr_now_phasesch+18*i+2]&0x04)!=0x04)
               // {
                    now_step_uncount = now_uncount-red_yellow_clear[i]; //绿灯倒计时=阶段倒计时-全红时间-黄灯时间
              // }
             //   if((ensensor_flag) /*&& ((XBYTE[baseaddr_now_phasesch+18*i+2]&0x04)!=0x04)*/ && (now_phase_tempn==0))
               // {
                  /* if(now_step_key<=min_greentime)      //剩余时间大于单位步长
                   //if(now_uncount>sensor_distance)
                     {
                        sensor_car_flag = 1;
                        sensor_counter++;
                        if(sensor_counter>=sensor_distance)
                        {
                             ensensor_flag = 0;
                             sensor_car_flag = 0;
                        }
                     }   */
                     //if(now_step_key>min_greentime)   //min_greentime =最小绿灯-绿闪-单位步长
                     //if(now_uncount<=sensor_distance)
                     //max_green_flash=max_green_flash_cacu();
                     if(now_step_key<(step_time-sensor_distance-max_red_clear-max_yellow))
                          {
                             //ensensor_flag = 0;
                             sensor_car_flag = 0;
                           }

                     if(now_step_key<(step_time-max_green_flash-max_red_clear-max_yellow)&&now_step_key>=(step_time-max_red_clear-max_yellow-sensor_distance))
                     {
                         sensor_car_flag=1;

                         if(carnumber!=lastcarnumber)
                         {
                             add_greentime =now_step_key+sensor_distance;
                             if(add_greentime>=max_greentime)
                             {
                                ensensor_flag = 0;
                                sensor_car_flag = 0;
                                add_greentime = max_greentime;
                             }
                             step_time = add_greentime+XBYTE[baseaddr_now_phasesch+18*i+15]+XBYTE[baseaddr_now_phasesch+18*i+16]+XBYTE[baseaddr_now_phasesch+18*i+17];
                             sensor_counter = 1;
                             lastcarnumber = carnumber=0;
                         }
                     /*    else
                         {
                            sensor_counter++;
                            if(sensor_counter>=sensor_distance)
                            {
                                ensensor_flag = 0;
                                sensor_car_flag = 0;
                            }
                         }      */

                     }
                //}
                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]=1;          /*当前阶段用的灯组置成绿色*/
                   }
                }
              }
            else if(now_uncount>=red_yellow_clear[i]&&now_uncount<=red_yellow_green_clear[i]) //当前倒计时处于绿闪时间范围内
              {
             //   if((XBYTE[baseaddr_now_phasesch+18*i+2]&0x04)!=0x04)
             //   {
                    now_step_uncount = now_uncount-red_yellow_clear[i];    //当前阶段的倒计时
             //   }
                for(j=0; j<16; j++)                   //此循环用于查找当前相位用到的灯组
                {
                   toto1 = 0x0001;
                   toto1 = toto1<<j;
                   inuse_lamp_temp =  toto1&now_lamp;
                   if(inuse_lamp_temp!=0)
                   {
                      if(now_phase_tempn==0)
                      {
                         ensensor_flag = 0;
                         sensor_car_flag = 0;
                         step_time = now_step_key+now_uncount;
                         lamp_state[j]=2;         /*当前阶段用的灯组置成绿闪*/

                      }
                      else
                      {
                         lamp_state[j]=1;          /*下一阶段用的灯组仍置成绿色*/
                      }
                   }
                }
              }
        // else if(now_uncount>=red_clear[i]) //当前倒计时处于黄灯时间范围内
        else if(now_uncount<red_yellow_clear[i]&&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)
                   {
                      // if(now_uncount>red_clear[i])
                       {
                           lamp_state[j]=3;         /*当前阶段用的灯组置成黄色*/
                           if((XBYTE[baseaddr_now_phasesch+18*i+2]&0x04)==0x04)

⌨️ 快捷键说明

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