4. Создавай массив в программной памяти:
__flash const unsigned char ZNAK_GEN[] = {
DIGIT_0,
DIGIT_1,
DIGIT_2,
DIGIT_3,
DIGIT_4,
DIGIT_5,
.......
DIGIT_F };
5. самое главное - обращение к массиву для вывода.
if( (val>='0') && (val<='9') ) PORTB = ZNAK_GEN[val-'0'];
else if( (val>='A') && (val<='F') ) PORTB = ZNAK_GEN[val+10-'A'];
else PORTB = 0;
Вот и всё.