Прикинь, сам писал, работает как часы, привожу функции, прототипы подпишешь сам и вставь зти функции в программу куда тебе надо...
Функции заточены под D триггеры, кот. завязаны на семисегментники по типовой схеме...
#use standard_io (A)
#use standard_io (B)
unsigned int8 datum;//Промежуточная переменная хранения
//one,tens,fractions
unsigned int16 SUM;
#define SH_CP PIN_B1 //выход для тактовых импульсов
#define DS PIN_B6 //последовательный выход данных
#define ST_CP PIN_B2//выход для защёлкивания данных
#define ST_CP_R PIN_B4//выход для защёлкивания данных результата
unsigned int8 CONST digits [10] = {0x3F, 0x6,0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x7,0x7F, 0x6F};
/*---OUT_NUMB FOR INDIKATORS---*/
/*--------Запись в
74HC595---------*/
void out_cifra (unsigned int8 datum)
{
int K; /* переменная счётчик циклов*/
for (K=0; K‹=7; K++)
{
if (!(datum&0x80)) {output_low (DS);}
else {output_high(DS);}
output_high (SH_CP);
output_low (SH_CP);
datum=datum‹‹1;
}
return;
}
/* Cуммирующая функция вычисления и вывода на индикаторы числа*/
void out_token (unsigned int16 SUM)
{
unsigned int8 one=0;//единицы
unsigned int8 tens=0;// десятки
unsigned int8 fractions=0;//десятые доли
unsigned int8 edinici=0;
unsigned int8 desatki=0;
unsigned int8 sotni=0;
while (SUM ›=100)
{
tens++;
SUM -=100;
};
while (SUM ›= 10)
{
one++;
SUM -= 10;
fractions=SUM;
};
/*---------------------Convert-конвертация из двоичного в код семисегментника*/
edinici=digits [fractions];
desatki=digits [one];
sotni=digits [tens];
/*---Вывод конвертированных данных на соотв. индикаторы---*/
datum=edinici;
out_cifra (datum);
datum=desatki;
out_cifra (datum);
datum=sotni;
out_cifra (datum);
}
//Не забудь дёрнуть ногами, для обновления информации
output_high (ST_CP_R ); /* Cмена информации на всех индикаторах /
output_low (ST_CP_R );
Примеров много, погугли...
Конечно, лучше с схемой, ну немогу, надо бежать на рынок за новым смесителем, а то жена убивает ужо....
И ещё раз - программа и схема - вещи не разлучимые!