Справочници, схемотехника, теория > Програмиране на микроконтролери, програматори, цифрови проекти
LED_Display_Dinamic STM32
(1/1)
EDM electronics:
Вчера докато си почивах, написах една библиотека за LED-динамична индикация с 3 бр. 7-сегментни индикатора за STM32. Използват се 11 пина - 7 за сегментите и 1 за точката и 3 за анодите.
Има готови дисплеи с последователни регистри тип SPI, но целта на занятието е, когато се пести от към излишни елементи и има доста свободни изводи на контролера. Индикатора се връзва директно на пиновете на контролера.
Примера на видеото е с най-малкия учебен контролер STM32F103C8T6, който има над 32 използваеми пина. Индикацията е динамична, т.е. 3-те индикатора бягат с около 5 mS. Добре светят и при 1 mS.
Кръговия брояч е направен със софтуерен таймер на библиотека HAL с функцията HAL_GetTick(), която е еквивалента на millis() при Ардуино, не съм ползвал апаратен, защото е много по-лесно и универсално.
Библиотеката е универсална и може да се ползва на абсолютно всички контролери STM32, като единствено се запишат в хедер-файла кои пинове и кои портове се ползват - никакви други настройки не са нужни. Във видеото е видно как се наименуват пиновете.
Всички комутации на изходите са направени с битова маска за всеки отделен пин, не порт и по този начин е достатъчно да се именува който и да е пин на контролера, да се разменят места за удобство, това няма да има нужда на преправяне на библиотеката.
Основните функции са две: 1. за изписване на число int до 999 с ограничител и 2. изписване на масив от 3 отделни символа.
Ако има интерес, мога да споделя и библиотеката.
https://www.youtube.com/v/FrRY-pifbtM
--- Код: ---//Функции за използване в main() loop
//================================================================
void LED_Display_Init(void); //функция за иницииране на дисплея в satup
void LED_brightness(uint16_t value); //функция яркост на дисплея от 1-10
void LED_Clear(void); //функция за изчистване на дисплея - не свети
void LED_Display_int(uint16_t IntVal, uint8_t point); //функция за изписване на число uint16_t
void LED_Display_masiv(uint8_t mas3, uint8_t mas2, uint8_t mas1); //функция за масив от 3 символа
//================================================================
--- Край на кода ---
Ksurnev:
ЕДМ, тук се вижда по-добре.
https://www.youtube.com/watch?v=FrRY-pifbtM
Навигация
[0] Списък на темите
Премини на пълна версия