Цитата(Rom20 @ Aug 14 2011, 22:31)

...разобрался что необходимо выставлять на линию сразу 4 байта
...схема у меня собрана так что один байт несет информацию сразу для двух индикаторов
В подобной ситуации делал так:
- числа в программе хранятся не как символы 7-сегментного индикатора, а в обычном виде 2 3 5 9
- для преобразования числа в 7-сегментное представление есть таблица перекодировки, например для нуля - 0b11111100 (abcdefgh)
- для хранения символьного представления есть дополнительно 4 переменных или массив знак0...знак3 (видеобуфер)
- и, если, для удобства монтажа биты в этих знакоместах переставлены местами, то должна быть маленькая процедура, которая переставляет биты в нужном порядке, например:
исходный вид - a0b0c0d0e0f0g0h0 a1b1c1d1e1f1g1h1 a2b2c2d2e2f2g2h2 a3b3c3d3e3f3g3h3
требуемый вид b2a1a2f4g5h0g3b1 ...
как это работает:
1) получаем цифру, которую нужно отобразить, пусть будет 3, во втором знакоместе, при этом не изменяя ничего, что уже отображается на индикаторе.
2) из таблицы перекодировки получаем 7-сег. вид для цифры "3" - 0x11110010
3) записываем его в "знак1" (переменная/элемент массива для второго слева знакоместа).
4) теперь выполняем процедуру перестановки битов из "знак0...знак3", но не в самих "знак0...знак3", а во временный 4-х байтный буфер, который тут же и выводим на дисплей в сдвиговые регистры 74HC595.
- помигать разделительной точкой между 2-м и 3-м разрядами тоже ничего не трогая на дисплее:
инвертируем младший бит (сегмент h) в переменной "знак1" и выполняем шаг 4)
- погасить крайнее левое знакоместо, но не трогать остальные:
обнуляем "знак0" и выполняем шаг 4)