Библиотека для работы с семисегментными индикаторами

Views: 4360


Библиотека предназначена для работы с семисегментными индикаторами с разрядностью от 2 до 4. Можно управлять индикаторами как с общим катодом, так и общим анодом. Выводить на индикатор цифры и разнообразные символы, которые можно отобразить на семисегментных матрицах.

Расположение разрядов для понимания работы с библиотекой

digit

 

разряд нумеруются слева на право, для физической развертки. Т.е. когда идет понятие записи в разряд 1 это понимается крайний слева. Если используется три или два разряда, то соответственно отключается 4 или 4 и 3 разряды. Библиотека предназначена для индикаторов которые непосредственно подключаются к портам PIC-контроллера, поэтому можно использовать индикаторы как с общим катодом так и с общим анодом.

Общий катод (минус)

Common_Cathode

Общий анод (плюс)

Common_AnodeКак уже у поминалось количество разрядов управления от 2 до 4.

Основная проблема в подключении библиотеки в программе это надо в файле indic_4led.h указать к каким ножкам контроллера подключаются выводы индикатора и при необходимости переназначить порты, а также указать индикатор с общим анодом или катодом. Также через библиотеку осуществляется управления сигналами внешних устройств (например, управление реле).

Для наглядного понимания приведем подключение через библиотеку к контроллеру PIC16F1829 по схеме платы ch-4000. Схема для часов кухонного таймера.

ch-c4030-clock_02

 Для настройки используют следующие места в библиотеки, файл 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

Библиотека работы с семисегментными индикаторами ...
Login Required Message:

Библиотека v5.00

Значок

Библиотека для работы с семисегментными индикаторами v 5.0 9.27 KB 343 downloads

Библиотека для работы с семисегментными индикаторами...



Это может быть интересно


  • Altium Designer – подготовка документации для производства и сборки печатных платAltium Designer – подготовка документации для производства и сборки печатных плат
    Views: 3893 В процессе освоения Altium Designer много возникает вопросов по подготовке документации для производства плат, а также для её сборки. Altium Designer позволяет сделать все требуемые документы, хотя скажем …
  • Проблемы классической светомузыкиПроблемы классической светомузыки
    Views: 2145 Светомузыка – что это такое? Определение: Светомузыка  (жаргонное: цветомузыка)  — вид искусства, основанный на способности человека ассоциировать звуковые ощущения со световыми восприятиями. Такое явление в неврологии получило название …
  • Toyota Auto Fader – Модуль включения усилителяToyota Auto Fader – Модуль включения усилителя
    Views: 2057 Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить …
  • Ссылки на интересные источникиСсылки на интересные источники
    Views: 915 Сбор 3D моделей от André L’Hérault конденсаторы, резисторы, индуктивности dropbox IPC-SM-782 Surface Mount Design and Land Pattern Standard Видео уроки по Altium designer Alexey Sabunin https://www.youtube.com/channel/UCG7N5CqXpyK8nQjr1EmMgng Сергей Булавинов https://www.youtube.com/channel/UCISAMXRnN_Qw9UTjUwZI1Jw Robert Feranec https://www.youtube.com/user/matarofe …
  • Простой сенсорный регулятор светаПростой сенсорный регулятор света
    Views: 2473 Простой сенсорный регулятор. Проект – 2007 года. Регулятор выполнена на микроконтроллере PIC12F683 и имеет минимальное количество элементов. Выполняет стандартные функции, включение выключение света, изменение яркости, запоминание последнего установленного уровня …
  • Проект с использованием MCC часть 12-2Проект с использованием MCC часть 12-2
    Views: 1126 Настало время для изучения шины I2C. Изучать будем на примере работы с индикатором RET012864E. Что изменили со старой схемы: В прошлой теме я затупил и не добавил подтягивающие резисторы …
  • PIC18 – модуль DMAPIC18 – модуль DMA
    Views: 1284 Введение   Модуль прямого доступа к памяти (DMA) предназначен для обслуживания передачи данных непосредственно между различными областями памяти без вмешательства процессора. Исключив при этом необходимость в интенсивной  обработки …
  • MPLAB® Code ConfiguratorMPLAB® Code Configurator
    Views: 1788 MPLAB ® Code конфигуратор (MCC) является свободно распространяемым плагином, это графическая среда программирования, которая генерирует бесшовный, легкий для понимания кода на Cи, чтобы вставить его в свой проект.
  • Регулятор влажностиРегулятор влажности
    Views: 1337 Регулятор ILLISSI-CH-1000 предназначен для контроля и регулировки относительной влажности в диапазоне от 0 до 100%. Регулятор позволяет работать как в режиме осушения, так и увлажнения. Для измерения возможно …
  • Цифровой тахометр для автомобиля CH-С3300Цифровой тахометр для автомобиля CH-С3300
    Views: 1979  Тахометр Ch-С3300 предназначен для индикации и контроля оборотов, времени работы и максимальных оборотов развиваемых двигателем во время поездки. Датчиком может использоваться как обычный контактный прерыватель или выход датчика …



Поделись этим!