Views: 4461
Библиотека предназначена для работы с семисегментными индикаторами с разрядностью от 2 до 4. Можно управлять индикаторами как с общим катодом, так и общим анодом. Выводить на индикатор цифры и разнообразные символы, которые можно отобразить на семисегментных матрицах.
Расположение разрядов для понимания работы с библиотекой
разряд нумеруются слева на право, для физической развертки. Т.е. когда идет понятие записи в разряд 1 это понимается крайний слева. Если используется три или два разряда, то соответственно отключается 4 или 4 и 3 разряды. Библиотека предназначена для индикаторов которые непосредственно подключаются к портам PIC-контроллера, поэтому можно использовать индикаторы как с общим катодом так и с общим анодом.
Общий катод (минус)
Общий анод (плюс)
Как уже у поминалось количество разрядов управления от 2 до 4.
Основная проблема в подключении библиотеки в программе это надо в файле indic_4led.h указать к каким ножкам контроллера подключаются выводы индикатора и при необходимости переназначить порты, а также указать индикатор с общим анодом или катодом. Также через библиотеку осуществляется управления сигналами внешних устройств (например, управление реле).
Для наглядного понимания приведем подключение через библиотеку к контроллеру PIC16F1829 по схеме платы ch-4000. Схема для часов кухонного таймера.
Для настройки используют следующие места в библиотеки, файл indic_4led.h.
// маски управления портами // настройка портов связанных с сегментами индикатора // предназначены для очистки данных // установить биты в 0 #ifdef CATOD #define SEGPA 0b11111100 // |+-- сегмент А // +--- сегмент B #define SEGPB 0b00001111 // |||+------ сегмент C // ||+------- сегмент D // |+-------- сегмент E // +--------- сегмент F #define SEGPC 0b00111111 // |+-------- сегмент H // +--------- сегмент G #else // установить биты в 1 #define SEGPA 0b00000011 // |+-- сегмент А // +--- сегмент B #define SEGPB 0b11110000 // |||+------ сегмент C // ||+------- сегмент D // |+-------- сегмент E // +--------- сегмент F #define SEGPC 0b11000000 // |+-------- сегмент H // +--------- сегмент G #endif//
и
// настройка портов связанных с управляющими разрядами индикатора #ifdef CATOD // устанавливаем значение порта управления в отключенном сотоянии // установить биты в 1 для Катода // установить биты в 0 для Анода // неиспользуеиые порты закоментировать // порт А #define OBSPA 0b00000000 // // порт В #define OBSPB 0b00000000 // порт C #define OBSPC 0b00001111 // // |||+------- разряд R1 // ||+-------- разряд R2 // |+--------- разряд R3 // +---------- разряд R4 #else // порт А #define OBSPA 0b11111111 // // порт В #define OBSPB 0b11111111 // порт C #define OBSPC 0b11110000 // // |||+------- разряд R1 // ||+-------- разряд R2 // |+--------- разряд R3 // +---------- разряд R4 #endif//
описание портов индикации управление сегментами и разрядами индикатора, 1 – обозначение разряда
#ifdef CATOD #define S_A d_PORTA |= 0b00000001 // segment А #define S_B d_PORTA |= 0b00000010 // segment B #define S_C d_PORTB |= 0b00010000 // segment C #define S_D d_PORTB |= 0b00100000 // segment D #define S_E d_PORTB |= 0b01000000 // segment E #define S_F d_PORTB |= 0b10000000 // segment F #define S_G d_PORTC |= 0b10000000 // segment G #define S_H d_PORTC |= 0b01000000 // segment H #define R1 d_PORTC &= 0b11111110 // управляющий бит первого знакоместа //control bit in the first familiarity #define R2 d_PORTC &= 0b11111101 // управляющий бит второго знакоместа //second control bit familiarity #define R3 d_PORTC &= 0b11111011 // управляющий бит третьего знакоместа // control bit third familiarity #define R4 d_PORTC &= 0b11110111 // управляющий бит четвертого знакоместа // control bit of the fourth familiarity #else #define S_A d_PORTA &= 0b11111110 // segment А #define S_B d_PORTA &= 0b11111101 // segment B #define S_C d_PORTB &= 0b11101111 // segment C #define S_D d_PORTB &= 0b11011111 // segment D #define S_E d_PORTB &= 0b10111111 // segment E #define S_F d_PORTB &= 0b01111111 // segment F #define S_G d_PORTC &= 0b01111111 // segment G #define S_H d_PORTC &= 0b10111111 // segment H #define R1 d_PORTC |= 0b00000001 // управляющий бит первого знакоместа //control bit in the first familiarity #define R2 d_PORTC |= 0b00000010 // управляющий бит второго знакоместа //second control bit familiarity #define R3 d_PORTC |= 0b00000100 // управляющий бит третьего знакоместа // control bit third familiarity #define R4 d_PORTC |= 0b00001000 // управляющий бит четвертого знакоместа // control bit of the fourth familiarity #endif//
ну и при необходимости описание выход управления исполнительными устройствами (например, реле)
// описание выходов на реле // включение реле #define UP1on d_PORTC |= 0b00010000 // реле1 #define UP2on d_PORTC |= 0b00100000 // реле2 //#define UP3on d_PORTA |= 0b00010000 // реле3 //#define UP4on d_PORTA |= 0b00100000 // реле4 //#define UP5on d_PORTC |= 0b00000010 // реле5 // выключение реле #define UP1of d_PORTC &= 0b11101111 // реле1 #define UP2of d_PORTC &= 0b11011111 // реле2 //#define UP3of d_PORTA &= 0b11101111 // реле3 //#define UP4of d_PORTA &= 0b11011111 // реле4 //#define UP5of d_PORTC &= 0b11111101 // реле4
Функция индикации необходимо поместить в функцию прерывания с периодом ~ 200-400 Гц, в зависимости от количества индикаторов.
void indic(void);
Функции для преобразование чисел
выходные данные переменные tysc, sotn, dest, edin – символы индикации
Преобразование 16 бит двоичного числа в десятичное со знаком (диапазон 9999 до -999)
void bin_dec (int chisloin,char nul,char des);
Преобразование 16 бит в 4 HEX
void bin_HEX (unsigned int chisloin, char point);
Функции вывода буфера на индикатор для использования этих функций надо предварительно загрузить буфер indb[]
indb[0]=simbol;
indb[1]=simbol;
indb[2]=simbol;
indb[3]=simbol;
void imposeL(void); // наложение справа налево
void imposeR(void); // наложение слева направо
void go_down(void); // выезд буфера снизу вверх – идём вниз
void go_up(void); // выезд буфера сверху вниз – идем вверх
void go_left(void); // выезд буфера слево на право – идем налево
void go_right(void); // выезд буфера справо налево – идем направо
void bigstroka(const char *str);//бегущая строка справа налево
void go_down_counr(void); //счетчик с анимацией увеличение счета
void go_up_counr(void); //счетчик с анимацией уменьшение счета
вспомогательные функции
pomt – задержка
void ochisR (char pomt); //очистка индикатора вправо
void ochisL (char pomt); //очистка индикатора влево
void zaderj (char dlit); //задержка индикации
функция универсальной загрузки индикатора
buf1-buf4 регистры индикатора или буфера
nazn – тип индикации
0 – загрузка на индикатор
1 – двигаемся вверх go_up()
2 – двигаемся вниз go_down()
3 – двигаемся влево go_left()
4 – двигаемся вправо go_right()
5 – накат влево imposeL()
6 – накат вправо imposeR()
void loading(char buf1, char buf2, char buf3, char buf4, char nazn);
более тяжелая версия (съедает дополнительно 0.6 кБ памяти)
nazn – тип индикации
0 – загрузка на индикатор
1 – двигаемся вверх go_up()
2 – двигаемся вниз go_down()
3 – двигаемся влево go_left()
4 – двигаемся вправо go_right()
5 – накат влево imposeL()
6 – накат вправо imposeR()
7 – декоративный счетчик go_down_counr()
8 – декоративный счетчик go_up_counr()
void loadingD(char buf1, char buf2, char buf3, char buf4, char nazn);
Версия v5.0 добавлена функция регулировки яркости дисплея. количество ступеней задается константой MAXYAR (по умолчанию 10), переменной yarcost – задается текущая яркость. Частоту развертки надо задавать в зависимости от количества разрядов и константы яркости:
Частота индикации = 100 Гц * количество разрядов * MAXYAR.
Пример функции прерывания (компилятор XC8) для формирования индикации
//--------------------------------------------------------------------
// прерывания //interrupt
void interrupt my_isr(void) //
{
TMR0L=61; // инициализация таймера
TMR0IF=0; // сбросить флаг прерывания от таймера TMR0
//----------------------------------------------
//период 400 Hz start
indic(); // индикация //indication
//----------------------------------------------
//----------------------------------------------
if(--tim10gc==0)
{
tim10gc=40;
// период 10 Гц.------------------------
//--------end period 10 Hz.-----------------------------
if(--tim2gc==0)
{
tim2gc=5;
// period 2 герц.-------------------
//-----флаг мигания (для индикатора-------------------------
B_MIG = !B_MIG; //флаг мигания :)
//--------end period 2 Hz.-----------------------------
if(--tim1sek==0)
{
tim1sek=2;
// period 1 sec.-------------------
second--;
//--------end period 1 sec.-----------------------------
}//--------end period 1 sec.-----------------------------
}//--------end period 2 Hz.-----------------------------
}//--------end period 10 Hz.-----------------------------
}//end_interrupt----------------------------------------------------------------
Все вопросы задавайте в https://t.me/Catcatcat_electronics.
Демонстрация работы
Библиотека v4.10
Библиотека работы с семисегментными индикаторами 9.18 KB 89 downloads
Библиотека работы с семисегментными индикаторами ...Библиотека v5.00
Библиотека для работы с семисегментными индикаторами v 5.0 9.27 KB 345 downloads
Библиотека для работы с семисегментными индикаторами...Это может быть интересно
Дисплей KD035C-3A подключение и управлениеViews: 849 Дисплей KD035C-3A производиться компанией SHENZHEN STARTEK ELECTRONIC TECHNOLOGY CO.,LTD Характеристики Параметр Спецификация Единицы измерения Размер дисплея 70.08(H)*52.56(V) (3.5inch) mm Тип дисплея TFT active matrix Цветовая гамма 65K/262K colors Разрешение …
Сенсорный выключатель светаViews: 16536 Хотя в настоящий момент актуальны системы управления освещением с передачей данных по электросети, но я думаю, что проекты такого рода тоже имеют право на жизнь. Анонс Три вида …
УКВ – радиоприем, часть 1Views: 9819 Музыкальная тема к статье, слушаем: Первый мой радиоприемник, выглядел так. Использовал исключительно в школе на уроках, держась за одно ухо и преданно смотря на училку и сладко улыбаясь. …
REFERENCE CLOCK OUTPUT MODULEViews: 601 REFERENCE CLOCK OUTPUT MODULE Модуль формирования опорного тактового сигнала Модуль опорного тактового сигнала обеспечивает возможность посылать сигнал синхронизации на тактовый опорный выходной контакт или контакты (CLKR) в зависимости от …
Светодиоды со встроенным драйвером WS2812BViews: 1046 Производитель http://www.world-semi.com Краткое описание продукции фирмы Каталог продукции” catcatcat_ws_19 catcatcat_ws_15 catcatcat_ws_11 catcatcat_ws_07 catcatcat_ws_03 catcatcat_ws_18 catcatcat_ws_14 catcatcat_ws_10 catcatcat_ws_06 catcatcat_ws_02 catcatcat_ws_05 catcatcat_ws_09 catcatcat_ws_13 catcatcat_ws_17 catcatcat_ws_16 catcatcat_ws_12 catcatcat_ws_08 catcatcat_ws_04 catcatcat_ws_01 This jQuery …
Простой цифровой регулятор мощностиViews: 7783 Простой регулятор мощности с цифровой индикацией. Этот проект создан как обучающий, для ознакомления с основами построения сетевых регуляторов мощности. Устройства подобного типа можно использовать для управления освещением, скоростью …
LED модуль P10 (1R) V706AViews: 7973 Это еще одно чудо от китайского брата. Это монохромные матрицы, называются они P10 (1R) V706A, ну типа R-красные, но не верьте паяют светики и зеленые и синие, в общем …
Оптосимистор и его применениеViews: 20209 Эрве Кадино “Цветомузыкальные установки” Ответ на вопрос – управление мощным тиристором или симистором, от терморегулятора. Статья в pdf[wpdm_file id=129 template=”link-template-calltoaction3.php”] Оптосимистор принадлежат к классу оптронов и обеспечивают очень хорошую …
Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.04Views: 431 Смотри как установить и подключить библиотеку тут. V. – 23_04 – Component Database Update. – configuration file name – DXPPreferences1.DXPPrf. – Added two projects for audio amplifier …
Проект с использованием MCC часть 07Views: 1221 Модуль PWM – широтно импульсная модуляция (ШИМ). ПИК контроллеры часто на борту имеют модули ШИМ. На их основе строятся многие узлы управления электро приводами. В нашем варианте мы …


