Długo zastanawiałem się czy pokazać światu zegarek z wyświetlaczem 7-segment odraz sekundnikiem na ledach.
Przemogłem się i to w zasadzie dzięki temu projektowi stworzyłem bloga gdyż sam projekt już dawno temu opisywany był na forum atnel pod adresem: http://forum.atnel.pl/topic7509.html
Co prawda nie mam fotki totalnego efektu końcowego gdyż prezent był wykańczany na szybko oraz wręczony w maju tak się składa że zegarek działa już od roku 24h na dobę i nie było z nim żadnego problemu.
Nietypowy zegarek na prezent został wymyślony i stworzony po :
Dziękuję Mirku za rejestry przesuwne które podsunęły mi pomysł na prezent ![]()
Na płytę czołową zegarka przyszła czarna naklejka sitodruku dzięki czemu ledy oraz wyświetlacz elegancko widać.
Zegarek nie robi nic specjalnego nie ma budzika wyświetla tylko godziny i minuty posiada dwie kropki między cyframi w trakcie ustawiania godzin mrugają ledy między 30 a 60 ledem natomiast ustawiając minuty mruga między 60 a 30 ledem.
Do projektu utworzyłem swoje biblioteki:
74hc595.c , 74hc595.h — Biblioteka do obsługi rejestrów przesuwnych oraz tryby mrygań ledami.
debuger.c , debuger.h — Nie używana biblioteka utworzona na potrzeby debugowania kodu gdyby coś mi nie chciało działać w trakcie pisania programu.
konw_liczb.c , konw_liczb.h — Konwersja liczb BCD na DEC i odwrotnie na potrzeby RTC
kouhi.c , kouhi.h — Wyświetlacz led 4 cyfry z dwukropkiem na środku.
Użyta została biblioteka z Niebieskiej Książki – Mikrokontrolery AVR Język C Pasja programowania p. Mirosława Kardasia wydawnictwa Atnel:
i2c_twi.c , i2c_twi.h — Do obsługi zegarka RTC PCF
Wykaz ważniejszych elementów:
- 1x Wyświetlacz LED KT4056SGI1S → 3zł
- 1x Atmega32 DIL → 9zł
- 1x PFC8583P → 4zł
- 8x 74HC595N → 8zł
- 1x Złącze KANADA → 2 zł
- 56x Led Amber → 11,2 zł
- 4x Led zielnone → 1zł
- 1x dioda BAT54
- 1x kwarc 11592Hz
- 1x kwarc 32768Hz
- 1x kondensator 1F 5.5V
- 3x tact switch
- 4x tranzysotry BC807
- 1x Moduł zasilania ASM1117-5V
- 78x rezysory różnej pojemności
- 16x kondensatory różnej pojemności
- 1x obudowa 200x200x40 → 6zł
- 8x podstawka precyzyjna DIL16
- 1x podstawka precyzyjna DIL40
- 1x podstawka precyzyjna DIL8
Wszystkich cen nie podałem gdyż resztę posiadałem na stanie.
Schemat zegarka:
Płytki zegarka ( wersja bottom nie posiada mirrora):


Poniżej fotki zegarka, w gotowy projekcie tylna obudowa jest zamknięta a front zegarka oklejony jest sitodrukiem:



