Метценгерштейн 0 8 мая, 2015 Опубликовано 8 мая, 2015 · Жалоба есть ряд дефайнов, которые зажигают в определенной позиции определенные числа #define POS_1_DIGIT_0 ... #define POS_1_DIGIT_1 ... #define POS_1_DIGIT_2 ... #define POS_1_DIGIT_3 ... #define POS_1_DIGIT_4 ... как на базе их правильно сделать ф-ю, в которую передается номер позциции и число, которое зажечь надо? Например, передаю Pos1, Dig3 Выбирается дефайн POS_1_DIGIT_3 Case switch- как последний вариант, т.к. всего 60 дефайнов. Как-то может через энумы и структуры? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 8 мая, 2015 Опубликовано 8 мая, 2015 · Жалоба ## P.S. это не исправление ненужного текста, а команда препроцессора, изучите ее и пользуйтесь на здоровье. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 8 мая, 2015 Опубликовано 8 мая, 2015 · Жалоба и что это значит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CrimsonPig 0 8 мая, 2015 Опубликовано 8 мая, 2015 · Жалоба есть ряд дефайнов, которые зажигают в определенной позиции определенные числа #define POS_1_DIGIT_0 ... #define POS_1_DIGIT_1 ... #define POS_1_DIGIT_2 ... #define POS_1_DIGIT_3 ... #define POS_1_DIGIT_4 ... как на базе их правильно сделать ф-ю, в которую передается номер позциции и число, которое зажечь надо? Например, передаю Pos1, Dig3 Выбирается дефайн POS_1_DIGIT_3 Case switch- как последний вариант, т.к. всего 60 дефайнов. Как-то может через энумы и структуры? Лучше всего править в консерватории. То есть править сам подход к написанию функции отображения чего-то на чем-то. 60 дефайнов для такого случая это не нормально. Не, ну конечно бывают случаи, когда есть 100 дефайнов, которые дефайнят абсолютно не связанные между собой константы, но это явно не тот случай. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smalcom 0 8 мая, 2015 Опубликовано 8 мая, 2015 · Жалоба используйте массив констант Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 8 мая, 2015 Опубликовано 8 мая, 2015 · Жалоба используйте массив констант вокруг этой мысли кручусь. А сам массив какого типа? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
psL 0 8 мая, 2015 Опубликовано 8 мая, 2015 · Жалоба Если это продолжение про HT1621, то может как-то так сделать? // сдвиги для каждой половины знака #define SHIFT_HALFSIGN0 0 #define SHIFT_HALFSIGN1 4 // сегменты #define SEG_A(x) ((x<<3)<<SHIFT_HALFSIGN1) #define SEG_B(x) ((x<<2)<<SHIFT_HALFSIGN1) #define SEG_C(x) ((x<<1)<<SHIFT_HALFSIGN1) #define SEG_D(x) ((x<<0)<<SHIFT_HALFSIGN0) #define SEG_E(x) ((x<<1)<<SHIFT_HALFSIGN0) #define SEG_F(x) ((x<<2)<<SHIFT_HALFSIGN0) #define SEG_G(x) ((x<<3)<<SHIFT_HALFSIGN0) #define SEG_H(x) ((x<<0)<<SHIFT_HALFSIGN1) // дешифратор: const uint8_t bcd[] = { SEG_A(1)|SEG_B(1)|SEG_C(1)|SEG_D(1)|SEG_E(1)|SEG_F(1)|SEG_G(0), //0 SEG_A(0)|SEG_B(1)|SEG_C(1)|SEG_D(0)|SEG_E(0)|SEG_F(0)|SEG_G(0), //1 SEG_A(1)|SEG_B(1)|SEG_C(0)|SEG_D(1)|SEG_E(1)|SEG_F(0)|SEG_G(1), //2 SEG_A(1)|SEG_B(1)|SEG_C(1)|SEG_D(1)|SEG_E(0)|SEG_F(0)|SEG_G(1), //3 SEG_A(0)|SEG_B(1)|SEG_C(1)|SEG_D(0)|SEG_E(0)|SEG_F(1)|SEG_G(1), //4 SEG_A(1)|SEG_B(0)|SEG_C(1)|SEG_D(1)|SEG_E(0)|SEG_F(1)|SEG_G(1), //5 SEG_A(1)|SEG_B(0)|SEG_C(1)|SEG_D(1)|SEG_E(1)|SEG_F(1)|SEG_G(1), //6 SEG_A(1)|SEG_B(1)|SEG_C(1)|SEG_D(0)|SEG_E(0)|SEG_F(0)|SEG_G(0), //7 SEG_A(1)|SEG_B(1)|SEG_C(1)|SEG_D(1)|SEG_E(1)|SEG_F(1)|SEG_G(1), //8 SEG_A(1)|SEG_B(1)|SEG_C(1)|SEG_D(1)|SEG_E(0)|SEG_F(1)|SEG_G(1), //9 SEG_A(1)|SEG_B(1)|SEG_C(1)|SEG_D(0)|SEG_E(1)|SEG_F(1)|SEG_G(1), //A SEG_A(0)|SEG_B(0)|SEG_C(1)|SEG_D(1)|SEG_E(1)|SEG_F(1)|SEG_G(1), //B SEG_A(1)|SEG_B(0)|SEG_C(0)|SEG_D(1)|SEG_E(1)|SEG_F(1)|SEG_G(0), //C SEG_A(0)|SEG_B(1)|SEG_C(1)|SEG_D(1)|SEG_E(1)|SEG_F(0)|SEG_G(1), //D SEG_A(1)|SEG_B(0)|SEG_C(0)|SEG_D(1)|SEG_E(1)|SEG_F(1)|SEG_G(1), //E SEG_A(1)|SEG_B(0)|SEG_C(0)|SEG_D(0)|SEG_E(1)|SEG_F(1)|SEG_G(1), //F }; void lcd_put(int pos, int sign) { uint8_t s=bcd[sign]; uint8_t addr=pos<<1; write_nibble( addr, 0x0F & (s >> SHIFT_HALFSIGN0)); write_nibble(++addr, 0x0F & (s >> SHIFT_HALFSIGN1)); } (код не проверял) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smalcom 0 9 мая, 2015 Опубликовано 9 мая, 2015 · Жалоба вокруг этой мысли кручусь. А сам массив какого типа? всмысле какого типа? ну вещественные числа вам подойдут? сомневаюсь. а int32? да тоже врядли - этож какой индикатор нужен. вкратце - это вы (жених), спросили у меня чем собсна невесту ... крутитесь вокруг идеи, что надо, но чем. во, чукча писатель. не заметил, что выше товарищ и пример уже показал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 9 мая, 2015 Опубликовано 9 мая, 2015 · Жалоба да, psl, спасибо. Надо как-то так с макросами. Да, это 1621. Запустил я ее. Только там с памятью логика невнятная. Только через дефайны смог разумно поджигаемые сегменты описать. Есть еще мысль- создать энум. В нем будут дефайны эти. Далее- структуру. Массив этих структур. Как-то так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 79 10 мая, 2015 Опубликовано 10 мая, 2015 · Жалоба const int table[MAX_POS][MAX_DIGIT]={ {POS0_DIGIT0,POS0_DIGIT1, ...}, {POS1_DIGIT0,POS1_DIGIT1,...}, ...... } void function(int pos, int digit){ table[pos][digit] } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
psL 0 10 мая, 2015 Опубликовано 10 мая, 2015 · Жалоба Да, это 1621. Запустил я ее. Только там с памятью логика невнятная... насколько понял, у символьных индикаторов на ее основе один семисегментный знак разбит на два адреса в 4битном озу. Один семисегментный знак - это 8 бит. Т.е. нужно преобразовать выводимый символ в 8 битное поле по таблице bcd, а затем вывести это поле тетрадами по нечетному/четному адресам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 11 мая, 2015 Опубликовано 11 мая, 2015 · Жалоба спасибо всем за советы. После выходных буду пробовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться