变量CurrntStatus是从UART口收到的数据,假设第10s的时候收到的数据是0,则执行函数的最下面部分的falt_light函数,但是如果在第11秒执行falt_light函数的时候,从UART串口收到的数据是1,我想从falt_light跳出来,立即去执行CurrntStatus==1下面的指令,请问该怎么处理好呢?
void light_carmaker(){
int i =0 ;
if(Flag==1)
return;
if(CurrntStatus == 2){
ControlYellowLigh(); //控制和发送黄灯的状态
}
else if(CurrntStatus == 3){
GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8);
GPIO_SetBits(GPIOB,GPIO_Pin_6);//南北绿灯亮SN秒,东西红灯亮SN秒
GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB5是状态指示灯和南北绿灯的状态是一致的
delay_ms(1000);
}
else if(CurrntStatus == 1){
GPIO_ResetBits(GPIOB,GPIO_Pin_6);//关闭南北绿灯,东西红灯亮
GPIO_ResetBits(GPIOB,GPIO_Pin_5);//状态指示灯LED2和南北的绿灯亮灭保持一致
GPIO_ResetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);//给高电平,关其他方向的灯
GPIO_SetBits(GPIOB,GPIO_Pin_8); //东西绿灯亮EW秒,南北红灯亮EW秒
delay_ms(1000);
}
else if(CurrntStatus == 0){
falt_light();
}
}
void falt_light(){
//PB6连接的是南北绿东西红灯 PB7接的是黄灯 PB8接的是南北红东西绿灯
GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8);//给高电平,关其他方向的灯
GPIO_ResetBits(GPIOB,GPIO_Pin_5); //先让状态指示灯灭
snblu1=5;
ewblu1=5;
path = 0;
w = 0;
for(i=1;i<=snblu1;i++)
{
if(Flag==1)
return;
GPIO_SetBits(GPIOB,GPIO_Pin_6);//南北绿灯亮SN秒,东西红灯亮SN秒
GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB5是状态指示灯和南北绿灯的状态是一致的
if(Flag==1)
return;
delay_ms(1000); //延时1s
}
if(Flag==1)
return;
GPIO_ResetBits(GPIOB,GPIO_Pin_6);//关闭南北绿灯,东西红灯亮
GPIO_ResetBits(GPIOB,GPIO_Pin_5);//状态指示灯LED2和南北的绿灯亮灭保持一致
GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_6);//给高电平,关其他方向的灯
for(i=1;i<=ewblu1;i++)
{
if(Flag==1)
return;
GPIO_SetBits(GPIOB,GPIO_Pin_8); //东西绿灯亮EW秒,南北红灯亮EW秒
if(Flag==1)
return;
delay_ms(1000);
}
GPIO_ResetBits(GPIOB,GPIO_Pin_8);//灭东西绿灯
} |