Prezentacja zegarka bez obudowy:
Prezentacja zegarka zobudową:
Największa obawa przed dodaniem projektu do bloga to kod programu. Ze względu na to że się jeszcze uczę i wiem że można było kod napisać bardzo elegancko,
nie mniej ilu programistów tyle rozwiązań. Ja kod zrealizowałem / napisałem jak poniżej i zegarek działa tak jak było w założeniach.
Do projektu trzeba dograć sobie biblioteki i2c_twi.c , i2c_twi.h — Do obsługi zegarka RTC
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 |
/* * main.c * * Eclipse SDK * Kompilator: AVR GNU C (GCC) * * Projekt: ZEGAR_LED * Utworzony: 15-05-2014 * Autor: avrtech.pl * */ /* ------------------- BIBLIOTEKI AVR-GCC ------------------- */ #include <avr/io.h> // Włącza pozostałe nagłówki I/O #include <avr/interrupt.h> // Funkcje obsługi przerwań #include <util/delay.h> // Funkcje opóźniające #include <avr/pgmspace.h> // Funkcje dostępu do pamięci programu /* ------------------- BIBLIOTEKI WŁASNE ------------------- */ #include "Biblioteki/74hc595.h" // 8 x REJESTRY PRZESUWNE #include "Biblioteki/kouhi.h" // WYSWIETLACZ 7-SEGMENT Z : #include "Biblioteki/konw.liczb.h" // KONWERSJA LICZB /* ------------------- BIBLIOTEKI ATNEL ------------------- */ #include "Biblioteki/ATNEL/i2c_twi.h" /* ------------------- RTC PFC8583P ------------------- */ enum {ss=1, mm, hh}; uint8_t bufor[4]; // rezerwacja bufora 4 bajty extern volatile uint8_t sekundy; uint8_t minuty, godziny; uint8_t sek_1, sek_2, min_1, min_2, godz_1, godz_2; uint8_t temp_godziny, temp_minuty, temp_godz_1, temp_godz_2, temp_min_1, temp_min_2; /* ------------------- DEFINICJA PRZYCISKÓW ------------------- */ #define KL1 (1<<PD5) #define KL2 (1<<PD4) #define KL3 (1<<PD3) #define KL_DDR DDRD #define KL_PORT PORTD /* ------------------- FLAGI, ZMIENNE ------------------- */ volatile uint8_t flaga_int0; uint8_t Timer_led, czy_menu, timer_efekt; uint16_t Timer_2k, Timer_debounce; /* ------------------- ZMIENNE POMOCNICZE PRZECH. STAN KLAWISZY ------------------- */ uint8_t k1=0, k2=0, k3=0; /* ------------------- ELIMINACJA DRGAŃ STYKÓW ------------------- */ void SuperDebounce(uint8_t * key_state, volatile uint8_t *KPIN, uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait, void (*push_proc)(void), void (*rep_proc)(void) ); /* ------------------- FUNKCJE ------------------- */ void ustaw_godziny( void ); void ustaw_minuty( void ); void zapisz_czas( void ); void godziny_wyzej( void ); void godziny_nizej( void ); void minuty_wyzej( void ); void minuty_nizej( void ); int main(void) { /* ------------------- INICJALIZACJA KIERUNKÓW PINÓW ------------------- */ KL_DDR &= ~(KL1|KL2|KL3); // KLAWISZE JAKO WEJŚCIE KL_PORT |= KL1|KL2|KL3; // PODCIĄGNIĘCIE DO VCC /* ------------------- 74HC595 ------------------- */ init_74hc595(); // INICJALIZACJA HARDWARE SPI /* ------------------- 7-SEGMENT ------------------- */ init_kouhi(); /* ------------------- I2C - TWI ------------------- */ i2cSetBitrate( 100 ); // USTAWIAMY PRĘDKOŚĆ 100 kHz NA MAGISTRALI I2C /* ------------------- PRZERWANIE INT0 ------------------- */ MCUCR |= (1<<ISC01); // wyzwalanie zboczem opadającym GICR |= (1<<INT0); // odblokowanie przerwania PORTD |= (1<<PD2); // podciągnięcie pinu INT0 do VCC /* ------------------- PRZERWANIE TIMER 2 ------------------- */ // USTAWIENIE TIMER2 DLA KWARCA 11,0592 TCCR2 |= (1<<WGM21); // TRYB CTC TCCR2 |= (1<<CS22)|(1<<CS21)|(1<<CS20); // PRESKALER = 1024 OCR2 = 9; // REJESTR PRZEPEŁNIENIA CO OK 1MS (1000Hz) TIMSK |= (1<<OCIE2); // ZEZWOLENIE NA PRZERWANIE COMPAREMATCH // /* ------------------- USTAWIENIE CZASU ------------------- */ // bufor[0] = 0; // setne części sekundy // bufor[1] = dec2bcd(40); // sekundy // bufor[2] = dec2bcd(16); // minuty // bufor[3] = dec2bcd(19); // godziny // // zapis 4 bajtów z bufora pod adres 0x01 w pamięci RAM naszego RTC // TWI_write_buf( 0xA2, 0x01, 4, bufor ); /* ------------------- ZEZWOLENIE NA PRZERWANIE ------------------- */ sei(); /* ------------------- PĘTLA GŁÓWNA PROGRAMU ------------------- */ while(1) { if(czy_menu == 1){ //ustawianie godziny if( !Timer_led ) { timer_efekt++; Timer_led = 10; } if(timer_efekt == 0){ send_74hc595( 0b1111011111111111111111111111111111000000000000000000000000000000); }else if(timer_efekt == 1){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000000000000); }else if (timer_efekt == 2){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000000000001); }else if (timer_efekt == 3){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000000000011); }else if (timer_efekt == 4){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000000000111); }else if (timer_efekt == 5){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000000001111); }else if (timer_efekt == 6){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000000011111); }else if (timer_efekt == 7){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000000111111); }else if (timer_efekt == 8){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000001111111); }else if (timer_efekt == 9){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000011111111); }else if (timer_efekt == 10){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000111111111); }else if (timer_efekt == 11){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000001111111111); }else if (timer_efekt == 12){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000011111111111); }else if (timer_efekt == 13){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000111111111111); }else if (timer_efekt == 14){ send_74hc595( 0b1111111111111111111111111111111111000000000000000001111111111111); }else if (timer_efekt == 15){ send_74hc595( 0b1111111111111111111111111111111111000000000000000011111111111111); }else if (timer_efekt == 16){ send_74hc595( 0b1111111111111111111111111111111111000000000000000111111111111111); }else if (timer_efekt == 17){ send_74hc595( 0b1111111111111111111111111111111111000000000000001111111111111111); }else if (timer_efekt == 18){ send_74hc595( 0b1111111111111111111111111111111111000000000000011111111111111111); }else if (timer_efekt == 19){ send_74hc595( 0b1111111111111111111111111111111111000000000000111111111111111111); }else if (timer_efekt == 20){ send_74hc595( 0b1111111111111111111111111111111111000000000001111111111111111111); }else if (timer_efekt == 21){ send_74hc595( 0b1111111111111111111111111111111111000000000011111111111111111111); }else if (timer_efekt == 22){ send_74hc595( 0b1111111111111111111111111111111111000000000111111111111111111111); }else if (timer_efekt == 23){ send_74hc595( 0b1111111111111111111111111111111111000000001111111111111111111111); }else if (timer_efekt == 24){ send_74hc595( 0b1111111111111111111111111111111111000000011111111111111111111111); }else if (timer_efekt == 25){ send_74hc595( 0b1111111111111111111111111111111111000000111111111111111111111111); }else if (timer_efekt == 26){ send_74hc595( 0b1111111111111111111111111111111111000001111111111111111111111111); }else if (timer_efekt == 27){ send_74hc595( 0b1111111111111111111111111111111111000011111111111111111111111111); }else if (timer_efekt == 28){ send_74hc595( 0b1111111111111111111111111111111111000111111111111111111111111111); }else if (timer_efekt == 29){ send_74hc595( 0b1111111111111111111111111111111111001111111111111111111111111111); }else if (timer_efekt == 30){ send_74hc595( 0b1111111111111111111111111111111111111111111111111111111111111111); }else if (timer_efekt == 31){ send_74hc595( 0b1111111111111111111111111111111111001111111111111111111111111111); }else if (timer_efekt == 32){ send_74hc595( 0b1111111111111111111111111111111111000111111111111111111111111111); }else if (timer_efekt == 33){ send_74hc595( 0b1111111111111111111111111111111111000011111111111111111111111111); }else if (timer_efekt == 34){ send_74hc595( 0b1111111111111111111111111111111111000001111111111111111111111111); }else if (timer_efekt == 35){ send_74hc595( 0b1111111111111111111111111111111111000000111111111111111111111111); }else if (timer_efekt == 36){ send_74hc595( 0b1111111111111111111111111111111111000000011111111111111111111111); }else if (timer_efekt == 37){ send_74hc595( 0b1111111111111111111111111111111111000000001111111111111111111111); }else if (timer_efekt == 38){ send_74hc595( 0b1111111111111111111111111111111111000000000111111111111111111111); }else if (timer_efekt == 39){ send_74hc595( 0b1111111111111111111111111111111111000000000011111111111111111111); }else if (timer_efekt == 40){ send_74hc595( 0b1111111111111111111111111111111111000000000001111111111111111111); }else if (timer_efekt == 41){ send_74hc595( 0b1111111111111111111111111111111111000000000000111111111111111111); }else if (timer_efekt == 42){ send_74hc595( 0b1111111111111111111111111111111111000000000000011111111111111111); }else if (timer_efekt == 43){ send_74hc595( 0b1111111111111111111111111111111111000000000000001111111111111111); }else if (timer_efekt == 44){ send_74hc595( 0b1111111111111111111111111111111111000000000000000111111111111111); }else if (timer_efekt == 45){ send_74hc595( 0b1111111111111111111111111111111111000000000000000011111111111111); }else if (timer_efekt == 46){ send_74hc595( 0b1111111111111111111111111111111111000000000000000001111111111111); }else if (timer_efekt == 47){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000111111111111); }else if (timer_efekt == 48){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000011111111111); }else if (timer_efekt == 49){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000001111111111); }else if (timer_efekt == 50){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000111111111); }else if (timer_efekt == 51){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000011111111); }else if (timer_efekt == 52){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000001111111); }else if (timer_efekt == 53){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000000111111); }else if (timer_efekt == 54){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000000011111); }else if (timer_efekt == 55){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000000001111); }else if (timer_efekt == 56){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000000000111); }else if (timer_efekt == 57){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000000000011); }else if (timer_efekt == 58){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000000000001); }else if (timer_efekt == 59){ send_74hc595( 0b1111111111111111111111111111111111000000000000000000000000000000); timer_efekt = 0; } odlicz_2k = 8; // WYŁĄCZENIE : SuperDebounce(&k1, &PIND, KL1, 200, 500, godziny_wyzej, 0 ); SuperDebounce(&k2, &PIND, KL2, 200, 500, ustaw_minuty, 0 ); SuperDebounce(&k3, &PIND, KL3, 200, 500, godziny_nizej, 0 ); temp_min_1 = temp_minuty / 10; temp_min_2 = temp_minuty - (10*temp_min_1); temp_godz_1 = temp_godziny / 10; temp_godz_2 = temp_godziny - (10*temp_godz_1); cyfra_1 = temp_godz_1; cyfra_2 = temp_godz_2; cyfra_3 = temp_min_1; cyfra_4 = temp_min_2; }else if(czy_menu == 2){ // ustawianie minut if( !Timer_led ) { timer_efekt++; Timer_led = 10; } if(timer_efekt == 0){ send_74hc595( 0b1111000000000000000000000000000000011111111111111111111111111111 ); }else if(timer_efekt == 1){ send_74hc595( 0b1111100000000000000000000000000000011111111111111111111111111111 ); }else if (timer_efekt == 2){ send_74hc595( 0b1111110000000000000000000000000000011111111111111111111111111111 ); }else if (timer_efekt == 3){ send_74hc595( 0b1111111000000000000000000000000000011111111111111111111111111111 ); }else if (timer_efekt == 4){ send_74hc595( 0b1111111100000000000000000000000000011111111111111111111111111111 ); }else if (timer_efekt == 5){ send_74hc595( 0b1111111110000000000000000000000000011111111111111111111111111111 ); }else if (timer_efekt == 6){ send_74hc595( 0b1111111111000000000000000000000000011111111111111111111111111111 ); }else if (timer_efekt == 7){ send_74hc595( 0b1111111111100000000000000000000000011111111111111111111111111111 ); }else if (timer_efekt == 8){ send_74hc595( 0b1111111111111000000000000000000000011111111111111111111111111111 ); }else if (timer_efekt == 9){ send_74hc595( 0b1111111111111100000000000000000000011111111111111111111111111111 ); }else if (timer_efekt == 10){ send_74hc595( 0b1111111111111110000000000000000000011111111111111111111111111111 ); }else if (timer_efekt == 11){ send_74hc595( 0b1111111111111111000000000000000000011111111111111111111111111111 ); }else if (timer_efekt == 12){ send_74hc595( 0b1111111111111111100000000000000000011111111111111111111111111111 ); }else if (timer_efekt == 13){ send_74hc595( 0b1111111111111111110000000000000000011111111111111111111111111111 ); }else if (timer_efekt == 14){ send_74hc595( 0b1111111111111111111000000000000000011111111111111111111111111111 ); }else if (timer_efekt == 15){ send_74hc595( 0b1111111111111111111100000000000000011111111111111111111111111111 ); }else if (timer_efekt == 16){ send_74hc595( 0b1111111111111111111110000000000000011111111111111111111111111111 ); }else if (timer_efekt == 17){ send_74hc595( 0b1111111111111111111111000000000000011111111111111111111111111111 ); }else if (timer_efekt == 18){ send_74hc595( 0b1111111111111111111111100000000000011111111111111111111111111111 ); }else if (timer_efekt == 19){ send_74hc595( 0b1111111111111111111111110000000000011111111111111111111111111111 ); }else if (timer_efekt == 20){ send_74hc595( 0b1111111111111111111111111000000000011111111111111111111111111111 ); }else if (timer_efekt == 21){ send_74hc595( 0b1111111111111111111111111100000000011111111111111111111111111111 ); }else if (timer_efekt == 22){ send_74hc595( 0b1111111111111111111111111110000000011111111111111111111111111111 ); }else if (timer_efekt == 23){ send_74hc595( 0b1111111111111111111111111111000000011111111111111111111111111111 ); }else if (timer_efekt == 24){ send_74hc595( 0b1111111111111111111111111111100000011111111111111111111111111111 ); }else if (timer_efekt == 25){ send_74hc595( 0b1111111111111111111111111111110000011111111111111111111111111111 ); }else if (timer_efekt == 26){ send_74hc595( 0b1111111111111111111111111111111000011111111111111111111111111111 ); }else if (timer_efekt == 27){ send_74hc595( 0b1111111111111111111111111111111100011111111111111111111111111111 ); }else if (timer_efekt == 28){ send_74hc595( 0b1111111111111111111111111111111110011111111111111111111111111111 ); }else if (timer_efekt == 29){ send_74hc595( 0b1111111111111111111111111111111111011111111111111111111111111111 ); }else if (timer_efekt == 30){ send_74hc595( 0b1111111111111111111111111111111111111111111111111111111111111111 ); }else if (timer_efekt == 31){ send_74hc595( 0b1111111111111111111111111111111111011111111111111111111111111111); }else if (timer_efekt == 32){ send_74hc595( 0b1111111111111111111111111111111110011111111111111111111111111111); }else if (timer_efekt == 33){ send_74hc595( 0b1111111111111111111111111111111100011111111111111111111111111111); }else if (timer_efekt == 34){ send_74hc595( 0b1111111111111111111111111111111000011111111111111111111111111111); }else if (timer_efekt == 35){ send_74hc595( 0b1111111111111111111111111111110000011111111111111111111111111111); }else if (timer_efekt == 36){ send_74hc595( 0b1111111111111111111111111111100000011111111111111111111111111111); }else if (timer_efekt == 37){ send_74hc595( 0b1111111111111111111111111111000000011111111111111111111111111111); }else if (timer_efekt == 38){ send_74hc595( 0b1111111111111111111111111110000000011111111111111111111111111111); }else if (timer_efekt == 39){ send_74hc595( 0b1111111111111111111111111100000000011111111111111111111111111111); }else if (timer_efekt == 40){ send_74hc595( 0b1111111111111111111111111000000000011111111111111111111111111111); }else if (timer_efekt == 41){ send_74hc595( 0b1111111111111111111111110000000000011111111111111111111111111111); }else if (timer_efekt == 42){ send_74hc595( 0b1111111111111111111111100000000000011111111111111111111111111111); }else if (timer_efekt == 43){ send_74hc595( 0b1111111111111111111111000000000000011111111111111111111111111111); }else if (timer_efekt == 44){ send_74hc595( 0b1111111111111111111110000000000000011111111111111111111111111111); }else if (timer_efekt == 45){ send_74hc595( 0b1111111111111111111100000000000000011111111111111111111111111111); }else if (timer_efekt == 46){ send_74hc595( 0b1111111111111111111000000000000000011111111111111111111111111111); }else if (timer_efekt == 47){ send_74hc595( 0b1111111111111111110000000000000000011111111111111111111111111111); }else if (timer_efekt == 48){ send_74hc595( 0b1111111111111111100000000000000000011111111111111111111111111111); }else if (timer_efekt == 49){ send_74hc595( 0b1111111111111111000000000000000000011111111111111111111111111111); }else if (timer_efekt == 50){ send_74hc595( 0b1111111111111110000000000000000000011111111111111111111111111111); }else if (timer_efekt == 51){ send_74hc595( 0b1111111111111100000000000000000000011111111111111111111111111111); }else if (timer_efekt == 52){ send_74hc595( 0b1111111111111000000000000000000000011111111111111111111111111111); }else if (timer_efekt == 53){ send_74hc595( 0b1111111111110000000000000000000000011111111111111111111111111111); }else if (timer_efekt == 54){ send_74hc595( 0b1111111111100000000000000000000000011111111111111111111111111111); }else if (timer_efekt == 55){ send_74hc595( 0b1111111111000000000000000000000000011111111111111111111111111111); }else if (timer_efekt == 56){ send_74hc595( 0b1111111100000000000000000000000000011111111111111111111111111111); }else if (timer_efekt == 57){ send_74hc595( 0b1111111000000000000000000000000000011111111111111111111111111111); }else if (timer_efekt == 58){ send_74hc595( 0b1111110000000000000000000000000000011111111111111111111111111111); }else if (timer_efekt == 59){ send_74hc595( 0b1111100000000000000000000000000000011111111111111111111111111111); }else if (timer_efekt == 60){ send_74hc595( 0b1111000000000000000000000000000000011111111111111111111111111111); timer_efekt = 0; } odlicz_2k = 8; // WYŁĄCZENIE : SuperDebounce(&k1, &PIND, KL1, 200, 500, minuty_wyzej, 0 ); SuperDebounce(&k2, &PIND, KL2, 200, 500, zapisz_czas, 0 ); SuperDebounce(&k3, &PIND, KL3, 200, 500, minuty_nizej, 0 ); temp_min_1 = temp_minuty / 10; temp_min_2 = temp_minuty - (10*temp_min_1); temp_godz_1 = temp_godziny / 10; temp_godz_2 = temp_godziny - (10*temp_godz_1); cyfra_1 = temp_godz_1; cyfra_2 = temp_godz_2; cyfra_3 = temp_min_1; cyfra_4 = temp_min_2; }else if(czy_menu == 0){ SuperDebounce(&k2, &PIND, KL2, 200, 500, ustaw_godziny, 0 ); //odczyt 4 bajtów do bufora od adresu 0x01 z pamięci RAM naszego RTC TWI_read_buf( 0xA2, 0x01, 4, bufor ); sekundy = bcd2dec( bufor[ss] ); minuty = bcd2dec( bufor[mm] ); godziny = bcd2dec( bufor[hh] ); // oddzielenie części dziesiętnej oraz jedności sek_1 = sekundy / 10; sek_2 = sekundy - (10*sek_1); min_1 = minuty / 10; min_2 = minuty - (10*min_1); godz_1 = godziny / 10; godz_2 = godziny - (10*godz_1); //mruganie dwiema kropkami if(!Timer_2k){ odlicz_2k++; Timer_2k = 250; if(odlicz_2k >=4){ odlicz_2k = 0; } } if((godziny >= 6) && (godziny <= 20)){ // jeżeli ledowy sekundnik dojdzie do leda 60 czyli 0 sekund if(sekundy == 0){ if( !Timer_led ) { odlicz_led++; Timer_led = 16; } if((minuty == 1) || (minuty == 3) || (minuty == 5) || (minuty == 7) || (minuty == 9) || (minuty == 11) || (minuty == 13) || (minuty == 15) || (minuty == 17) || (minuty == 19) || (minuty == 21) || (minuty == 23) || (minuty == 25) || (minuty == 27) || (minuty == 29) || (minuty == 31) || (minuty == 33) || (minuty == 35) || (minuty == 37) || (minuty == 39) || (minuty == 41) || (minuty == 43) || (minuty == 45) || (minuty == 47) || (minuty == 49) || (minuty == 51) || (minuty == 53) || (minuty == 55) || (minuty == 57) || (minuty == 59)){ SwitchLed(2); // efekty przelotu ledów }else{ SwitchLed(1); // efekty przelotu ledów } // jeżeli sekundy równe 1 następuje zerowanie flagi }else if (sekundy == 1){ odlicz_led = 0; } sekundy_led(); // wyświetlanie sekund na ledach }else{ send_74hc595( 0b1111111111111111111111111111111111111111111111111111111111111111 ); } // wyswietlanie co 1 przerwanie (1 sek) pfc8583p if ( flaga_int0 ) { cyfra_1 = godz_1; // wyświetlenie dziesiątek godziny na 1 wyświetlaczu cyfra_2 = godz_2; // wyświetlenie jedności godziny na 2 wyświetlaczu cyfra_3 = min_1; // wyświetlenie dziesiątek minut na 3 wyświetlaczu cyfra_4 = min_2; // wyświetlenie jedności godziny na 4 wyświetlaczu flaga_int0 = 0; // zerownie flagi przerwania int0 } } // koniec czy menu } // KONIEC PĘTLI GŁÓWNEJ PROGRAMU } // KONIEC MAIN /* ------------------- PROCEDURA OBSŁUGI PRZERWAŃ INT0 ------------------- */ ISR( INT0_vect ) { flaga_int0 = 1; } /* ------------------- PROCEDURA OBSŁUGI PRZERWAŃ TIMERA 0 ------------------- */ ISR( TIMER2_COMP_vect){ uint16_t n; n = Timer_debounce; /* 100Hz Timer1 */ if (n) Timer_debounce = --n; n = Timer_led; /* 1000Hz Timer1 */ if (n) Timer_led = --n; n = Timer_2k; /* 1000Hz Timer1 */ if (n) Timer_2k = --n; } /* ------------------- ELIMINACJA DRGAŃ STYKÓW ------------------- */ void SuperDebounce(uint8_t * key_state, volatile uint8_t *KPIN, uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait, void (*push_proc)(void), void (*rep_proc)(void) ) { enum {idle, debounce, go_rep, wait_rep, rep}; if(!rep_time) rep_time=2; if(!rep_wait) rep_wait=2; uint8_t key_press = !(*KPIN & key_mask); if( key_press && !*key_state ) { *key_state = debounce; Timer_debounce = 150; } else if( *key_state ) { if( key_press && debounce==*key_state && !Timer_debounce ) { *key_state = 2; Timer_debounce=5; } else if( !key_press && *key_state>1 && *key_state<4 ) { if(push_proc) push_proc(); /* KEY_UP */ *key_state=idle; } else if( key_press && go_rep==*key_state && !Timer_debounce ) { *key_state = wait_rep; Timer_debounce=rep_wait; } else if( key_press && wait_rep==*key_state && !Timer_debounce ) { *key_state = rep; } else if( key_press && rep==*key_state && !Timer_debounce ) { Timer_debounce = rep_time; if(rep_proc) rep_proc(); /* KEY_REP */ } } if( *key_state>=3 && !key_press ) *key_state = idle; } /* ------------------- FUNCKJE ------------------- */ void ustaw_godziny( void ){ // przypiasnie minut i godzin do tymczasowej zmiennej temp_godziny = godziny; temp_minuty = minuty; timer_efekt = 0; //wejscie do menu czy_menu = 1; } void ustaw_minuty( void ){ czy_menu = 2; } void zapisz_czas( void ){ /* ------------------- USTAWIENIE CZASU ------------------- */ bufor[0] = 0; // setne części sekundy bufor[1] = dec2bcd(00); // sekundy bufor[2] = dec2bcd(temp_minuty); // minuty bufor[3] = dec2bcd(temp_godziny); // godziny // zapis 4 bajtów z bufora pod adres 0x01 w pamięci RAM naszego RTC TWI_write_buf( 0xA2, 0x01, 4, bufor ); czy_menu = 0; } void godziny_wyzej( void ){ ++temp_godziny; if(temp_godziny >= 24){ temp_godziny = 0; } } void godziny_nizej( void ){ --temp_godziny; if(temp_godziny == 255){ temp_godziny = 23; } } void minuty_wyzej( void ){ ++temp_minuty; if(temp_minuty >= 60){ temp_minuty = 0; } } void minuty_nizej( void ){ --temp_minuty; if(temp_minuty == 255){ temp_minuty = 59; } } |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
/* * 74hc595.h * * Eclipse SDK * Kompilator: AVR GNU C (GCC) * * Projekt: ZEGAR_LED * Utworzony: 18-05-2014 * Autor: avrtech.pl * */ #ifndef _74HC595_H_ // dyrektywy zabezpieczające przed wielokrotnym dołączeniem #define _74HC595_H_ // tego samego pliku nagłówkowego jeśli będzie dołączony // w wielu różnych plikach programu /* ------------------- HARDWARE SPI ------------------- */ #define MOSI (1<<PB5) // SER (MOSI) #define SCK (1<<PB7) // SHIFT CLOCK (SCK) #define RCK (1<<PB4) // LATCH CLOCK (RCK) /* ------------------- DEFINICJE FUNKCJI ------------------- */ void init_74hc595( void ); // inicjalizacja 8x74hc595 void send_74hc595( uint64_t word ); // wysylanie do 74hc595 void SwitchLed( uint8_t efekt ); // SZYBKIE PRZELICZENIE LEDÓW OD 1 DO 60 void sekundy_led( void ); // funkcja wyswietlania ledow kolejno odlicz z rtc /* ------------------- ZMIENNE NA POTRZEBY LEDOW ------------------- */ volatile extern uint8_t sekundy; // SEKUNDY Z RTC volatile extern uint8_t odlicz_led; // SZYBKIE PRZELICZENIE LEDÓW OD 1 DO 60 #endif /* 74HC595_H_ */ |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 |
/* * 74hc595.c * * Eclipse SDK * Kompilator: AVR GNU C (GCC) * * Projekt: ZEGAR_LED * Utworzony: 18-05-2014 * Autor: avrtech.pl * */ /* ------------------- BIBLIOTEKI AVR-GCC ------------------- */ #include <avr/io.h> // Włącza pozostałe nagłówki I/O #include <avr/interrupt.h> // Funkcje obsługi przerwań #include <util/delay.h> // Funkcje opóźniające #include <avr/pgmspace.h> // Funkcje dostępu do pamięci programu /* ------------------- BIBLIOTEKI WŁASNE ------------------- */ #include "74hc595.h" // 8 x REJESTRY PRZESUWNE /* ------------------- 74HC595 ------------------- */ #define RCK_ON PORTB |= RCK #define RCK_OFF PORTB &= ~RCK /* ------------------- ZMIENNE NA POTRZEBY LEDOW ------------------- */ volatile uint8_t sekundy; volatile uint8_t odlicz_led; /* ------------------- 74HC595 ------------------- */ void send_74hc595( uint64_t word ) { SPDR = word>>56; while( !(SPSR & (1<<SPIF)) ); SPDR = word>>48; while( !(SPSR & (1<<SPIF)) ); SPDR = word>>40; while( !(SPSR & (1<<SPIF)) ); SPDR = word>>32; while( !(SPSR & (1<<SPIF)) ); SPDR = word>>24; while( !(SPSR & (1<<SPIF)) ); SPDR = word>>16; while( !(SPSR & (1<<SPIF)) ); SPDR = word>>8; while( !(SPSR & (1<<SPIF)) ); SPDR = word; while( !(SPSR & (1<<SPIF)) ); RCK_ON; RCK_OFF; } void init_74hc595(void) { DDRB |= MOSI | SCK | RCK; // PINY SPI JAKO WYJŚCIA SPCR |= (1<<SPE) | (1<<MSTR); // WŁĄCZ SPI I USTAW MASTER SPSR |= (1<<SPI2X); // FOSC/2 // WYGASZENIE WSZYSTKICH DIOD send_74hc595( 0b1111111111111111111111111111111111111111111111111111111111111111 ); } void sekundy_led( void ){ if(sekundy == 1){ send_74hc595( 0b1111101111111111111111111111111111111111111111111111111111111111 ); }else if(sekundy == 2){ send_74hc595( 0b1111100111111111111111111111111111111111111111111111111111111111 ); }else if(sekundy == 3){ send_74hc595( 0b1111100011111111111111111111111111111111111111111111111111111111 ); }else if(sekundy == 4){ send_74hc595( 0b1111100001111111111111111111111111111111111111111111111111111111 ); }else if(sekundy == 5){ send_74hc595( 0b1111100000111111111111111111111111111111111111111111111111111111 ); }else if(sekundy == 6){ send_74hc595( 0b1111100000011111111111111111111111111111111111111111111111111111 ); }else if(sekundy == 7){ send_74hc595( 0b1111100000001111111111111111111111111111111111111111111111111111 ); }else if(sekundy == 8){ send_74hc595( 0b1111100000000111111111111111111111111111111111111111111111111111 ); }else if(sekundy == 9){ send_74hc595( 0b1111100000000011111111111111111111111111111111111111111111111111 ); }else if(sekundy == 10){ send_74hc595( 0b1111100000000001111111111111111111111111111111111111111111111111 ); }else if(sekundy == 11){ send_74hc595( 0b1111100000000000111111111111111111111111111111111111111111111111 ); }else if(sekundy == 12){ send_74hc595( 0b1111100000000000011111111111111111111111111111111111111111111111 ); }else if(sekundy == 13){ send_74hc595( 0b1111100000000000001111111111111111111111111111111111111111111111 ); }else if(sekundy == 14){ send_74hc595( 0b1111100000000000000111111111111111111111111111111111111111111111 ); }else if(sekundy == 15){ send_74hc595( 0b1111100000000000000011111111111111111111111111111111111111111111 ); }else if(sekundy == 16){ send_74hc595( 0b1111100000000000000001111111111111111111111111111111111111111111 ); }else if(sekundy == 17){ send_74hc595( 0b1111100000000000000000111111111111111111111111111111111111111111 ); }else if(sekundy == 18){ send_74hc595( 0b1111100000000000000000011111111111111111111111111111111111111111 ); }else if(sekundy == 19){ send_74hc595( 0b1111100000000000000000001111111111111111111111111111111111111111 ); }else if(sekundy == 20){ send_74hc595( 0b1111100000000000000000000111111111111111111111111111111111111111 ); }else if(sekundy == 21){ send_74hc595( 0b1111100000000000000000000011111111111111111111111111111111111111 ); }else if(sekundy == 22){ send_74hc595( 0b1111100000000000000000000001111111111111111111111111111111111111 ); }else if(sekundy == 23){ send_74hc595( 0b1111100000000000000000000000111111111111111111111111111111111111 ); }else if(sekundy == 24){ send_74hc595( 0b1111100000000000000000000000011111111111111111111111111111111111 ); }else if(sekundy == 25){ send_74hc595( 0b1111100000000000000000000000001111111111111111111111111111111111 ); }else if(sekundy == 26){ send_74hc595( 0b1111100000000000000000000000000111111111111111111111111111111111 ); }else if(sekundy == 27){ send_74hc595( 0b1111100000000000000000000000000011111111111111111111111111111111 ); }else if(sekundy == 28){ send_74hc595( 0b1111100000000000000000000000000001111111111111111111111111111111 ); }else if(sekundy == 29){ send_74hc595( 0b1111100000000000000000000000000000111111111111111111111111111111 ); }else if(sekundy == 30){ send_74hc595( 0b1111100000000000000000000000000000011111111111111111111111111111 ); }else if(sekundy == 31){ send_74hc595( 0b1111100000000000000000000000000000001111111111111111111111111111 ); }else if(sekundy == 32){ send_74hc595( 0b1111100000000000000000000000000000000111111111111111111111111111 ); }else if(sekundy == 33){ send_74hc595( 0b1111100000000000000000000000000000000011111111111111111111111111 ); }else if(sekundy == 34){ send_74hc595( 0b1111100000000000000000000000000000000001111111111111111111111111 ); }else if(sekundy == 35){ send_74hc595( 0b1111100000000000000000000000000000000000111111111111111111111111 ); }else if(sekundy == 36){ send_74hc595( 0b1111100000000000000000000000000000000000011111111111111111111111 ); }else if(sekundy == 37){ send_74hc595( 0b1111100000000000000000000000000000000000001111111111111111111111 ); }else if(sekundy == 38){ send_74hc595( 0b1111100000000000000000000000000000000000000111111111111111111111 ); }else if(sekundy == 39){ send_74hc595( 0b1111100000000000000000000000000000000000000011111111111111111111 ); }else if(sekundy == 40){ send_74hc595( 0b1111100000000000000000000000000000000000000001111111111111111111 ); }else if(sekundy == 41){ send_74hc595( 0b1111100000000000000000000000000000000000000000111111111111111111 ); }else if(sekundy == 42){ send_74hc595( 0b1111100000000000000000000000000000000000000000011111111111111111 ); }else if(sekundy == 43){ send_74hc595( 0b1111100000000000000000000000000000000000000000001111111111111111 ); }else if(sekundy == 44){ send_74hc595( 0b1111100000000000000000000000000000000000000000000111111111111111 ); }else if(sekundy == 45){ send_74hc595( 0b1111100000000000000000000000000000000000000000000011111111111111 ); }else if(sekundy == 46){ send_74hc595( 0b1111100000000000000000000000000000000000000000000001111111111111 ); }else if(sekundy == 47){ send_74hc595( 0b1111100000000000000000000000000000000000000000000000111111111111 ); }else if(sekundy == 48){ send_74hc595( 0b1111100000000000000000000000000000000000000000000000011111111111 ); }else if(sekundy == 49){ send_74hc595( 0b1111100000000000000000000000000000000000000000000000001111111111 ); }else if(sekundy == 50){ send_74hc595( 0b1111100000000000000000000000000000000000000000000000000111111111 ); }else if(sekundy == 51){ send_74hc595( 0b1111100000000000000000000000000000000000000000000000000011111111 ); }else if(sekundy == 52){ send_74hc595( 0b1111100000000000000000000000000000000000000000000000000001111111 ); }else if(sekundy == 53){ send_74hc595( 0b1111100000000000000000000000000000000000000000000000000000111111 ); }else if(sekundy == 54){ send_74hc595( 0b1111100000000000000000000000000000000000000000000000000000011111 ); }else if(sekundy == 55){ send_74hc595( 0b1111100000000000000000000000000000000000000000000000000000001111 ); }else if(sekundy == 56){ send_74hc595( 0b1111100000000000000000000000000000000000000000000000000000000111 ); }else if(sekundy == 57){ send_74hc595( 0b1111100000000000000000000000000000000000000000000000000000000011 ); }else if(sekundy == 58){ send_74hc595( 0b1111100000000000000000000000000000000000000000000000000000000001 ); }else if(sekundy == 59){ send_74hc595( 0b1111100000000000000000000000000000000000000000000000000000000000 ); } } void SwitchLed( uint8_t efekt ){ if(efekt == 1){ if(odlicz_led == 1){ send_74hc595( 0b1111010000000000000000000000000000000000000000000000000000000000 ); }else if(odlicz_led == 2){ send_74hc595( 0b1111011000000000000000000000000000000000000000000000000000000000 ); }else if(odlicz_led == 3){ send_74hc595( 0b1111011100000000000000000000000000000000000000000000000000000000 ); }else if(odlicz_led == 4){ send_74hc595( 0b1111011110000000000000000000000000000000000000000000000000000000 ); }else if(odlicz_led == 5){ send_74hc595( 0b1111011111000000000000000000000000000000000000000000000000000000 ); }else if(odlicz_led == 6){ send_74hc595( 0b1111011111100000000000000000000000000000000000000000000000000000 ); }else if(odlicz_led == 7){ send_74hc595( 0b1111011111110000000000000000000000000000000000000000000000000000 ); }else if(odlicz_led == 8){ send_74hc595( 0b1111011111111000000000000000000000000000000000000000000000000000 ); }else if(odlicz_led == 9){ send_74hc595( 0b1111011111111100000000000000000000000000000000000000000000000000 ); }else if(odlicz_led == 10){ send_74hc595( 0b1111011111111110000000000000000000000000000000000000000000000000 ); }else if(odlicz_led == 11){ send_74hc595( 0b1111011111111111000000000000000000000000000000000000000000000000 ); }else if(odlicz_led == 12){ send_74hc595( 0b1111011111111111100000000000000000000000000000000000000000000000 ); }else if(odlicz_led == 13){ send_74hc595( 0b1111011111111111110000000000000000000000000000000000000000000000 ); }else if(odlicz_led == 14){ send_74hc595( 0b1111011111111111111000000000000000000000000000000000000000000000 ); }else if(odlicz_led == 15){ send_74hc595( 0b1111011111111111111100000000000000000000000000000000000000000000 ); }else if(odlicz_led == 16){ send_74hc595( 0b1111011111111111111110000000000000000000000000000000000000000000 ); }else if(odlicz_led == 17){ send_74hc595( 0b1111011111111111111111000000000000000000000000000000000000000000 ); }else if(odlicz_led == 18){ send_74hc595( 0b1111011111111111111111100000000000000000000000000000000000000000 ); }else if(odlicz_led == 19){ send_74hc595( 0b1111011111111111111111110000000000000000000000000000000000000000 ); }else if(odlicz_led == 20){ send_74hc595( 0b1111011111111111111111111000000000000000000000000000000000000000 ); }else if(odlicz_led == 21){ send_74hc595( 0b1111011111111111111111111100000000000000000000000000000000000000 ); }else if(odlicz_led == 22){ send_74hc595( 0b1111011111111111111111111110000000000000000000000000000000000000 ); }else if(odlicz_led == 23){ send_74hc595( 0b1111011111111111111111111111000000000000000000000000000000000000 ); }else if(odlicz_led == 24){ send_74hc595( 0b1111011111111111111111111111100000000000000000000000000000000000 ); }else if(odlicz_led == 25){ send_74hc595( 0b1111011111111111111111111111110000000000000000000000000000000000 ); }else if(odlicz_led == 26){ send_74hc595( 0b1111011111111111111111111111111000000000000000000000000000000000 ); }else if(odlicz_led == 27){ send_74hc595( 0b1111011111111111111111111111111100000000000000000000000000000000 ); }else if(odlicz_led == 28){ send_74hc595( 0b1111011111111111111111111111111110000000000000000000000000000000 ); }else if(odlicz_led == 29){ send_74hc595( 0b1111011111111111111111111111111111000000000000000000000000000000 ); }else if(odlicz_led == 30){ send_74hc595( 0b1111011111111111111111111111111111100000000000000000000000000000 ); }else if(odlicz_led == 31){ send_74hc595( 0b1111011111111111111111111111111111110000000000000000000000000000 ); }else if(odlicz_led == 32){ send_74hc595( 0b1111011111111111111111111111111111111000000000000000000000000000 ); }else if(odlicz_led == 33){ send_74hc595( 0b1111011111111111111111111111111111111100000000000000000000000000 ); }else if(odlicz_led == 34){ send_74hc595( 0b1111011111111111111111111111111111111110000000000000000000000000 ); }else if(odlicz_led == 35){ send_74hc595( 0b1111011111111111111111111111111111111111000000000000000000000000 ); }else if(odlicz_led == 36){ send_74hc595( 0b1111011111111111111111111111111111111111100000000000000000000000 ); }else if(odlicz_led == 37){ send_74hc595( 0b1111011111111111111111111111111111111111110000000000000000000000 ); }else if(odlicz_led == 38){ send_74hc595( 0b1111011111111111111111111111111111111111111000000000000000000000 ); }else if(odlicz_led == 39){ send_74hc595( 0b1111011111111111111111111111111111111111111100000000000000000000 ); }else if(odlicz_led == 40){ send_74hc595( 0b1111011111111111111111111111111111111111111110000000000000000000 ); }else if(odlicz_led == 41){ send_74hc595( 0b1111011111111111111111111111111111111111111111000000000000000000 ); }else if(odlicz_led == 42){ send_74hc595( 0b1111011111111111111111111111111111111111111111100000000000000000 ); }else if(odlicz_led == 43){ send_74hc595( 0b1111011111111111111111111111111111111111111111110000000000000000 ); }else if(odlicz_led == 44){ send_74hc595( 0b1111011111111111111111111111111111111111111111111000000000000000 ); }else if(odlicz_led == 45){ send_74hc595( 0b1111011111111111111111111111111111111111111111111100000000000000 ); }else if(odlicz_led == 46){ send_74hc595( 0b1111011111111111111111111111111111111111111111111110000000000000 ); }else if(odlicz_led == 47){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111000000000000 ); }else if(odlicz_led == 48){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111100000000000 ); }else if(odlicz_led == 49){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111110000000000 ); }else if(odlicz_led == 50){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111111000000000 ); }else if(odlicz_led == 51){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111111100000000 ); }else if(odlicz_led == 52){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111111110000000 ); }else if(odlicz_led == 53){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111111111000000 ); }else if(odlicz_led == 54){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111111111100000 ); }else if(odlicz_led == 55){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111111111110000 ); }else if(odlicz_led == 56){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111111111111000 ); }else if(odlicz_led == 57){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111111111111100 ); }else if(odlicz_led == 58){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111111111111110 ); }else if(odlicz_led == 59){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111111111111111 ); }else if(odlicz_led >= 60){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111111111111111 ); } } if(efekt == 2){ if(odlicz_led == 1){ send_74hc595( 0b1111000000000000000000000000000000000000000000000000000000000001 ); }else if(odlicz_led == 2){ send_74hc595( 0b1111000000000000000000000000000000000000000000000000000000000011 ); }else if(odlicz_led == 3){ send_74hc595( 0b1111000000000000000000000000000000000000000000000000000000000111 ); }else if(odlicz_led == 4){ send_74hc595( 0b1111000000000000000000000000000000000000000000000000000000001111 ); }else if(odlicz_led == 5){ send_74hc595( 0b1111000000000000000000000000000000000000000000000000000000011111 ); }else if(odlicz_led == 6){ send_74hc595( 0b1111000000000000000000000000000000000000000000000000000000111111 ); }else if(odlicz_led == 7){ send_74hc595( 0b1111000000000000000000000000000000000000000000000000000001111111 ); }else if(odlicz_led == 8){ send_74hc595( 0b1111000000000000000000000000000000000000000000000000000011111111 ); }else if(odlicz_led == 9){ send_74hc595( 0b1111000000000000000000000000000000000000000000000000000111111111 ); }else if(odlicz_led == 10){ send_74hc595( 0b1111000000000000000000000000000000000000000000000000001111111111 ); }else if(odlicz_led == 11){ send_74hc595( 0b1111000000000000000000000000000000000000000000000000011111111111 ); }else if(odlicz_led == 12){ send_74hc595( 0b1111000000000000000000000000000000000000000000000000111111111111 ); }else if(odlicz_led == 13){ send_74hc595( 0b1111000000000000000000000000000000000000000000000001111111111111 ); }else if(odlicz_led == 14){ send_74hc595( 0b1111000000000000000000000000000000000000000000000011111111111111 ); }else if(odlicz_led == 15){ send_74hc595( 0b1111000000000000000000000000000000000000000000000111111111111111 ); }else if(odlicz_led == 16){ send_74hc595( 0b1111000000000000000000000000000000000000000000001111111111111111 ); }else if(odlicz_led == 17){ send_74hc595( 0b1111000000000000000000000000000000000000000000011111111111111111 ); }else if(odlicz_led == 18){ send_74hc595( 0b1111000000000000000000000000000000000000000000111111111111111111 ); }else if(odlicz_led == 19){ send_74hc595( 0b1111000000000000000000000000000000000000000001111111111111111111 ); }else if(odlicz_led == 20){ send_74hc595( 0b1111000000000000000000000000000000000000000011111111111111111111 ); }else if(odlicz_led == 21){ send_74hc595( 0b1111000000000000000000000000000000000000000111111111111111111111 ); }else if(odlicz_led == 22){ send_74hc595( 0b1111000000000000000000000000000000000000001111111111111111111111 ); }else if(odlicz_led == 23){ send_74hc595( 0b1111000000000000000000000000000000000000011111111111111111111111 ); }else if(odlicz_led == 24){ send_74hc595( 0b1111000000000000000000000000000000000000111111111111111111111111 ); }else if(odlicz_led == 25){ send_74hc595( 0b1111000000000000000000000000000000000001111111111111111111111111 ); }else if(odlicz_led == 26){ send_74hc595( 0b1111000000000000000000000000000000000011111111111111111111111111 ); }else if(odlicz_led == 27){ send_74hc595( 0b1111000000000000000000000000000000000111111111111111111111111111 ); }else if(odlicz_led == 28){ send_74hc595( 0b1111000000000000000000000000000000001111111111111111111111111111 ); }else if(odlicz_led == 29){ send_74hc595( 0b1111000000000000000000000000000000011111111111111111111111111111 ); }else if(odlicz_led == 30){ send_74hc595( 0b1111000000000000000000000000000000111111111111111111111111111111 ); }else if(odlicz_led == 31){ send_74hc595( 0b1111000000000000000000000000000001111111111111111111111111111111 ); }else if(odlicz_led == 32){ send_74hc595( 0b1111000000000000000000000000000011111111111111111111111111111111 ); }else if(odlicz_led == 33){ send_74hc595( 0b1111000000000000000000000000000111111111111111111111111111111111 ); }else if(odlicz_led == 34){ send_74hc595( 0b1111000000000000000000000000001111111111111111111111111111111111 ); }else if(odlicz_led == 35){ send_74hc595( 0b1111000000000000000000000000011111111111111111111111111111111111 ); }else if(odlicz_led == 36){ send_74hc595( 0b1111000000000000000000000000111111111111111111111111111111111111 ); }else if(odlicz_led == 37){ send_74hc595( 0b1111000000000000000000000001111111111111111111111111111111111111 ); }else if(odlicz_led == 38){ send_74hc595( 0b1111000000000000000000000011111111111111111111111111111111111111 ); }else if(odlicz_led == 39){ send_74hc595( 0b1111000000000000000000000111111111111111111111111111111111111111 ); }else if(odlicz_led == 40){ send_74hc595( 0b1111000000000000000000001111111111111111111111111111111111111111 ); }else if(odlicz_led == 41){ send_74hc595( 0b1111000000000000000000011111111111111111111111111111111111111111 ); }else if(odlicz_led == 42){ send_74hc595( 0b1111000000000000000000111111111111111111111111111111111111111111 ); }else if(odlicz_led == 43){ send_74hc595( 0b1111000000000000000001111111111111111111111111111111111111111111 ); }else if(odlicz_led == 44){ send_74hc595( 0b1111000000000000000011111111111111111111111111111111111111111111 ); }else if(odlicz_led == 45){ send_74hc595( 0b1111000000000000000111111111111111111111111111111111111111111111 ); }else if(odlicz_led == 46){ send_74hc595( 0b1111000000000000001111111111111111111111111111111111111111111111 ); }else if(odlicz_led == 47){ send_74hc595( 0b1111000000000000011111111111111111111111111111111111111111111111 ); }else if(odlicz_led == 48){ send_74hc595( 0b1111000000000000111111111111111111111111111111111111111111111111 ); }else if(odlicz_led == 49){ send_74hc595( 0b1111000000000001111111111111111111111111111111111111111111111111 ); }else if(odlicz_led == 50){ send_74hc595( 0b1111000000000011111111111111111111111111111111111111111111111111 ); }else if(odlicz_led == 51){ send_74hc595( 0b1111000000000111111111111111111111111111111111111111111111111111 ); }else if(odlicz_led == 52){ send_74hc595( 0b1111000000001111111111111111111111111111111111111111111111111111 ); }else if(odlicz_led == 53){ send_74hc595( 0b1111000000011111111111111111111111111111111111111111111111111111 ); }else if(odlicz_led == 54){ send_74hc595( 0b1111000000111111111111111111111111111111111111111111111111111111 ); }else if(odlicz_led == 55){ send_74hc595( 0b1111000001111111111111111111111111111111111111111111111111111111 ); }else if(odlicz_led == 56){ send_74hc595( 0b1111000011111111111111111111111111111111111111111111111111111111 ); }else if(odlicz_led == 57){ send_74hc595( 0b1111000111111111111111111111111111111111111111111111111111111111 ); }else if(odlicz_led == 58){ send_74hc595( 0b1111001111111111111111111111111111111111111111111111111111111111 ); }else if(odlicz_led == 59){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111111111111111 ); }else if(odlicz_led >= 60){ send_74hc595( 0b1111011111111111111111111111111111111111111111111111111111111111 ); } } } |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/* * debuger.h * * Eclipse SDK * Kompilator: AVR GNU C (GCC) * * Projekt: ZEGAR_LED * Utworzony: 18-05-2014 * Autor: avrtech.pl * */ #ifndef _DEBUGER_H_ #define _DEBUGER_H_ void init_debuger(void); void debuger(void); #endif /* DEBUGER_H_ */ |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
/* * debuger.c * * Eclipse SDK * Kompilator: AVR GNU C (GCC) * * Projekt: ZEGAR_LED * Utworzony: 18-05-2014 * Autor: avrtech.pl * */ /* ------------------- BIBLIOTEKI AVR-GCC ------------------- */ #include <avr/io.h> // Włącza pozostałe nagłówki I/O #include <avr/interrupt.h> // Funkcje obsługi przerwań #include <util/delay.h> // Funkcje opóźniające #include <avr/pgmspace.h> // Funkcje dostępu do pamięci programu /* ------------------- DEBUGER ------------------- */ #define DEBUGER (1<<PB0) // definicja pinu do którego podłączona jest dioda led #define DEBUGER_TOG PORTB ^= DEBUGER // makrodefinicja - zmiana stanu diody void init_debuger(void){ DDRB |= DEBUGER; // KIERUNEK PINU PB0 JAKO WYJŚCIOWY PORTB |= DEBUGER; // WYŁĄCZENIE DEBUGERA } void debuger(void){ while(1){ DEBUGER_TOG; _delay_ms(500); } } |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/* * konwersja_znakow.h * * Eclipse SDK * Kompilator: AVR GNU C (GCC) * * Projekt: ZEGAR_LED * Utworzony: 18-05-2014 * Autor: avrtech.pl * */ #ifndef KONW_LICZB_H_ #define KONW_LICZB_H_ /* ------------------- KONWERSJA LICZB ------------------- */ uint8_t dec2bcd(uint8_t dec); // KONWERSJA LICZBY 10 NA BCD uint8_t bcd2dec(uint8_t bcd); // KONWERSJA LICZBY BCD NA 10 #endif /* KONW_LICZB_H_ */ |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/* * konwersja_znakow.c * * Eclipse SDK * Kompilator: AVR GNU C (GCC) * * Projekt: ZEGAR_LED * Utworzony: 18-05-2014 * Autor: avrtech.pl * */ /* ------------------- BIBLIOTEKI AVR-GCC ------------------- */ #include <avr/io.h> // Włącza pozostałe nagłówki I/O #include <avr/interrupt.h> // Funkcje obsługi przerwań #include <util/delay.h> // Funkcje opóźniające #include <avr/pgmspace.h> // Funkcje dostępu do pamięci programu /* ------------------- KONWERSJA LICZBY 10 NA BCD ------------------- */ uint8_t dec2bcd(uint8_t dec) { return ((dec / 10)<<4) | (dec % 10); } /* ------------------- KONWERSJA LICZBY BCD NA 10 ------------------- */ uint8_t bcd2dec(uint8_t bcd) { return ((((bcd) >> 4) & 0x0F) * 10) + ((bcd) & 0x0F); } |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
/* * kouhi.h * * Eclipse SDK * Kompilator: AVR GNU C (GCC) * * Projekt: ZEGAR_LED * Utworzony: 18-05-2014 * Autor: avrtech.pl * */ #ifndef KOUHI_H_ #define KOUHI_H_ /* ------------------- DEFINICJE PORTÓW I PINÓW ------------------- */ #define ANODY_CY_PORT PORTC #define ANODY_CY_DIR DDRC #define SEG_DATA_PORT PORTA #define SEG_DATA_DIR DDRA /* ------------------- DEFINICJE ANOD ------------------- */ #define ANODA_1 (1<<PC5) //CA1 oznacza bit nr 5 portu C #define ANODA_2 (1<<PC4) //CA2 oznacza bit nr 4 portu C #define ANODA_3 (1<<PC7) //CA3 oznacza bit nr 7 portu C #define ANODA_4 (1<<PC6) //CA4 oznacza bit nr 6 portu C /* ------------------- DEFINICJE SEGMENTÓW ------------------- */ #define SEG_A (1<<PA0) //SEG_A oznacza bit nr 0 portu A #define SEG_B (1<<PA1) //SEG_B oznacza bit nr 0 portu A #define SEG_C (1<<PA2) //SEG_C oznacza bit nr 0 portu A #define SEG_D (1<<PA3) //SEG_D oznacza bit nr 0 portu A #define SEG_E (1<<PA4) //SEG_E oznacza bit nr 0 portu A #define SEG_F (1<<PA5) //SEG_F oznacza bit nr 0 portu A #define SEG_G (1<<PA6) //SEG_G oznacza bit nr 0 portu A #define SEG_2K (1<<PA7) //SEG_2K oznacza bit nr 0 portu A /* ------------------- DEFINICJE DLA TABLICY ZNAKÓW ------------------- */ #define NIC 10 /* ------------------- DEKLARACJE ZMIENNYCH GLOBALNYCH ------------------- */ /* ------------------- WYKORZYSTYWANYCH W INNYCH PLIKACH ------------------- */ /* ------------------- DOŁĄCZAJĄCYCH PLIK #include "kouhi.h" ------------------- */ extern volatile uint8_t cyfra_1; extern volatile uint8_t cyfra_2; extern volatile uint8_t cyfra_3; extern volatile uint8_t cyfra_4; /* ------------------- MRUGANIE DWIEMA KROPKAMI ------------------- */ extern volatile uint8_t odlicz_2k; /* ------------------- DEKLARACJA FUNKCJI ------------------- */ void init_kouhi(void); #endif /* KOUHI_H_ */ |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
/* * kouhi.c * * Eclipse SDK * Kompilator: AVR GNU C (GCC) * * Projekt: ZEGAR_LED * Utworzony: 18-05-2014 * Autor: avrtech.pl * */ /* ------------------- BIBLIOTEKI AVR-GCC ------------------- */ #include <avr/io.h> // Włącza pozostałe nagłówki I/O #include <avr/interrupt.h> // Funkcje obsługi przerwań #include <util/delay.h> // Funkcje opóźniające #include <avr/pgmspace.h> // Funkcje dostępu do pamięci programu /* ------------------- BIBLIOTEKI WŁASNE ------------------- */ #include "kouhi.h" // WYSWIETLACZ 7-SEGMENT Z : /* ------------------- DEKLARACJE ZMIENNYCH GLOBALNYCH PRZECHOWUJĄCYCH CYFRY DO WYŚWIETLANIA ------------------- */ /* ------------------- volatile - ZMIENNE WYKORZYSTYWANE DO ODCZYTU I ZAPISU W PROGRAMIE ------------------- */ /* ------------------- GŁÓWNYM ORAZ W PRZERWANIU - WYŁĄCZONA OPTYMALIZACJA DOSTĘPU DO NICH ------------------- */ volatile uint8_t cyfra_1; volatile uint8_t cyfra_2; volatile uint8_t cyfra_3; volatile uint8_t cyfra_4; /* ------------------- MRUGANIE DWIEMA KROPKAMI ------------------- */ volatile uint8_t odlicz_2k; /* ------------------- DEFINICJA TABLICY PRZECHOWUJĄCEJ ZNAKI DLA WYŚWIETLACZA LED ------------------- */ const uint16_t znaki[20] PROGMEM = { ~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F), // 0 ~(SEG_B|SEG_C), // 1 ~(SEG_A|SEG_B|SEG_D|SEG_E|SEG_G), // 2 ~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_G), // 3 ~(SEG_B|SEG_C|SEG_F|SEG_G), // 4 ~(SEG_A|SEG_C|SEG_D|SEG_F|SEG_G), // 5 ~(SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G), // 6 ~(SEG_A|SEG_B|SEG_C|SEG_F), // 7 ~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G), // 8 ~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_F|SEG_G), // 9 SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G|SEG_2K // NIC (puste miejsce) }; /* ------------------- INICJALIZACJA WYŚWIETLACZA Z PRACĄ MULTIPLEKSOWANĄ ------------------- */ void init_kouhi(void) { ANODY_CY_DIR |= ANODA_1 | ANODA_2 | ANODA_3 | ANODA_4; // KIERUNEK ANOD JAKO WYJŚCIOWY ANODY_CY_PORT |= ANODA_1 | ANODA_2 | ANODA_3 | ANODA_4; // WYŁĄCZENIE ZNAKU 1 - 4 SEG_DATA_DIR |= SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G | SEG_2K; // KIERUNEK KATOD JAKO WYJŚCIOWY SEG_DATA_PORT |= (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G | SEG_2K); // WYŁĄCZENIE WSZYSTKICH SEGMENTÓW // USTAWIENIE TIMER0 DLA KWARCA 11,0592 TCCR0 |= (1<<WGM01); // TRYB CTC TCCR0 |= (1<<CS02); // PRESKALER = 128 OCR0 = 42; // REJESTR PRZEPEŁNIENIA TIMSK |= (1<<OCIE0); // ZEZWOLENIE NA PRZERWANIE COMPAREMATCH } // ********** PROCEDURA OBSŁUGI PRZERWANIA - COMPARE MATCH ********** ISR (TIMER0_COMP_vect) { static uint8_t licznik_kouhi=1; ANODY_CY_PORT = (ANODY_CY_PORT |= (ANODA_1 | ANODA_2 | ANODA_3 | ANODA_4) & 0b11110000 ); // WYGASZENIE WSZYSTKICH ANOD SEG_DATA_PORT |= (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G | SEG_2K); // WYŁĄCZENIE WSZYSTKICH SEGMENTÓW if( licznik_kouhi == 1 ){ ANODY_CY_PORT &= ~(ANODA_1); // ZAŁĄCZAMY WYŚWIETLACZ 1 SEG_DATA_PORT &= pgm_read_byte( &znaki[cyfra_1] ); // WYŚWIETLANIE CYFRY 1 }else if ( licznik_kouhi == 2){ ANODY_CY_PORT &= ~(ANODA_2); // ZAŁĄCZAMY WYŚWIETLACZ 2 SEG_DATA_PORT &= pgm_read_byte( &znaki[cyfra_2] ); // WYŚWIETLANIE CYFRY 2 }else if ( licznik_kouhi == 3){ ANODY_CY_PORT &= ~(ANODA_3); // ZAŁĄCZAMY WYŚWIETLACZ 3 SEG_DATA_PORT &= pgm_read_byte( &znaki[cyfra_3] ); // WYŚWIETLANIE CYFRY 3 }else if ( licznik_kouhi == 4){ ANODY_CY_PORT &= ~(ANODA_4); // ZAŁĄCZAMY WYŚWIETLACZ 4 SEG_DATA_PORT &= pgm_read_byte( &znaki[cyfra_4] ); // WYŚWIETLANIE CYFRY 4 }else if ( licznik_kouhi == 5){ if(odlicz_2k == 1){ ANODY_CY_PORT &= ~(ANODA_2 | ANODA_3); // ZAŁĄCZAMY WYŚWIETLACZ 2 i 4 W CELU WYŚWIETLENIA : SEG_DATA_PORT &= ~(SEG_2K); // WYŚWIETLANIE : } } licznik_kouhi++; if( licznik_kouhi >=6 ) licznik_kouhi=1; } |
Jakbym miał robić projekt od nowa to wiele rzeczy bym poprawił. Zacząłbym od obudowy a dopiero do niej dostosował płytkę bo tak to miałem problem aby znaleźć odpowiednią obudowę.
W planach była obudowa drukowana na drukarce 3d ale zabrakło na to czasu gdyż urodziny zbliżały się nieubłaganym krokiem.
Plik projektu w eclipse:





