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

📄 second.lst

📁 最先进的信号机程序,经过很多重要场合测试通过
💻 LST
📖 第 1 页 / 共 5 页
字号:
 200   1         uchar i;
 201   1         uint phasek;
 202   1        for(i=0; i<16; i++)
 203   1            {
 204   2      
 205   2                phasek = 18*i;
 206   2                red_clear[i] = XBYTE[baseaddr_now_phasesch+phasek+16];   //红灯清空时间
 207   2                //red_yellow_clear[i] = red_clear[i]+XBYTE[baseaddr_now_phasesch+phasek+15]; //黄灯清空时间
 208   2                red_yellow_clear[i] = red_clear[i]+ max_yellow;
 209   2                red_yellow_green_clear[i] = red_yellow_clear[i]+XBYTE[baseaddr_now_phasesch+phasek+17]; //行人清
             -空时间
 210   2            }
 211   1      }
 212          /*****************************************************************************************************/
 213          // 查找灯色
 214          /*****************************************************************************************************/
 215          void  search_color()  using 1
 216          {
 217   1          uchar  data i,j;
 218   1          uint data toto,toto1;
 219   1      
 220   1      
 221   1      
 222   1          for(i=0; i<16; i++)
 223   1          {
 224   2              toto = 0x0001;
 225   2              toto = toto<<i;
 226   2              if((use_lamp&toto)==toto)  lamp_state[i]=4;      /*使用的灯组置成红色先*/
 227   2              else                       lamp_state[i]=7;      /*不用的灯组灭掉*/
 228   2          }
 229   1      
 230   1            cal_clear_time();//计算个阶段的清空时间
 231   1            ///////////////////////////////////////////////////////////////////////////////
 232   1      //遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控
 233   1      ////////////////////////////////////////////////////////////////////////////////
 234   1              if(re_control==1) {    //遥控
 235   2                   if(act_flag==1){ //遥控状态发生时,时间转移到当前执行阶段绿灯最后一秒 遥控发生秒
 236   3                               act_flag=0;
 237   3                               if(clear_flag==0){ //绿灯阶段当前阶段倒计时置为绿灯最后一秒,
C51 COMPILER V6.02  SECOND                                                                 08/02/2006 15:11:10 PAGE 5   

 238   4                                       now_uncount =max_green_flash+max_red_clear+max_yellow+1;
 239   4                                                 } //处于本阶段清空时刻,不处理,顺其自然
 240   3      
 241   3      
 242   3                                   }else{   //非遥控发生秒执行语句
 243   3                                   if(re_keep_flag==1){//
 244   4                                            now_uncount=max_green_flash+max_red_clear+max_yellow+1;
 245   4                                                   }else {//遥控的是当前运行阶段或处于过时间不需要减少
 246   4                                            if(step_counter!=reph_number-1){
 247   5                                                                            now_uncount--;
 248   5                                                                            }else{
 249   5                                                                            if(re_exe_flag==1){
 250   6                                                                                  now_uncount =max_green_flash+m
             -ax_red_clear+max_yellow+1;
 251   6                                                                                  re_exe_flag=0;
 252   6                                                                                                }
 253   5                                                                                  }
 254   4                                                 }
 255   3                                       }
 256   2                              }else{//无强制和遥控的状态下
 257   2      
 258   2                                  //now_uncount=XBYTE[baseaddr_now_schemesch+8+step_counter]-now_step_key;
 259   2                                  if((re_control==0)&&last_re_control==1){
 260   3                                                now_uncount=max_green_flash+max_red_clear+max_yellow+1;
 261   3                                                now_step_key=0;
 262   3                                                                          }
 263   2      
 264   2                                   }
 265   1      
 266   1            //  last_re_control=re_control;
 267   1      //遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控遥控
 268   1       ///////////////////////////////////////////////////////////////////////////////////////
 269   1      //强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制
 270   1      ////////////////////////////////////////////////////////////////////////////////////////
 271   1            if(force_flag==1){    //强制阶段号发生变化
 272   2               //     if(force_number!=last_forcenumber){
 273   2                           if(act_force==1){ //进入强制控制的第一秒
 274   3                                    act_force=0;
 275   3                                    if(clear_force==0){//绿灯阶段
 276   4                                             now_uncount =max_green_flash+max_red_clear+max_yellow+1;
 277   4                                                       }
 278   3                                            }else{
 279   3                                if(re_keep_force==1){//原阶段绿闪,黄灯清空时间后第一秒
 280   4                                         now_uncount=max_green_flash+max_red_clear+max_yellow+1;
 281   4                                       }else{
 282   4                                          if(step_counter!=force_number-1){
 283   5                                              now_uncount--;     //新的强制输入后,原阶段剩余时间继续减少
 284   5                                         }else{
 285   5                                            if(force_exe_flag==1){
 286   6                                                now_uncount =max_green_flash+max_red_clear+max_yellow+1;
 287   6                                                 force_exe_flag=0;
 288   6                                                                }
 289   5                                                             }
 290   4                                                        }
 291   3                                                  }
 292   2                                                }else{ //无强制状态下
 293   2                                      if(re_control!=1){
 294   3                                                        now_uncount=XBYTE[baseaddr_now_schemesch+8+step_counter]
             --now_step_key;
 295   3                                                        }
 296   2                                      if((re_control!=1)&&(exit_remote==1)){
 297   3                                                                            now_uncount=max_green_flash+max_red_
C51 COMPILER V6.02  SECOND                                                                 08/02/2006 15:11:10 PAGE 6   

             -clear+max_yellow+1-now_step_key;
 298   3                                                                            }
 299   2                                      //now_uncount=XBYTE[baseaddr_now_schemesch+8+step_counter]-now_step_key;
 300   2                                      //  if((re_control!=1)&&(last_force_flag==0))now_uncount=max_green_flash+m
             -ax_red_clear+max_yellow+1;
 301   2                                                    if((force_flag==0)&&last_force_flag==1){//遥控状态返回自动
 302   3                                                    now_uncount=max_green_flash+max_red_clear+max_yellow+1;
 303   3                                                    now_step_key=0;
 304   3                                                                         }
 305   2      
 306   2                                                      }
 307   1                            // }
 308   1              if((re_control!=1)&&(last_re_control==1)){
 309   2                                                     now_uncount=max_green_flash+max_red_clear+max_yellow+1;
 310   2                                                     exit_remote=1;
 311   2                                                     }
 312   1              last_force_flag=force_flag;
 313   1              last_re_control=re_control;
 314   1      //强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制
 315   1      ////////////////////////////////////////////////////////////////////////////////////////
 316   1          if(sensor_step[step_counter]==0)                   //阶段为固定配时
 317   1            {
 318   2      
 319   2      
 320   2              for(i=0; i<16; i++)                             //此循环用于查找当前阶段用到的相位
 321   2             {
 322   3      
 323   3                toto = 0x0001;
 324   3                toto = toto<<i;
 325   3      
 326   3                now_phase_temp = toto&inuse_phase[step_counter];
 327   3                if(re_control==1&&step_counter!=reph_number-1)//遥控响应尚未开始执行
 328   3                      now_phase_tempn = toto&inuse_phasen[reph_number-1];
 329   3                else if(force_flag==1&&step_counter!=force_number-1)//遥控响应尚未开始执行
 330   3                      now_phase_tempn = toto&inuse_phasen[force_number-1];
 331   3                else
 332   3                      now_phase_tempn = toto&inuse_phasen[step_counter];
 333   3                if(now_phase_temp!=0)
 334   3                {
 335   4                   now_lamp_temp = XBYTE[baseaddr_now_phasesch+18*i];
 336   4                   now_lamp_temp = now_lamp_temp<<8;
 337   4                   now_lamp = now_lamp_temp|XBYTE[baseaddr_now_phasesch+18*i+1];
 338   4                   if(now_uncount>red_yellow_green_clear[i])    //当前倒计时处于绿灯时间范围内
 339   4      
 340   4                  // step_uncount[4][16]:当前阶段的剩余时间累计,全红时间,黄灯时间,绿闪时间,绿灯时间
 341   4                   {
 342   5                     clear_flag=0;     //不处于清空时间
 343   5                     clear_force=0;
 344   5                     now_phase_status = now_phase_status|now_phase_temp;
 345   5                     now_step_uncount = now_uncount-red_yellow_clear[i];   //非行人相位   不是行人相位
 346   5                     //当前绿灯的倒计时
 347   5                      for(j=0; j<16; j++)                   //此循环用于查找当前相位用到的灯组
 348   5                      {
 349   6                         toto1 = 0x0001;
 350   6                         toto1 = toto1<<j;
 351   6                         inuse_lamp_temp =  toto1&now_lamp;
 352   6                         if(inuse_lamp_temp!=0)
 353   6                         {
 354   7                             lamp_state[j]=1;   /*当前阶段用的灯组置成绿色*/
 355   7                         }
 356   6                      }
 357   5      
C51 COMPILER V6.02  SECOND                                                                 08/02/2006 15:11:10 PAGE 7   

 358   5                   }
 359   4                   else if(now_uncount>=red_yellow_clear[i]) /*当前阶段处于绿闪*/
 360   4                   {
 361   5                      clear_flag=1;
 362   5                      clear_force=1;
 363   5                      now_step_uncount = now_uncount-red_yellow_clear[i];
 364   5      
 365   5                      for(j=0; j<16; j++)
 366   5                      {
 367   6                         toto1 = 0x0001;
 368   6                         toto1 = toto1<<j;
 369   6                         inuse_lamp_temp =  toto1&now_lamp;
 370   6                         if(inuse_lamp_temp!=0)
 371   6                         {
 372   7                             lamp_state[j]=2;         /*当前阶段用的灯组置成绿闪*/
 373   7                             if(now_phase_tempn!=0)
 374   7                                lamp_state[j]=1;      /*下一阶段用的灯组仍置成绿色*/
 375   7                         }
 376   6                      }
 377   5                   }
 378   4                   else if(now_uncount<red_yellow_clear[i]&&now_uncount>=red_clear[i])
 379   4                   {
 380   5                      clear_flag=1;
 381   5                      clear_force=1;
 382   5                      if(now_phase_tempn==0)
 383   5                      now_phase_status = now_phase_status&(~now_phase_temp);
 384   5                      now_step_uncount = now_uncount-red_clear[i];
 385   5                          //now_uncount:当前阶段的倒计时 now_step_uncount:当前绿灯的倒计时
 386   5      
 387   5                      for(j=0; j<16; j++)
 388   5                      {
 389   6                         toto1 = 0x0001;
 390   6                         toto1 = toto1<<j;
 391   6                         inuse_lamp_temp =  toto1&now_lamp;
 392   6                         if(inuse_lamp_temp!=0)
 393   6                         {
 394   7                            // if(now_uncount>red_clear[i])
 395   7                             {
 396   8                                 lamp_state[j]=3;         /*当前阶段用的灯组置成黄色*/
 397   8                                 if((XBYTE[baseaddr_now_phasesch+18*i+2]&0x04)==0x04)
 398   8                                   lamp_state[j]=4;       /*灯组是行人灯组,在黄灯期间置红色*/
 399   8                             }
 400   7                             if(now_phase_tempn!=0)
 401   7                                lamp_state[j]=1;          /*下一阶段用的灯组仍置成绿色*/
 402   7                         }
 403   6                      }
 404   5                   }
 405   4               else if(now_uncount<red_clear[i]) //当前倒计时处于全红时间范围内

⌨️ 快捷键说明

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