Բովանդակություն:

Minidot 2 - Holoclock: 6 քայլ
Minidot 2 - Holoclock: 6 քայլ

Video: Minidot 2 - Holoclock: 6 քայլ

Video: Minidot 2 - Holoclock: 6 քայլ
Video: 12 Discord Tips And Tricks You (Probably) Didn't Know About 2024, Հուլիսի
Anonim
Minidot 2 - Հոլոքլոկ
Minidot 2 - Հոլոքլոկ
Minidot 2 - Հոլոքլոկ
Minidot 2 - Հոլոքլոկ

Դե, գուցե, հոլոկլոկը մի փոքր անճշտություն է…. Այն օգտագործում է առջևի հոլոգրաֆիկ ցրման ֆիլմ ՝ մի փոքր խորություն հաղորդելու համար: Հիմնականում այս հրահանգը թարմացում է իմ նախորդ Minidot- ի այստեղ ՝ https://www.instructables.com/id /EEGLXQCSKIEP2876EE/և իմ Microdot- ի շատ կոդերի և սխեմաների նորից օգտագործումը ՝ այստեղ ՝ Նախորդ Minidot- ը չափազանց բարդ էր, Microdot- ից ես սովորեցի, թե ինչպես անել RTC PIC- ով ՝ օգտագործելով միայն 32.768 բյուրեղ և կարիք չունեի օգտագործել հատուկ RTC չիպ: Նաև ուզում էի ազատվել նախորդ Minidot- ի ցուցադրման չիպերից: Այսպիսով, այժմ կա միայն էներգիայի կարգավորիչ չիպ և PIC16F88…: ընդամենը երկու չիպ: Թարմացման մյուս պատճառներն էին, որ իմ Minidot- ը մի փոքր անհուսալի էր դառնում անջատիչ տախտակի պատճառով, և ես ուզում էի փափուկ մարում կետերի ձևերի միջև, ինչպես նաև շրջապատող լույսի սենսոր ՝ գիշերը էկրանը մթագնելու համար: Մյուս Minidot- ը ամրագրված էր պայծառությամբ և լուսավորում էր սենյակը գիշերը: Սարքը կառուցվել է EagleCad ծրագրային փաթեթի և Sourceboost կազմողի օգնությամբ: Այս նախագիծը սկսելու համար ձեզ հարկավոր է ունենալ որոշակի փորձ էլեկտրոնիկայի և ծրագրավորման PIC վերահսկիչների հետ: Խնդրում ենք նկատի ունենալ, որ սա ուսանելի չէ ոչ էլեկտրոնիկայի, ոչ էլ PIC ծրագրավորման վրա, ուստի խնդրում ենք պահել Miniclock- ի նախագծին վերաբերող հարցեր: EagleCad- ի կամ ծրագրավորման PIC- ների օգտագործման վերաբերյալ խորհուրդների համար դիմեք վերը նշված հրահանգներին կամ այս կայքի բազմաթիվ այլ հրահանգներին: Այսպիսով, ահա….. Minidot 2, The Holoclock …… կամ Minidot The Next Generation …………:

Քայլ 1: Շղթան

The Circuit
The Circuit
The Circuit
The Circuit
The Circuit
The Circuit

Այս սխեման շատ նման է Microdot- ին: Ուշադրություն դարձրեք, որ charlieplex զանգվածը գործնականում նույնական է… միայն մի քանի կապում են տեղափոխվել:

