Автогенератор кода для семисегментных индикаторов

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
MechanicCDRR
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн сен 27, 2010 22:38:52

Автогенератор кода для семисегментных индикаторов

Сообщение MechanicCDRR »

Вчера надоело в очередной раз пересчитывать коды для символов семисегментника (в связи с очередной другой схемой с нестандартным подключением) и написал программу, предназначенную для облегчения этого процесса.
...
Теперь вот.. то ли поделится, то ли похвастаться... (совсем чуть-чуть, ведь тут хоть есть те, кто поймут о чем речь. Не жене ведь хвастаться.. :) ) но в основном спросить - встречал ли кто похожее. Или я опять, как всегда "изобрел" никому не нужный велосипед :)
А форум Радиокота мной часто читаем (в основном только читаем) и очень уважаем, поэтому мнение тутошних уважаемых котов мне будет знать весьма ценно.

http://luckytech.ru/Uploads/7sgLED.zip

А это краткое описание.

Вчитывался в названия разделов форума - этот показался наиболее подходящим. Если же не туда - прошу больно когтями не царапать...
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3780
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: Автогенератор кода для семисегментных индикаторов

Сообщение Ser60 »

Полезная програмка. Я раньше для себя тоже что-то подобное делал. Но Ваша более красивая.
http://mcs.uwsuper.edu/sb/Electronics/7seg.html
Аватара пользователя
Котяра
Открыл глаза
Сообщения: 53
Зарегистрирован: Пт сен 08, 2006 01:06:13

Re: Автогенератор кода для семисегментных индикаторов

Сообщение Котяра »

Позволю и себе тихонько мяукнуть: очень, очень пребета для вычисления кодов семисегментных индикаторов. Пока реализована только основная функциональность. Генерируются коды HEX DEC BIN для индикаторов с ОК и ОА. Предусмотрена возможность подключения к одному порту нескольких сегментов для генерации ограниченного набора символов, напр. 0 и 1. В таком случае сегменты b и c подключаются, скажем, к порту 0, а сегменты a d e f к порту 1, остальные сегменты назначаются на неиспользуемый порт контроллера.
Сильно не пинайте - сам ни разу не программер.
Вложения
7LED_Calc.rar
(191.71 КБ) 382 скачивания
Все, что выходит из-под рук японца, будь то сковородная ручка или магнитофон, должно быть произведением искусства.
©Коносукэ Мацусита
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Автогенератор кода для семисегментных индикаторов

Сообщение otest »

Нормальная программа. Всё в ней есть на любой вкус.
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Re: Автогенератор кода для семисегментных индикаторов

Сообщение shads »

И чего я раньше не видел ваших программок......

А я так приспособился:

Код: Выделить всё

#define SegA (1<<6)                                /*подключение сегментов дисплея*/
#define SegB (1<<0)
#define SegC (1<<2)
#define SegD (1<<4)
#define SegE (1<<5)
#define SegF (1<<7)
#define SegG (1<<1)
#define SegH (1<<3)

char SimbMass [] PROGMEM = {                       //символьный массив (не используются K,M,W,X,Z)
    (SegA|SegB|SegC|SegD|SegE|SegF),            //0
    (SegB|SegC),                                //1
    (SegA|SegB|SegD|SegE|SegG),                    //2
    (SegA|SegB|SegC|SegD|SegG),                    //3    
    (SegB|SegC|SegF|SegG),                        //4
    (SegA|SegC|SegD|SegF|SegG),                    //5    
    (SegA|SegC|SegD|SegE|SegF|SegG),            //6
    (SegA|SegB|SegC),                            //7
    (SegA|SegB|SegC|SegD|SegE|SegF|SegG),        //8
    (SegA|SegB|SegC|SegD|SegF|SegG),            //9
    (0),                                        //Space
    (SegA|SegB|SegC|SegE|SegF|SegG),            //
    (SegC|SegD|SegE|SegF|SegG),                    //B
    (SegD|SegE|SegG),                            //C
    (SegB|SegC|SegD|SegE|SegG),                    //D
    (SegA|SegD|SegE|SegF|SegG),                    //E
    (SegA|SegE|SegF|SegG),                        //F 
    (SegA|SegC|SegD|SegE|SegF),                    //G
    (SegC|SegE|SegF|SegG),                        //H
    (SegC),                                        //I 
    (SegB|SegC|SegD|SegE),                        //J
    (0),                                    //K 
    (SegD|SegE|SegF),                            //L
    (0),                                    //M
    (SegC|SegE|SegG),                            //N
    (SegC|SegD|SegE|SegG),                        //O
    (SegA|SegB|SegE|SegF|SegG),                    //P
    (SegA|SegB|SegC|SegF|SegG),                    //Q
    (SegE|SegG),                                //R
    (SegA|SegC|SegD|SegF|SegG),                    //S
    (SegD|SegE|SegF|SegG),                        //T
    (SegC|SegD|SegE),                            //U
    (SegC|SegD|SegE),                            //V
    (0),                                    //W
    (0),                                    //X
    (SegB|SegC|SegD|SegF|SegG),                    //Y
    (0),                                    //Z
    (SegE|SegF),                                //[
    (SegB|SegE|SegG),                            ///                            
    (SegB|SegC),                                //]
    (SegG),                                        //-
    (SegD)};                                    //_      

Просто меняю в дефайнах номера выводов и все.....
polyname
Прорезались зубы
Сообщения: 249
Зарегистрирован: Пт май 18, 2012 23:12:23

Re: Автогенератор кода для семисегментных индикаторов

Сообщение polyname »

