пример кода для динамической индикации void indic_led(unsigned int16 temp) { unsigned char digits[5]; unsigned char A,B,C,D,E; unsigned char ar[10]={252,96,218,242,102,182,190,224,254,246}; unsigned char *p=ar;
A=B=C=D=E=0;
while (temp>=10000) { temp=temp-10000; A+=1;} // A - десятков тысяч. while (temp>=1000) { temp=temp-1000; B+=1;} while (temp>=100) { temp=temp-100; C+=1;} while (temp>=10) { temp=temp-10; D+=1;} while (temp>=1) { temp=temp-1; E+=1;}
p=(p+A); A=*p; p=ar; // Семисегментный эквивалент. p=(p+B); B=*p; p=ar; p=(p+C); C=*p; p=ar; p=(p+D); D=*p; p=ar; p=(p+E); E=*p; p=ar;
digits[0]=E; // Помещаем в массив для удобства вывода. digits[1]=D; digits[2]=C; digits[3]=B; digits[4]=B;
// В цикле вывести каждую цифру массива digits[] в соответствующий разряд СДИ и управляешь катодами или анодами. ... }
|