stm32F4 7-сегментный дисплей

У меня проблема с программированием четырехъядерного дисплея. Я не знаю, как заставить мигать все мультиплексированные символы. Я программирую в CooCox

мультиплексный код (прерывание):

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 ответ

Решение

Я понимаю, что у вас есть код, который отображает время, и вы хотите, чтобы ваши цифры мигали.

Первое, что вам нужно сделать, это проверить, как часто происходит ваш обработчик прерываний. Затем внутри этого обработчика вы можете создать статическую переменную, которая будет считать время, например

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++;
Другие вопросы по тегам