для 8/17 сегментов: http://ukpyr.narod.ru/ind_led.htm?lang=rus
Аватара пользователя
Котяра
Открыл глаза
Сообщения: 53
Зарегистрирован: Пт сен 08, 2006 01:06:13

Re: Автогенератор кода для семисегментных индикаторов

Сообщение Котяра »

Подобные: тыц и тыц
Раньше почему-то не нашел...
Все, что выходит из-под рук японца, будь то сковородная ручка или магнитофон, должно быть произведением искусства.
©Коносукэ Мацусита
polyname
Прорезались зубы
Сообщения: 249
Зарегистрирован: Пт май 18, 2012 23:12:23

Re: Автогенератор кода для семисегментных индикаторов

Сообщение polyname »

я бы не сказал что подобные - нельзя сравнивать онлайн-редактор, работающий на любой системе без установки, с Windows-only бинарниками
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Автогенератор кода для семисегментных индикаторов

Сообщение phanis »

shads писал(а):И чего я раньше не видел ваших программок......

Поддерживаю
Спойлер

Код: Выделить всё


#define seg_A  PORTB_Bit3
#define seg_B  PORTB_Bit6
#define seg_C  PORTC_Bit1
#define seg_D  PORTD_Bit7
#define seg_E  PORTB_Bit1
#define seg_F  PORTD_Bit1
#define seg_G  PORTD_Bit5
#define seg_DP PORTB_Bit5

#define seg_1  PORTC_Bit0
#define seg_2  PORTB_Bit4
#define seg_3  PORTB_Bit2
#define seg_4  PORTB_Bit0
#define seg_5  PORTD_Bit6
#define seg_6  PORTB_Bit7
#define seg_7  PORTD_Bit2
#define seg_8  PORTD_Bit0

#define seg_out_A  DDRB_Bit3
#define seg_out_B  DDRB_Bit6
#define seg_out_C  DDRC_Bit1
#define seg_out_D  DDRD_Bit7
#define seg_out_E  DDRB_Bit1
#define seg_out_F  DDRD_Bit1
#define seg_out_G  DDRD_Bit5
#define seg_out_DP DDRB_Bit5

#define seg_out_1  DDRC_Bit0
#define seg_out_2  DDRB_Bit4
#define seg_out_3  DDRB_Bit2
#define seg_out_4  DDRB_Bit0
#define seg_out_5  DDRD_Bit6
#define seg_out_6  DDRB_Bit7
#define seg_out_7  DDRD_Bit2
#define seg_out_8  DDRD_Bit0


#define segpins(a,b,c,d,e,f,g) ((a<<0)|(b<<1)|(c<<2)|(d<<3)|(e<<4)|(f<<5)|(g<<6))
const unsigned char __flash SEG_CODE [20] =
{
segpins(1,1,1,1,1,1,0),//0
segpins(0,1,1,0,0,0,0),//1
segpins(1,1,0,1,1,0,1),//2
segpins(1,1,1,1,0,0,1),//3
segpins(0,1,1,0,0,1,1),//4
segpins(1,0,1,1,0,1,1),//5
segpins(1,0,1,1,1,1,1),//6
segpins(1,1,1,0,0,0,0),//7
segpins(1,1,1,1,1,1,1),//8
segpins(1,1,1,1,0,1,1),//9
segpins(1,1,1,0,1,1,1),//A
segpins(0,0,1,1,1,1,0),//b
segpins(1,0,0,1,1,1,0),//C
segpins(0,1,1,1,0,1,1),//d
segpins(1,0,0,1,1,1,1),//E
segpins(1,0,0,0,1,1,1),//F
segpins(0,0,0,0,0,0,1), //-  16
segpins(0,0,1,0,1,0,1), //-  n 17
segpins(0,0,0,0,0,0,0), //-  18
};



void LED_DRIVER(unsigned char num,unsigned char data)
{

seg_A  = 0;
seg_B  = 0;
seg_C  = 0;
seg_D  = 0;
seg_E  = 0;
seg_F  = 0;
seg_G  = 0;
seg_DP = 0;

num ^= 0xFF;

seg_1 = num;
num>>=1;
seg_2 = num;
num>>=1;
seg_3 = num;
num>>=1;
seg_4 = num;
num>>=1;
seg_5 = num;
num>>=1;
seg_6 = num;
num>>=1;
seg_7 = num;
num>>=1;
seg_8 = num;


seg_A = data;
data>>=1;
seg_B = data;
data>>=1;
seg_C = data;
data>>=1;
seg_D = data;
data>>=1;
seg_E = data;
data>>=1;
seg_F= data;
data>>=1;
seg_G = data;
data>>=1;
seg_DP = data;

}

void INIT_LED_PORT(unsigned char num,unsigned char data)
{

seg_out_1 = num ;
num>>=1;
seg_out_2 = num ;
num>>=1;
seg_out_3 = num ;
num>>=1;
seg_out_4 = num ;
num>>=1;
seg_out_5 = num ;
num>>=1;
seg_out_6 = num ;
num>>=1;
seg_out_7 = num ;
num>>=1;
seg_out_8 = num ;


seg_out_A = data;
data>>=1;
seg_out_B = data;
data>>=1;
seg_out_C = data;
data>>=1;
seg_out_D = data;
data>>=1;
seg_out_E = data;
data>>=1;
seg_out_F= data;
data>>=1;
seg_out_G = data;
data>>=1;
seg_out_DP = data;

}
MechanicCDRR
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн сен 27, 2010 22:38:52

Re: Автогенератор кода для семисегментных индикаторов

Сообщение MechanicCDRR »

Ух, какая туча идей и полезных ссылок :)
значит не зря "похвастался" прогой...
Ответить

Вернуться в «Периферия»