Microdot շղթայում ավելացվել է 20 ՄՀց բյուրեղ ՝ PIC- ն շատ ավելի արագ կարգավորելու համար, ինչը թույլ է տալիս զանգվածն ավելի արագ սկանավորել և թույլ է տալիս նվազեցման ալգորիթմի իրականացում: Թուլացման ալգորիթմը շատ կարևոր էր խաչաձև օրինակը մարելու և շրջակա լույսի գործառույթը գործարկելու համար: Microdot- ի դեպքում դա անհնար կլիներ ՝ ժամացույցի ավելի դանդաղ արագության պատճառով, քանի որ սկանավորման որոշ ցիկլեր պետք է ծախսվեին մթագնելու վրա: Տեսեք հաջորդ բաժինը ՝ Dimming գործառույթի նկարագրության համար: Մյուս բաները, որոնք պետք է նշել, MCP1252 լիցքավորման պոմպի կարգավորիչի օգտագործումն է `5V- ը, այս պահին իմ ամենասիրելի չիպը մատակարարելու համար: Եթե դուք փոխեք շղթան, կարող եք օգտագործել սովորական հին 7805 ……: Այժմ ես անջատիչները տեղափոխել եմ առջև, պահպանում է ժամացույցի ետևում ժամացույցի սլաքը `էներգիան անջատելուց հետո` ժամանակը վերականգնելու համար, և այժմ ամեն ինչ միայն մեկ PCB է …: Նաև ուշագրավ է LDR- ի ներառումը: Սա օգտագործվում է լարման բաժանարարում, որը զգացվում է PIC- ի A/D կապով: Երբ PIC- ը զգում է, որ շրջակա միջավայրի լույսի մակարդակը ցածր է (այսինքն ՝ գիշերային ժամերին), մթնեցման ալգորիթմը charlieplex զանգվածը մութ է պահում ավելի շատ ցիկլեր, քան երբ լուսավորության մակարդակը բարձր է: Ես Eaglecad գրադարանում չկարողացա գտնել LDR խորհրդանիշ, այնպես որ ես պարզապես օգտագործեցի LED խորհրդանիշ….. չխաբվեք, դա LDR է: Ստորև տեսեք PCB- ի իրական պատկերը: Շառլիպլեքս զանգվածում բազմագույն լուսադիոդներ օգտագործելիս պետք է ուշադրություն դարձնել: Դուք պետք է համոզվեք, որ LED- ների առաջային լարումը քիչ թե շատ նույնն է: Եթե ոչ, ապա կարող են առաջանալ թափառող ընթացիկ ուղիներ, և մի քանի LED լուսավորվեն: Այսպիսով, այս կազմաձևի համար 5 մմ կամ ավելի հզորության LED- ների օգտագործումը չի աշխատի, քանի որ սովորաբար բավականին մեծ տարբերություն կա կանաչ/կապույտ LED- ների և կարմիր/դեղին LED- ների միջև: Այս դեպքում ես օգտագործեցի 1206 SMD լուսարձակներ և հատկապես բարձր արդյունավետությամբ կանաչ/կապույտ LED- ներ: Չնայած այստեղ առաջային լարումները խնդիր չէին: Եթե ցանկանում եք օգտագործել կանաչ/կապույտ և կարմիր/դեղին բարձր հզորության LED- ների խառնուրդ Charlieplex զանգվածում, ձեզ հարկավոր է տարբեր գույները առանձնացնել երկու charliplex զանգվածների: Կան charlieplexing- ի բազմաթիվ բացատրություններ, որոնք կարելի է գուգլացնել …… Ես այստեղ չեմ մանրամասնի: Ես ձեզ թողնում եմ որոշ հետազոտություններ կատարել: (Սեղմեք նկարի անկյունում գտնվող փոքրիկ «i» պատկերակին ՝ ավելի մեծ տարբերակ տեսնելու համար)

Քայլ 2. Թուլացման ալգորիթմ - Charliplexed Pulse Width Modulation

The Dimming Algorithm - Charliplexed Pulse Width Modulation
The Dimming Algorithm - Charliplexed Pulse Width Modulation

Ինչպես արդեն նշվեց, ես ուզում էի, որ ժամանակի տարբեր կետերի նախշերը սահուն մարեն, այլ ոչ թե մեկ օրինակից մյուսը ցնցվի: Տեսանյութը դիտեք ցուցադրության համար: Միջին մասում նոր Minidot ժամացույցն է, աջում `հին Minidot- ը: Ուշադրություն դարձրեք, թե որքան գեղեցիկ է նորը: (ՖԱ մյուս ֆոնային ցուցադրումներն են ՝ Minicray գերհամակարգչի կարգավիճակի ցուցադրումը և Նեբուլոնի իմ գրաված մասնիկը, որը հզորացնում է Minicray- ը հակամագնիսական մագնիսական սահմանափակման դաշտում: Տես այստեղ ՝ https://www.youtube.com/watch? V = bRupDulR4M demonstույցի համար նեբուլոնի փակման պալատի) Եթե նայեք ծածկագրին, բացեք display.c ֆայլը: Ուշադրություն դարձրեք, որ tris/port արժեքները քարտեզագրելու համար կան չորս զանգվածներ `որոշակի զանգվածը լուսավորելու համար, և երկու զանգված (մեկը` Microdot ծածկագրից ավելի) `որոշելու համար, թե որ LED- ները պետք է լուսավորված լինեն LED- ների որևէ օրինակի համար: օրինակ.

// LED1 LED2 LED3… անստորագիր նշան LEDS_PORTA [31] = {0x10, 0x00, 0x00,… անստորագիր char LEDS_TRISA [31] = {0xef, 0xff, 0xff,… անստորագիր լիցք LEDS_PORTB [31] = {0x00, 0x02, 0x04, … Անստորագիր նշան LEDS_TRISB [31] = {0xfd, 0xf9, 0xf9,… անստորագիր char nLedsA [30]; անստորագիր char nLedsB [30];Օրինակ ՝ LED1 լուսավորելու համար հարկավոր է տեղադրել TRIS գրանցամատյաններ TRISA: B = 0xef: 0xfd և PORT գրանցամատյաններ PORTA ՝ B = 0x10: 0x00 և այլն: Եթե դուք գրում եք tris արժեքները երկուականում, ապա նկատում եք, որ ցանկացած պահի միայն երկու ելք է միացված: Մյուսները բոլորը սահմանվում են Tri-state (հետևաբար TRIS գրանցամատյան): Սա կենտրոնական դեր ունի charlieplexing- ի համար: Նաև կնկատեք, որ մեկ ելքը միշտ տրամաբանական է «1», իսկ մյուսը ՝ միշտ տրամաբանական «0» …: որի ուղղությունը միանում է, թե որ LED- ն է այս երկու ելքային գծերի միջև: զանգվածները զրոյական արժեք են ՝ LED- ն ընդհանրապես միացնելու համար: Microdot- ում update_display գործառույթը շարունակաբար պտտվում էր մեկ այլ զանգվածի միջոցով (nLeds ) `տեսնելու, թե արդյոք տվյալ LED- ը պետք է լուսավորված լինի: Եթե դա լիներ, ապա համապատասխան tris/port արժեքները սահմանվեցին, և LED- ը որոշ ժամանակ լուսավորվեց: Հակառակ դեպքում զրոյական արժեքն ուղարկվում էր PICs TRIS/PORT գրանցամատյաններին և LED- ը որոշ ժամանակ չէր լուսավորվում: Երբ դա արվում էր բավական արագ, դա օրինակ էր տալիս: Theրագրի մնացած մասը պարբերաբար կկարդա RTC- ի արժեքները և կստեղծի մի գեղեցիկ պատահական օրինակ այդ զանգվածում … և այդպես փոխվեց էկրանը: Որպեսզի լուսավորող գործառույթ կատարելու համար այն մի փոքր երկարաձգվեց այնպես, որ 30 լուսադիոդային լուսարձակները կամ լուսավորված լինելուց հետո (կամ ոչ), ապա լրացուցիչ ժամանակաշրջաններ կծախսվեն զրոյական արժեքներ ուղարկելու վրա, եթե էկրանը մթագնի….. լիարժեք պայծառության համար, ապա լրացուցիչ ժամանակաշրջաններ չեն ծախսվի: Երբ կրկնվում է, եթե լուսավորված LED- ների համար կան բազմաթիվ զրոյական ժամանակաշրջաններ, էկրանը մշուշոտ կլինի: Իրականում սա զարկերակի լայնության բազմակողմանի մոդուլյացիա է….. կամ քանի որ ապարատը կազմաձևված է charlieplex շարքում, այնուհետև charlieplexed զարկերակի լայնության մոդուլյացիայում: Ստորև բերված երկրորդ դիագրամը ցույց է տալիս դրա հիմնական կարգավորումը: Ես սա անվանում եմ սկանավորման շրջանակ: Շրջանակի առաջին 30 շրջաններն օգտագործվում են լուսադիոդային լուսարձակների միջով անցնելու համար … և մի շարք լրացուցիչ ժամանակաշրջաններ սահմանում են, թե որքան լուսավոր կլինի էկրանը: Այս ցիկլը կրկնվում է: Ավելի շատ զրոյական ժամանակաշրջաններ նշանակում է ավելի քիչ ժամանակ, որպեսզի LED- ը մի շրջանակի վրա լինի (քանի որ ժամանակաշրջանների թիվն ավելացել է): Ուշադրություն դարձրեք, որ ուղղահայաց առանցքը չի նշանակում լարման մակարդակ: LED- ների գնացող քորոցների իրական վիճակը տատանվում է ՝ կախված Charlieplex զանգվածում նրա դիրքից….. դիագրամում դա պարզապես նշանակում է միացում կամ անջատում: Սա նաև նշանակում էր, որ ժամանակի ընթացքում շրջանակի ընդհանուր երկարությունը նույնպես ավելացել է ՝ դրանով իսկ նվազեցնելով թարմացումը դրույքաչափը: Երբ լուսադիոդներն ավելի մթնում էին, նրանք այլ կերպ կսկսեին թարթել: Այսպիսով, այս մեթոդը օգտակար է միայն որոշ չափով: Theամացույցի համար դա նորմալ էր: Ֆունկցիան կոչվում է ընդհատումներով, որը կարդում է A/D փոխարկիչը PIC- ում և սահմանում այս պայծառության մակարդակը: Եթե կարդում եք ծածկագիրը, այն նաև ստուգում է, թե արդյոք LED- ն ամենամոտ է LDR- ին, և որևէ մակարդակի պարամետր չի անում, եթե այո, դա դադարում է ցուցադրման անսպասելի լուսավորությունը, երբ փոխվում է օրինակը: Հաջորդ խաչաձև մարման գործառույթը:

Քայլ 3. Խամրեցման ալգորիթմ. Խաչաձև մարում և երկակի բուֆերացում

Թուլացման ալգորիթմ. Խաչաձև մարում և երկակի բուֆերացում
Թուլացման ալգորիթմ. Խաչաձև մարում և երկակի բուֆերացում

Մեկ օրինակի և մյուսի միջև անցումը նախկինում անմիջական էր: Այս ժամացույցի համար ես ուզում էի ցույց տալ մի օրինաչափություն, որն աստիճանաբար նվազում էր պայծառությամբ, իսկ հաջորդ օրինակը աստիճանաբար աճում էր … այսինքն ՝ խաչը մարում է:

Ինձ պետք չէր ունենալ առանձին լուսադիոդներ `առանձին պայծառության մակարդակներում վերահսկվելու համար, որպեսզի խաչը մարվի: Պարզապես անհրաժեշտ էր առաջին օրինակը մեկ պայծառությամբ, իսկ երկրորդը `ցածր պայծառությամբ: Այնուհետև կարճ ժամանակահատվածում ես մի փոքր կնվազեցնեի առաջինի պայծառությունը և կբարձրացնեի երկրորդը … … սա կշարունակվեր մինչև երկրորդ օրինակը ամբողջությամբ: Այնուհետև ժամացույցը կսպասեր մինչև հաջորդ օրինակը պետք է ցուցադրվեր, և այլ անցում կլիներ: Այսպիսով, ես պետք է պահեի երկու օրինաչափություն: Մեկը, որը ներկայումս ցուցադրվում է, և երկրորդ օրինակը, որը պատրաստվում էր ցուցադրվել: Սրանք nLedsA և nLedsB զանգվածներում են: (նշեք, որ այս դեպքում կապ չկա նավահանգիստների հետ): Սա կրկնակի բուֆեր է: Upd_display () ֆունկցիան փոխվել է ՝ շրջանցելով ութ շրջանակ և ցույց տալ մի շարք շրջանակներ սկզբում մեկ զանգվածից, այնուհետև մյուսից: Ութ ցիկլերի ընթացքում յուրաքանչյուր բուֆերին հատկացված շրջանակների թիվը փոխելը սահմանեց, թե որքան պայծառ կլինի յուրաքանչյուր օրինակը: Երբ ավարտեցինք բուֆերների միջև հեծանվավազքը, մենք փոխեցինք «ցուցադրման» և «հաջորդ ցուցադրման» բուֆերները, այնպես որ օրինաչափություն ստեղծող գործառույթը այնուհետև կգրեր միայն «հաջորդ ցուցադրման» բուֆերին: Ստորև բերված դիագրամը դա հուսով է ցույց տալիս: Դուք պետք է կարողանաք տեսնել, որ անցումը կտևի 64 սկան շրջանակ: Նկարում փոքրիկ ներդիրը ցույց է տալիս նախորդ էջի սկանավորման շրջանակի սխեման, որը հմտորեն փոքրացված է: Մի խոսք կրկին թարմացման դրույքաչափի մասին: Այս ամենը պետք է արվի շատ արագ: Այժմ մենք ունենք լրացուցիչ հաշվարկի երկու մակարդակ ՝ մեկը շրջապատող էկրանների աղոտության և մյուսը ութ շրջանակային ցիկլերի համար, որոնք ծախսվել են երկու բուֆերների միջև անցում կատարելու համար: Այսպիսով, այս կոդը պետք է գրվեր հավաքման մեջ, բայց բավականաչափ լավ է «C» տառով:

Քայլ 4. Շինարարություն - PCB

Շինարարություն - PCB
Շինարարություն - PCB
Շինարարություն - PCB
Շինարարություն - PCB

Սա բավականին պարզ է: Պարզապես երկկողմանի PCB, որի վերևում կան SMD բաղադրիչներ: Կներեք, եթե դու անցք ունեցող մարդ ես, բայց շատ ավելի հեշտ է SMD նախագծեր պատրաստել…: առանց անցքերի փորելու: Դուք պետք է ունենաք կայուն ձեռք, ջերմաստիճանի վերահսկվող զոդման կայան և շատ լույս և խոշորացում `ամեն ինչ ավելի հեշտ դարձնելու համար:

PCB- ի կառուցման մեջ միակ ուշագրավը PIC- ի ծրագրավորման միակցիչի ներառումն է: Սա միանում է PIC- ի ICSP կապերին, և ձեզ անհրաժեշտ կլինի ICSP ծրագրավորող: Կրկին ես հարմար օգտագործեցի իմ junkbox միակցիչը: Կարող եք բաց թողնել սա և պարզապես ցանկության դեպքում լարերը կպցնել բարձիկներին: Այլապես, եթե ունեք միայն վարդակից ծրագրավորող, կարող եք պատրաստել վերնագիր, որը միացված է ձեր վարդակին, այնուհետև այն կպցնել ICSP բարձիկներին: Եթե դա անում եք, ապա անջատեք Rx- ը և միացրեք Ry- ն, որոնք ընդամենը զրոյական օհմ հղումներ են (ես պարզապես օգտագործում եմ զոդման բլբ): Սա անջատելու է մնացած միացման հոսանքը PIC- ից, որպեսզի չխանգարի ծրագրավորմանը: Տեղադրված ծրագրավորողը ICSP ծրագրավորողի պես օգտագործում է ICSP կապերը, իրականում կախարդական գործ չկա: Դուք նաև պետք է դա անեք, եթե սխալմամբ մոռացել եք ծածկագրի հետաձգումը նախքան RTC- ի գործարկումը: 16F88- ի համար ICSP ծրագրավորման կապերը նույնն են, ինչ RTC- ի համար օգտագործվող 32.768kHz բյուրեղի համար անհրաժեշտ կապում ……. Սովորաբար, եթե MCLR կապի վրա վերակայում է տեղի ունենում և հետաձգում կա, ապա ICSP- ի տվյալները կարող են ուղարկվել այս կապումներին, և ծրագրավորումը կարող է ճիշտ սկսվել: Այնուամենայնիվ, իշխանությունը PIC- ին մեկուսացնելով, ICSP ծրագրավորողը (կամ գլխիկով միացված ծրագրավորողը) կարող է վերահսկել սարքի հզորությունը և ստիպել ծրագիր: Մյուս բաները, որոնք պետք է նշել, այն է, որ PCB- ի բյուրեղյա բարձիկներն ի սկզբանե նախատեսված էին SMD բյուրեղների համար: Ես անհամբերությամբ սպասում էի, թե երբ կփոխանցվի, այնպես որ 32.768 կՀց ժամացույցի բյուրեղը կպցվեց վերևին, ինչպես ցույց է տրված, և 20 ՄՀց բյուրեղը ամրացվեց ՝ բարձիկների վրա մի երկու անցք հորատելով, բյուրեղը ներքևից ներս խոթելով և կպցնելով դրա վրա: գագաթ. Դուք կարող եք տեսնել կապում PIC16F88- ի աջ կողմում:

Քայլ 5. Հոլոգրաֆիկ ֆիլմ և բնակարան

Հոլոգրաֆիկ ֆիլմ և բնակարան
Հոլոգրաֆիկ ֆիլմ և բնակարան
Հոլոգրաֆիկ ֆիլմ և բնակարան
Հոլոգրաֆիկ ֆիլմ և բնակարան
Հոլոգրաֆիկ ֆիլմ և բնակարան
Հոլոգրաֆիկ ֆիլմ և բնակարան

Վերջնական կառուցվածքը պարզապես PCB- ն դնում է պատյանում և ծրագրավորումից հետո այն կպցնում տաք սոսինձով: Երեք անցք թույլ են տալիս մուտք գործել միկրո անջատիչներ առջևից:

Այս ժամացույցի ուշագրավ մասը հոլոգրաֆիկ դիֆուզորային ֆիլմի օգտագործումն է: Սա հատուկ ֆիլմ է, որի շուրջ ես պառկած էի, և սարքին գեղեցիկ խորություն է հաղորդում: Դուք կարող եք օգտագործել պարզ հետագծող թուղթ (որի մեջ ես PCB- ն ավելի մոտ կդարձնեի առջևին), կամ ցանկացած այլ դիֆուզոր, ինչպիսին նրանք են, որոնք օգտագործվում են ֆլուորեսցենտ լուսատուներում: Փորձի մասին, միակ բանը, որ պետք է անի, դա թույլ է տալիս տարբերել լուսավորված լուսադիոդների քանակը, այլապես ժամանակը հաշվելը դժվար կլինի: Ես օգտագործել եմ Physical Optics Coorporation- ի (www.poc.com) հոլոգրաֆիկ ցրման նյութը ՝ 30 աստիճանի շրջանաձև ցրվածությամբ, իսկ գերհամակարգչի կարգավիճակի ցուցադրումը, որը ցուցադրված է այլուր, հրահանգի մեջ, օգտագործել է 15x60 աստիճանի էլիպսիկ ցրված ֆիլմ: Դուք կարող եք օգտագործել որոշ մռայլ ժապավեն ՝ ցերեկը թաքցնելու փայլուն ներսը ՝ ավելի խորհրդավոր տեսք ստանալու համար: Դուք նույնիսկ կարող եք ցուցադրումը պարզ թողնել և թույլ տալ, որ մարդիկ ներքինը տեսնեն, ինչպես ես: Սալիկը երկու կտոր ալյումինե «L» ձուլակտոր էր, որը ներքևում մի փոքր կտրված էր ՝ թեքում թույլ տալու համար: Նկատի ունեցեք, որ այս նկարներում լրացուցիչ լուսավորություն է ավելացվել, որպեսզի կարողանաք տեսնել ցուցադրման կափարիչները և այլն:

Քայլ 6: Softwareրագրակազմ և օգտագործողի միջերես

Սարքի շահագործումը շատ պարզ է, հատուկ նախշերի ռեժիմներ կամ շողշողացող իրեր չկան: Միակ բանը, որ անում է, ժամանակի ցուցադրումն է:

Setամը սահմանելու համար նախ սեղմեք SW1: Սարքը մի քանի անգամ կթարթի բոլոր LED- ները, այնուհետև SW3 LED- ների 10 -ժամյա խումբը կբարձրացնի ընտրված SW2 խումբը, որը կտեղափոխվի LED- ների հաջորդ խումբ `ամեն անգամ կարճ լուսարձակումով խմբի բոլոր LED- ները: Կոդը գրված է Sourceboost 'C' կազմող 6.70 տարբերակի համար: RTC ծածկագիրը t1rtc.c/h ֆայլերում է և ունի PIC- ի T1 ժմչփի վրա ընդհատման գործառույթ: T1 ժամաչափը կարգավորվում է ընդհատել յուրաքանչյուր 1 վայրկյանը մեկ: Յուրաքանչյուր վայրկյանում ժամանակի փոփոխականը ավելանում է: Բացի այդ, ժամանակի հետ մեկ վայրկյանում հաշվում է տիզ -ժամաչափը: Սա օգտագործվում է որոշելու, թե երբ է անցում կատարել էկրանին: Ընդհատման գործառույթը նաև օգտագործում է T0 ժմչփի ընդհատումը `էկրանը թարմացնելու համար` էկրանին գործառույթ կանչելով: c. Display.h/display.c ֆայլերը պարունակում են էկրանը թարմացնելու և ժամանակը ցույց տալու ֆայլերը control.c/h պարունակում են գործառույթները `ժամանակը սահմանելու և անջատիչները կարդալու համար: holoclock.c/h ֆայլերը հիմնական օղակներն են և նախաստորագրումը:

Խորհուրդ ենք տալիս: