
To tylko dla tych co chca to zlutowac a nie maja za bardzo pojecia o elektronice.
Ależ nie, żaden rozrost. Dla 50% wyświetlasz naprzemiennie bajty. Dla 33% wyświetlasz jeden raz bajt 'wiodący' i dwa razy bajt 'główny'. Dla 25%....Pyra pisze:Próbowałem takiej metody, lecz te 50% jest niewystarczające, myślę, że dopiero 25% mogło by się okazać OK, ale to spowodowało znaczny rozrost procedur wyświetlających, oraz wprowadzania danych.
Kod: Zaznacz cały
u1[1]=11111111 u1[0]=11111110 u2[1]=11111111 u2[0]=11111111
u1[1]=11111111 u1[0]=11111100 u2[1]=11111111 u2[0]=11111110
u1[1]=11111111 u1[0]=11111000 u2[1]=11111111 u2[0]=11111100
u1[1]=11111111 u1[0]=11110000 u2[1]=11111111 u2[0]=11111000
u1[1]=11111111 u1[0]=11100000 u2[1]=11111111 u2[0]=11110000
u1[1]=11111111 u1[0]=11000000 u2[1]=11111111 u2[0]=11100001
u1[1]=11111111 u1[0]=10000001 u2[1]=11111111 u2[0]=11000011
u1[1]=11111111 u1[0]=00000011 u2[1]=11111111 u2[0]=10000111
u1[1]=11111110 u1[0]=00000111 u2[1]=11111111 u2[0]=00001111
u1[1]=11111100 u1[0]=00001111 u2[1]=11111110 u2[0]=00011111
u1[1]=11111000 u1[0]=00011111 u2[1]=11111100 u2[0]=00111111
u1[1]=11110000 u1[0]=00111111 u2[1]=11111000 u2[0]=01111111
u1[1]=11100000 u1[0]=01111111 u2[1]=11110000 u2[0]=11111111
u1[1]=11000000 u1[0]=11111111 u2[1]=11100001 u2[0]=11111111
u1[1]=10000001 u1[0]=11111111 u2[1]=11000011 u2[0]=11111111
u1[1]=00000011 u1[0]=11111111 u2[1]=10000111 u2[0]=11111111
u1[1]=00000111 u1[0]=11111111 u2[1]=00001111 u2[0]=11111111
u1[1]=00001111 u1[0]=11111111 u2[1]=00011111 u2[0]=11111111
u1[1]=00011111 u1[0]=11111111 u2[1]=00111111 u2[0]=11111111
u1[1]=00111111 u1[0]=11111111 u2[1]=01111111 u2[0]=11111111
u1[1]=01111111 u1[0]=11111111 u2[1]=11111111 u2[0]=11111111
u1[1]=11111111 u1[0]=11111111 u2[1]=11111111 u2[0]=11111111
Kod: Zaznacz cały
#define DIODY 4
#define CYKLE (16 + DIODY + 1)
union {
short int bity;
unsigned char bajt[2];
} u1, u2;
char* bits(char* cp, unsigned char c) // uslugowa - tylko do testu na PC
{
unsigned char mask = 1;
for (int i=1; i<=8; i++) {
cp[8-i] = (c & mask) ? '1' : '0';
mask <<= 1;
}
cp[8] = '\0';
return cp;
}
void wyswietl(void) // tez postac uslugowa do testu na PC
{
char a[9], b[9], c[9], d[9];
// testowo tu tylko bajty na ekran, docelowo bajty na porty naprzemiennie: z u1 i u2
printf("u1[1]=%s u1[0]=%s u2[1]=%s u2[0]=%s\n",
bits(a, u1.bajt[1]),
bits(b, u1.bajt[0]),
bits(c, u2.bajt[1]),
bits(d, u2.bajt[0]));
fflush(stdout);
return;
}
void snowfall(void)
{
while(1) { // a snieg pada i pada i pada ...
u1.bity = u2.bity = 0xffff;
for(int cykl = 0; cykl <= CYKLE; ++cykl) {
if (cykl == 0) {
u1.bity <<= 1;
}
if (cykl > 0 && cykl <= DIODY) {
u1.bity <<= 1;
u2.bity <<= 1;
}
if (cykl == DIODY+1) {
u1.bity <<= 1;
u2.bity <<= 1;
u2.bity += 1;
}
if (cykl > DIODY+1) {
u1.bity <<= 1;
u1.bity += 1;
u2.bity <<= 1;
u2.bity += 1;
}
wyswietl(); // tu wyjscie na porty
}
//sleep(random(20)); // przypadkowa drzemka po każdym cyklu
}
return;
}
int main(int argc, char* argv[])
{
snowfall();
return 0;
}
Kod: Zaznacz cały
gcc -Wall -std=c99 snowfall.c -o snowfall
Wczoraj kupiłem 32 żółte (były najtańszePyra pisze:Saul - Ciekaw jestem efektu, to by wyszło prawie jak analogowe.