📄 second.lst
字号:
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 + -