变量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);//灭东西绿灯
- }
本帖最后由 青城山下 于 2018-1-22 18:24 编辑