标签:不为 flag stat 重复 区间 cto void 就是 ati
void Breathe_LED(void);
// 定时器4中断(1ms)
#pragma vector = TIM4_UIF_vector
__interrupt void TIM4_OVF_IRQHandler(void) 	
{
	
    if( ++sG_CurTime.ms>=1000 )
    { 
        sG_CurTime.ms = 0;
        
        sG_CurTime.secFlag = 0xFF;
        
        sG_CurTime.second++;
        if (sG_CurTime.second >= 60)
        {
            sG_CurTime.second -= 60;
        }
     }
	Breathe_LED();
	TIM4_SR1 = 0xFE; 
}
void Breathe_LED(void) 
{
  
 static u16 X = 1000;    
 u8 cnt = 8; 
 
// 对3取余:结果只能是0 1 2 
  if((sG_CurTime.second %3) != 0) 
  {
        if( (sG_CurTime.second  % 3 ) & 0x1 == 1)   // Z和0x00000001与,是1,也就是说Z的最低位是1,当前是奇数秒。
        {
X--; // PWM值递减
TIM3_CCR1H = ((X/cnt) & 0xFF00 )>>8;
                      TIM3_CCR1L = (X/cnt) & 0xFF;
              // 小技巧:把这里的PWM递减值,分为1000/8 = 125个档位区间.这里X=1000与X= 999,最终对应板子输出的PWM值是一样的
                      TIM2_CCR1H = ((X/cnt) & 0xFF00 )>>8; 	  
                      TIM2_CCR1L = (X/cnt) & 0xFF;
                      
                      TIM2_CCR2H = ((X/cnt) & 0xFF00 )>>8; 	  
                      TIM2_CCR2L = (X/cnt) & 0xFF;
      
        }                                                      
        else if( (sG_CurTime.second  % 3 ) & 0x1 == 0) // 只要Z是偶数,都满足Z&0x00000001 =0。但是这里还有一个前提条件,Z不是3的整数倍。
        {
		TIM3_CCR1H = 0x00;	  
		TIM3_CCR1L = 0x00;
	
		TIM2_CCR1H = 0x00;	  		
		TIM2_CCR1L = 0x00; 
		
		TIM2_CCR2H = 0x00;	  
		TIM2_CCR2L = 0x00;
             }
                
  } 
  else{  // Z是3的整数倍,跳到这里。
                      TIM3_CCR1H = ( (sG_CurTime.ms/cnt) & 0xFF00)>>8;	  
                      TIM3_CCR1L = (sG_CurTime.ms/cnt) & 0xFF;
              
                      TIM2_CCR1H = ( (sG_CurTime.ms/cnt) & 0xFF00)>>8;	  
                      TIM2_CCR1L = (sG_CurTime.ms/cnt) & 0xFF;
                      
                      TIM2_CCR2H = ( (sG_CurTime.ms/cnt) & 0xFF00)>>8;	  
                      TIM2_CCR2L = (sG_CurTime.ms/cnt) & 0xFF;
                      X = 1000; // 在奇数秒内 重复执行了 这里的代码,执行1000遍。 待会使用状态机, 脱离 奇数秒, 执行一遍即可。
  }
}
这里实现的一个逻辑功能可以归纳为:
对于一个整数Z,可以用一个整数Y对Z取余(余数为0是一种状态),得到0到Y-1, 然后可以在0到Y-1之间按照偶数奇数来进行区分(Z对Y的余数不为0,再把Z细分为奇数和偶数)。这样就可以得到三种状态。
Wireless_Sysnc_Spicke _XXX_BDWY_YYY
标签:不为 flag stat 重复 区间 cto void 就是 ati
原文地址:https://www.cnblogs.com/happybirthdaytoyou/p/10329876.html