📄 secondccc
字号:
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 + -