2017-08-28 102 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