2017-08-28 56 views
1

我在编程四段七段显示器时遇到问题。我不知道如何让所有的多路复用字符闪烁。 我编程在CooCoxstm32F4七段显示器

多路复用码(中断):

void TIM2_IRQHandler(){ 
    if (TIM_GetITStatus(TIM2,TIM_IT_Update)) { 
     TIM_ClearITPendingBit(TIM2,TIM_IT_Update); 
     GPIO_ResetBits(GPIOC,15); //turn off all display cells 
     switch (disp) { 
      case 1: 
       decodeCharacters(digits[(alarm.RTC_AlarmTime.RTC_Minutes-time.RTC_Minutes)%10]); //called method decoding chars 
       break; 
      case 2: 
       decodeCharacters(digits[(alarm.RTC_AlarmTime.RTC_Seconds-time.RTC_Seconds)/10]); 
       break; 
      case 3: 
       decodeCharacters(digits[(alarm.RTC_AlarmTime.RTC_Seconds-time.RTC_Seconds)%10]); 
       break; 
      default: 
       decodeCharacters(digits[(alarm.RTC_AlarmTime.RTC_Minutes-time.RTC_Minutes)/10]); 
       break; 
     } 
     GPIO_ToggleBits(GPIOC,1<<disp); //turn on display cell 
     disp = (disp+1)%4; 
    } 
} 

其中 “DISP” 是无符号整数。

+1

这只是I/O。将引脚设置为高或低。 – Lundin

回答

0

据我所知,你有一个代码显示时间,你想让你的数字闪烁。

你需要做的第一件事是检查你的中断处理程序发生的频率。然后在这个处理程序中你可以创建一个静态变量来计算时间,例如

static unsigned int blinkCounter = 0; 

if(blinkCounter < 500) 
{ 
    /* Turn off the display */ 
} 
else 
{ 
    /* Most of your current handler code */ 
} 

if(blinkCounter > 1000) 
{ 
    blinkCounter = 0; 
} 

blinkCounter++; 
+0

好的,如果我只想让一些数字闪烁,该怎么办? –

+0

最重要的是了解当前的代码。在每次中断呼叫中,只更新一位数字。如果您只想将这些数字中的一部分数字化,您可以将您的开关分成两个开关:第一个开关位于上面代码中的“其他”(闪烁部分)内,第二个开关位于该条件外。 – Mikolaj