Сообщение от
Alex_Jet
Только надо разобраться с переводом двойчных чисел в 10-е.
Зачем? Пусть себе часы внутри 1307 идут в дв-десятичном, ты их читаешь и посылаешь на дисплей цbфра за цифрой. Ничего преобразовывать не надо.
Установку часов - проще без перевода далеть.
Например так:
Код:
byte Sec,DSec,Min,DMin,Hour,DHour;
void IncTime(void){
Sec++;
if (Sec<10) return;
Sec=0; DSec++;
if (DSec<6) return;
DSec=0; Min++;
if (Min<9) return;
Min=0; DMin++;
if (DMin<6) return;
DMin=0; Hour++;
// и так далее. разумеется, это только пример
// пересчет на 24 (для часов) я специально не написал - сам попробуй.
}
Дв-десятичное представление неудобно для математики, и нужно только для вывода на дисплей.
И проще всего делать или по таблице (что быстро, но много места занимает),или вычислением :
Код:
// печать байта тремя цифрами:
void printi(byte i){
byte d = 100;
char c;
do {
c = i/d+*0*;
putch(c);
i %= d; d /= 10;
} while (d > 0);
}
Если надо (почему-то) в шестнадwатеричное переводить, то тоже или таблицей:
Код:
byte BinarySample;
char S1,S2;
const Hex[]={*0*,*1,*2*,*3*,*4*,*5*,*6*,*7*,*8*,*9*,*A*,*B*,*C*,*D*,*E*,*F*};
S1= Hex[ (BinarySample>>4) & 0x0F) ];
S2= Hex[ (BinarySample & 0x0F) ];
или вычислением:
Код:
byte BinarySample;
char S1,S2;
char temp;
temp=(BinarySample>>4) & 0x0F;
S1 = (temp>=10) ? (temp+*A*-10) : (*0*+temp);
temp=BinarySample & 0x0F;
S1 = (temp>=10) ? (temp+*A*-10) : (*0*+temp);
Социальные закладки