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