А зачем он нужен? вы пишите программу? чем-то компилируете? Так вот компилятор сам уже может сделать всё что нужно. В далёком-далёком детстве написал однажды такой файлик:
Спойлер
Код:
// Таблица отображения символов семисегментным индикатором
// Если объявлена переменная TAILLESS, то меняется начертание цифр 6, 7, 9
// Если объявлена переменная INVERT, то "светятся" биты '0'
#ifdef invertmask
#undef invertmask
#endif
#ifdef INVERT
#define invertmask ~
#else
#define invertmask
#endif
#ifdef STANDART
#undef TAILLESS
#endif
#define let_1 invertmask(seg_b + seg_c)
#define let_2 invertmask(seg_a+seg_b+seg_d+seg_e+seg_g)
#define let_3 invertmask(seg_a+seg_b+seg_c+seg_d+seg_g)
#define let_4 invertmask(seg_b+seg_c+seg_f+seg_g)
#define let_5 invertmask(seg_a+seg_c+seg_d+seg_f+seg_g)
#ifndef TAILLESS
#define let_6 invertmask(seg_c+seg_d+seg_e+seg_f+seg_g+seg_a)
#else
#define let_6 invertmask(seg_c+seg_d+seg_e+seg_f+seg_g)
#endif
#ifndef TAILLESS
#define let_7 invertmask(seg_a+seg_b+seg_c+seg_f)
#else
#define let_7 invertmask(seg_a+seg_b+seg_c)
#endif
#define let_8 invertmask(seg_a+seg_b+seg_c+seg_d+seg_e+seg_f+seg_g)
#ifndef TAILLESS
#define let_9 invertmask(seg_a+seg_b+seg_c+seg_f+seg_g+seg_d)
#else
#define let_9 invertmask(seg_a+seg_b+seg_c+seg_f+seg_g)
#endif
#define let_0 invertmask(seg_a+seg_b+seg_c+seg_d+seg_e+seg_f)
#define let_A invertmask(seg_a+seg_b+seg_c+seg_e+seg_f+seg_g)
#define let_b invertmask(seg_c+seg_d+seg_e+seg_f+seg_g)
#define let_cC invertmask(seg_a+seg_d+seg_e+seg_f)
#define let_c invertmask(seg_d+seg_e+seg_g)
#define let_d invertmask(seg_b+seg_c+seg_d+seg_e+seg_g)
#define let_E invertmask(seg_a+seg_d+seg_e+seg_f+seg_g)
#define let_F invertmask(seg_a+seg_e+seg_f+seg_g)
#define let_cG invertmask(seg_a+seg_c+seg_d+seg_e+seg_f)
#define let_h invertmask(seg_c+seg_g+seg_e+seg_f)
#define let_cH invertmask(seg_b+seg_c+seg_g+seg_e+seg_f)
#define let_i invertmask(seg_c)
#define let_J invertmask(seg_b+seg_c+seg_d)
#define let_L invertmask(seg_d+seg_e+seg_f)
#define let_n invertmask(seg_c+seg_e+seg_g)
#define let_o invertmask(seg_c+seg_d+seg_e+seg_g)
#define let_cO invertmask(seg_a+seg_b+seg_c+seg_d+seg_e+seg_f)
#define let_P invertmask(seg_e+seg_f+seg_g+seg_a+seg_b)
#define let_q invertmask(seg_a+seg_b+seg_c+seg_f+seg_g)
#define let_r invertmask(seg_e+seg_g)
#define let_cS invertmask(seg_a+seg_c+seg_d+seg_f+seg_g)
#define let_t invertmask(seg_d+seg_e+seg_f+seg_g)
#define let_u invertmask(seg_c+seg_d+seg_e)
#define let_cU invertmask(seg_b+seg_c+seg_d+seg_e+seg_f)
#define let_Y invertmask(seg_b+seg_c+seg_d+seg_f+seg_g)
#define let__ invertmask(seg_d)
#define dash invertmask(seg_g)
#define grad invertmask(seg_a+seg_b+seg_f+seg_g)
#define let_iU invertmask(seg_a+seg_b+seg_c+seg_e+seg_f)
#ifdef INVERT
#define let_ (seg_a+seg_b+seg_c+seg_d+seg_e+seg_f+seg_g)
#else
#define let_ 0
#endif
И теперь в своей программе просто определяю соответствие битов порта:
Код:
// port b
#define seg_a (1<<7)
#define seg_b (1<<6)
#define seg_c (1<<5)
#define seg_d (1<<4)
#define seg_e (1<<3)
#define seg_f (1<<2)
#define seg_g (1<<1)
и подключаю свой файлик, который сам расставит битики как надо. При этом сегменты могут быть назначены как угодно, как удобнее сделать разводку, например.