[KL25Z] 7seg multiplex

Tu możesz pisać o swoich problemach z pisaniem programów w języku C/C++ dla ARM Freescale.
Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1125
Rejestracja: czwartek 03 wrz 2015, 22:02

[KL25Z] 7seg multiplex

Postautor: Antystatyczny » niedziela 10 kwie 2016, 01:00

Witam serdecznie

Napisałem dzisiaj sofcik do sterowania 7 segmentowym wyświetlaczem diodowym ze wspólną anodą. Wykorzystanie wygląda następująco:

Kod: Zaznacz cały

/**
*****************************************************************************
**
**  File        : main.c
**
**  Abstract    : main function.
**
**  Functions   : main
**
**  Environment : Atollic TrueSTUDIO(R)
**
**  Distribution: The file is distributed "as is", without any warranty
**                of any kind.
**
**  (c)Copyright Atollic AB.
**  You may use this file as-is or modify it according to the needs of your
**  project. This file may only be built (assembled or compiled and linked)
**  using the Atollic TrueSTUDIO(R) product. The use of this file together
**  with other tools than Atollic TrueSTUDIO(R) is not permitted.
**
*****************************************************************************
*/
#include <stdbool.h>
#include "mcu.h"
#include "ledmux/ledmux.h"

void SysTick_Handler(void);

volatile int timer100Hz;//timer programowy

int cnt;//jakis tam przykladowy licznik

int main(void)
{
   SysTick_Config(SystemCoreClock/100);//niech systick generuje przerwanie co 10ms
   
   ledmuxInit();//inicjalizacja multipleksu

   __enable_irq();//upewniam sie, ze przerwania sa wlaczone
   while (true)
    {
      if(!timer100Hz)//co 100ms inkrementuj licznik
      {
         if(++cnt > 9999)//zapetlam do 9999
         {
            cnt = 0;
         }

         ledmuxSetValue(0, (cnt%10));//ustawiam skrajnie prawa cyfre
         ledmuxSetValue(1, (cnt/10)%10);
         ledmuxSetValue(2, (cnt/100)%10);
         ledmuxSetValue(3, (cnt/1000));//ustawiam skrajnie lewa cyfre

         timer100Hz = 9;//nakrecam timer na 100ms
      }
    }
}

void SysTick_Handler(void)//obsluga przerwania  od systicka
{
   if(timer100Hz) timer100Hz--;
}


Jak widać obsługa jest bananalna... Jak i sam programik, no ale może komuś się przyda. Całość napisałem w Atollic True Studio. Zamieszczam również kompletny projekt dla tego IDE.

KL25Z_ledmux.zip


Aha, w pliku ledmux.h można sobie dowolnie przyporządkować piny sterujące wyświetlaczem.

Pozdrawiam.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Wróć do „Programowanie ARM Freescale w C/C++”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 0 gości