Skaitmeninis laikrodis. Elektroninis laikrodis su vienu skaitmeniu Elektroninis laikrodis rodo skaičius, kaip parodyta

Tikriausiai joks prietaisas nėra taip jautrus visokiems pokyčiams ir neįprastiems įsikūnijimams, kaip paprastas laikrodis. Pradedant saulės ir baigiant atominiais - o kiek skirtingų variacijų tarp jų yra... Periodiškai publikuodami ypač įdomias schemas ir dizainus iš užsienio šaltinių, o šį kartą supažindinsime su kitu esamo laiko rodymo įrenginiu, kuris yra ne tik ant seno buitinio vakuumo indikatoriaus, taip pat yra tik vienas skaičius.

Vieno skaitmens laikrodžio diagrama

Šis laikrodis naudoja PIC16F84A mikrovaldiklį. Grandinė yra gana paprasta, nes joje naudojamas vienas indikatorius, valdomas tranzistorių, ir jai nereikia labai galingo galios keitiklio.

Jų naudota lempa buvo sovietinė IN-12A. Aukštos įtampos tiekimas gaunamas naudojant pigaus (neveikiančio) skaitmeninio fotoaparato komponentus, todėl jis beveik nieko nekainuoja.

Laikrodis rodo laiką taip, kad periodiškai indikatoriaus skaičiai keičiasi nuo dešimčių valandų iki minučių. Tada jie kelioms sekundėms išeina. Pavyzdžiui, parodyti laiką 12:45 , pirmiausia užsidegs sekundei 1 , Tada 2 , Tada 4 , Tada 5 . Ir kelių sekundžių pauzė.

Norėdami nustatyti laiką, turite paspausti mygtuką, tada skaičius, kurį norite pakeisti, padidės kiekvieną kartą paspaudus ir taip toliau apskritime nuo 0 iki 9.

Pagrindinėje plokštėje yra visi komponentai, išskyrus aukštos įtampos galios konvertavimo modulį. Visi plokščių, programinės įrangos ir kt. failai yra bendrame archyve. Grandinei reikalingi komponentai:

  • IN-12 indikatorius
  • MK PIC16F84A
  • 10x aukštos įtampos SMD tranzistoriai MMBTA42
  • 13x 0805 rezistoriai
  • Kvarcas 4 MHz
  • 2x 22pF kondensatoriai
  • Mygtukas

Aukštos įtampos keitiklis, kaip minėta aukščiau, naudoja iš fotoaparato blykstės pašalintus komponentus – transformatorių, diodą ir išėjimo kondensatorių.

Jei nuspręsite surinkti šį laikrodį, atminkite, kad jis naudoja aukštą įtampą – iki 400 V. Būkite atsargūs surinkdami ir eksploatuodami!

Norėdami užprogramuoti kodą į PIC, jums reikės programuotojo ir programavimo programinės įrangos. Čia mes panaudojome kinišką programuotoją k150. Turite įkelti .hex failą į programą ir įrašyti MK lustą.

Prieš išradant pirmuosius laikrodžius, žmonės laiką matavo stebėdami saulę. Ryte saulė pakyla virš horizonto iš vienos pusės, tada kerta dangų į priešingą pusę ir nusileidžia žemiau horizonto. Kitą rytą nutinka tas pats.

Laikas, per kurį saulė visiškai apsisuka, vadinamas dieną. Dienos virsta savaitėmis. Savaitės į mėnesius. Mėnesiai į metus. Metai į šimtmečius.

Viename amžiuje yra 100 metų.

Vieni metai turi 12 mėnesių.

Vienas mėnuo turi 30 arba 31 dieną.

Laikui bėgant diena buvo padalinta į dvi dalis prieš pietus ir po pietų. Kiekviena dalis buvo padalinta į 12 dalių – valandų. Štai kodėl laikrodyje yra 12 skyrių. Paroje yra tik 24 valandos.

Pažiūrėkime į laikrodį. Paryškintos linijos ir skaičiai čia rodo valandas. Maža rodyklė rodo valandas. Per dieną maža ranka daro du apsisukimus po 12 valandų. Lėtai mažoji rankytė juda iš valandos į valandą.

Valanda padalinta į 60 dalių – minučių. Tai yra, 1 valanda 60 minučių.

Laikrodžio ciferblatas padalintas į 60 dalių (vienas padalijimas – viena minutė). Didelė ranka rodo minutes. Kai didžioji ranka padaro vieną apsisukimą, praeina valanda, o mažoji ranka pasislenka 1 valandą.

Atgalinis skaičiavimas prasideda 12. Vidurnaktį – 0 valandos 0 minučių arba 12 valandą nakties.

Kai mažoji rankelė padarys pilną apsisukimą, praeis 12 valandų ir bus 12 – 12 val.

Elektroniniame laikrodyje laikas rodomas skaičiais, pavyzdžiui, 1 valanda ryto bus rodoma taip:

AM (lot. ante meridiem – prieš vidurdienį), reiškia, kad rodomas laikas yra nuo vidurnakčio iki vidurdienio arba nuo 0 iki 12 valandų.

Po 12 valandos atgalinis skaičiavimas tęsiasi. Po valandos bus 13 valandų arba 1 valanda po vidurdienio, tada 14 (arba 2 valandos po vidurdienio):

PM (lot. post meridiem - po vidurdienio) - rodomas laikas yra nuo vidurdienio iki vidurnakčio, tai yra nuo 12 iki 12 nakties arba nuo 12 iki 24 valandų

Minučių rodyklė apsuka ratą per valandą. Vienas padalijimas – 1 minutė. Kai minučių rodyklė rodo į 1, tai yra 5 minutės, 2 yra 10 minučių, 3 yra 15 minučių ir taip toliau, kol minučių rodyklė apsuka visą ratą ir grįžta į 12–60 minučių:

Sukurkime dienos valandų lentelę:

00:00 val

01:00 val

02:00 val

03:00 val

04:00 AM

05:00 val

06:00 val

07:00 AM

08:00 val

09:00 val

10:00 RYTO

11:00 val

12:00

01:00 PM

14:00 val

15:00 val

16:00 val

Sutvarkiau skaitmeninį laikrodį. Tai nerealiai šaunu, turint omenyje, kad niekada nebuvau elektronikos ekspertas. Tai pirmas kartas mano gyvenime. Problema ta, kad jie pradėjo išsijungti, kai suveikė žadintuvas. Maniau, kad oro kondicionierius prarado oro kokybę. Nepaisant perkėlimo, aš vis dar turiu oro kondicionierių, prilituotų iš senos grandinės plokštės. Atitinkamai, kojos buvo labai trumpos. Pridėjau laidus. Prilitavo lygiagrečiai senajam ir veikė. Įdomu tai, kad lentoje buvo vietos tik dar vienam oro kondicionieriui.

Bendra forma:

Bet žalią statinę litavau:

Puikiai veikia.

Dėl vieno dalyko nusprendžiau eksperimentuoti. Neseniai sužinojau apie dinaminius rodiklius. Tai reiškia, kad daugelio įrenginių šviečiantys indikatoriai ne nuolat dega, o nuolat mirksi, nes taip pigiau, mažiau laidų. (Tai netaikoma skystiesiems kristalams. Jie visiškai nedega, tai filtrai, o lemputė po jais šviečia.) Įdomu, kaip tai veikia nervų sistemą... Patikrinti galima nufotografuoti kokį ekraną. esant trumpam užrakto greičiui kelis kartus ir ten bus matoma visa painiava. Šiame laikrodyje jis tapo matomas jau esant 1/150 užrakto greičiui.





Jei kas nesupranta: filmavau puikiai tinkantį laikrodį. Kad ir kaip atidžiai žiūrėtum, plika akimi neįmanoma įžvelgti jokio mirgėjimo. Nustatome užrakto greitį iki 1/25 - viskas tampa įprasta:

O su akimis viskas atrodo gerai. Taip rodikliai mus apgauna. Visi.

Įvairių funkcijų elektroniniai laikrodžiai yra vienas plačiausiai kasdieniame gyvenime naudojamų elektroninių prietaisų, kurio valdymas pagrįstas baigtinės būsenos mašinos modeliu. Elektroniniai laikrodžiai dažniausiai rodo laiką, datą, leidžia nustatyti laiką ir datą, taip pat atlieka daug kitų funkcijų (pavyzdžiui, juos galima paversti chronometru su reset ir stop, žadintuvu ir pan.). Visas šias galimybes valdo įmontuotas baigtinių būsenų automatinis keitiklis, kurio įėjimai yra išorinių valdymo mygtukų paspaudimo įvykiai. Elektroninio laikrodžio blokinė schema parodyta fig. 3.11. Valdymo mygtukai čia pažymėti kaip „a“ ir „b“. Be ekrano įrenginio, rodančio skaitmenis ir ekrano grandinės, konvertuojančios skaitmenų BCD kodus į septynių skaitmenų šviesos diodų valdymo kodą, diagramoje rodomi keturi ekrano registrai, kuriuose saugomi keturių skaitmenų, šiuo metu rodomų ekrane, BCD kodai. ratukas, naudojant grandinę ir įrenginio ekranus, „ARBA“ kombinuotas grandines, kurios perduoda bet kurį iš leistinų kodų į ekrano registrus, „Control“ magistralę, leidžiančią kiekvienoje situacijoje išvesti tik chronometro, laikrodžio ar datos signalus. rodyti registrus. Grandinėje taip pat yra chronometro registrai ir žymėjimo generatorius, kuris sukuria signalą, kurio dažnis yra 1 Hz. Figūroje užfiksuota akimirka „birželio 19 d., 15 valandos 04 minutės, 43 sekundės“.

3.11 pav. Elektroninio laikrodžio blokinė schema

Valdymo įtaisas, organizuojantis visų elektroninio laikrodžio elementų darbą, yra sukurtas baigtinės būsenos mašinos modelio pagrindu. Šio automato perėjimo grafikas parodytas fig. 3.12. Pradinėje būsenoje rodomas laikas. Tai reiškia, kad šios būsenos dvejetainis kodas (po dekodavimo) atveria keturių dvejetainių dešimtainių registrų, kuriuose saugomi vienetai ir dešimtys minučių bei vienetai ir dešimtys valandų, išvestis į keturių kombinuotų „ARBA“ grandinių įvestis.

3.12 pav. Automatinis elektroninio laikrodžio valdymo įtaisas

Baigtinės būsenos mašina reaguoja į įvykį paspaudus mygtuką „a“ ant laikrodžio korpuso pereidama į būseną „ Minučių nustatymas“, kai paspaudus mygtuką „b“ padidės minutėms skirtuose registruose saugomas skaičius. Tokiu atveju blokuojami pervedimai iš sekundžių registro ir į numeriams saugoti skirtą registrą. Įvykis, kai paspaudžiamas mygtukas „b“ būsenoje Įvert. mėnesių“ padidins mėnesiui skirtuose registruose saugomų skaičių. Fig. 3.12 nerodo galimybės ir algoritmo dirbti su chronometru.

Pramonė gamina įvairių tipų elektroninius laikrodžius su skirtingomis funkcijomis. Tokių laikrodžių valdymo grandines galima sukonstruoti, jei turite įgūdžių įdiegti baigtinių funkcinių keitiklių ir sukurti baigtinių automatinių diskrečiųjų valdymo sistemų modelius.

Klausimas: Problema. Elektroniniai laikrodžiai, pagrįsti paprastomis aritmetinėmis operacijomis


Sveiki, forumo vartotojai!
Padėkite man išspręsti šią problemą, prašau >><
Užduotis:
Elektroniniai laikrodžiai laiką rodo h:mm:ss formatu, tai yra iš pradžių fiksuojamas valandų skaičius, po to reikalingas dviženklis minučių skaičius, vėliau – dviženklis sekundžių skaičius. Minučių ir sekundžių skaičius, jei reikia, užpildomas dviženkliu skaičiumi su nuliais.

Nuo dienos pradžios praėjo N sekundžių. Atsispausdinkite, ką parodys laikrodis.
Įvesties duomenys
Įveskite sveikąjį skaičių n.

Išvestis
Išspausdinkite atsakymą į problemą, vadovaudamiesi reikiamu formatu.

Pavyzdžiai
įvesties duomenys
3602
išvestis
1:00:02

Štai ką aš gavau:

Java
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 importas ; importuoti javax.swing.plaf.synth.SynthOptionPaneUI; importuoti java.util.Scanner ; viešosios klasės užduotis ( public static void main (String args) ( Skaitytuvas in = naujas Skaitytuvas (System .in ) ; long n,h,m,s; n = in.extLong () ; h = (n % (3600 * 24) ) ) /3600 ; m = (n % 3600 ) / 60 ;< 10 ) { if (s< 10 ) { System .out .println (h+ ":0" +m+ ":0" +s) ; } else if (s>10 ) ( System .out .println (h+ ":0" +m+ ":" +s) ; ) ) else if (m> 10 ) ( if (s)< 10 ) { System .out .println (h+ ":" +m+ ":0" +s) ; } else if (s>10 ) ( System .out .println (h+ ":" +m+ ":" +s) ; ) ) )

Šis sprendimas ne visais atvejais teisingas, nors nesuprantu kodėl =c
Padėkite man rasti problemą, būsiu dėkingas!

Atsakymas:

Java
1 2 3 int i = 3602; Vietinis laikas = LocalTime.MIDNIGHT .plus (i, SEKUNDĖS) ; Sistema .out .println (laikas) ;

Klausimas: Elektroninis laikrodis su žadintuvu Delphi


Draugai, reikia apginti savo praktiką, gavome elektroninio laikrodžio su žadintuvu užduotį, kas padės ar išmes?)
Būsiu labai, labai dėkingas)

Pridėta po 1 minutės
draugai, pageidautina su žodžiais)

Atsakymas:

Pranešimas nuo anegdot

Pasirodo, elektroninis laikrodis

Pažiūrėkime į jūsų laikrodį ir kas ten neveikia.


Įvesties duomenys

Išvestis





Python
1 2 3 4 5 6 7 8 9 n = int(input()), jei n< 1440 : print (n//60 ) print (n%60 ) else : a = 1440 - n a *= -1 print (a//60 ) print (a%60 )

Atsakymas: Galima išspręsti be sąlygų:

Klausimas: Elektroniniai laikrodžiai


Būtina sukurti programą, kuri įgyvendintų elektroninį laikrodį. Skaičiai realizuojami grafiškai per stačiakampių rinkinį, o ne teksto forma.
Reikalingi sąsajos elementai: pagrindinė meniu juosta, formos elementai arba ypatybės „Canvas“ naudojimas skaičiams ir valdymo mygtukams piešti.

Atsakymas: xxbesoxx, ne taip paprasta. Užduotis

Pranešimas nuo Kapetra

Skaičiai realizuojami grafiškai per stačiakampių rinkinį, o ne teksto forma

Kapetra,

P.S. jei atidžiai pažiūrėsite į temą, rasite daug įdomių dalykų

Klausimas: Problema dėl elektroninių laikrodžių


Duotas skaičius n. nuo dienos pradžios praėjo n minučių. Nustatykite, kiek valandų ir minučių šiuo metu rodys skaitmeninis laikrodis.

Įvesties duomenys
Įveskite skaičių n – sveiką skaičių, teigiamą, neviršijantį 10 iki septintos laipsnio.

Išvestis
Programa turi išvesti du skaičius: valandų skaičių (nuo 0 iki 23) ir minučių skaičių (nuo 0 iki 59).

Atkreipkite dėmesį, kad skaičius n gali būti didesnis nei minučių skaičius per dieną.
__________________________________________________________________________________________
mano sprendimas, padėkite man rasti klaidą.
___________________________________________________________________________________________

Python kodas
1 2 3 4 5 6 7 8 9 n = int(input()), jei n< 1440 : print (n//60 ) print (n%60 ) else : a = 1440 - n a *= -1 print (a//60 ) print (a%60 )

Atsakymas:

Pranešimas nuo Andrejus_Goa

Sužinokite dienų skaičių

Kodėl tai? Dienų skaičiaus niekur nereikės, tik likusios dalybos

Python kodas
1 2 valandos = (n % 1440 ) // 60 min = (n % 1440 ) % 60

Klausimas: "Elektroniniai laikrodžiai"


Pati užduotis: „Elektroninis laikrodis laiką rodo h:mm:ss formatu, tai yra iš pradžių užrašomas valandų skaičius, tada reikalingas dviženklis minučių skaičius, tada dviženklis sekundžių skaičius. Reikalingas minučių ir sekundžių skaičius, jei reikia, papildomas dviženkliu skaičiumi su nuliais.
Nuo dienos pradžios praėjo N sekundžių. Spausdinkite, ką parodys laikrodis“.
Nuoroda į jį: .
Paskalis
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 Programos laikas2; var a, n: Sveikasis skaičius ; Pradėti Readln (n) ; Jei n = 0, tada Writeln ("00" , ":" , "00" , ":" , "00" ) else If (n<3600 ) and ((n div 60 ) <10 ) and ((n mod 60 ) <10 ) then Writeln ("00:0" , n div 60 , ":0" , n mod 60 ) else If (n<3600 ) and ((n div 60 ) >= 10 ) ir ((n mod 60 ) >= 10 ) tada Writeln ("00:" , n div 60 , ":" , n mod 60 ) else If (n<86400 ) and (n>3600 ) ir ((n div 3600 )<10 ) and (((n mod 3600 ) div 60 ) <10 ) and (((n mod 3600 ) mod 60 ) <10 ) then Writeln ("0" , n div 3600 , ":0" , (n mod 3600 ) div 60 , ":0" , (n mod 3600 ) mod 60 ) else If (n<86400 ) and (n>3600 ) ir ((n dal. 3600 ) >= 10 ) ir (((n mod 3600 ) div 60 ) >= 10 ) ir (((n mod 3600 ) mod 60 ) >10 ) tada Writeln (n div 3600 , " :" , (n mod 3600 ) div 60 , ":" , (n mod 3600 ) mod 60 ) else If (n mod 86400 = 0 ) then Writeln ("00" , ":" , "00" , ":" , "00" ) else a: = n mod 86400 ; Jei (n>86400 ) ir ((a div 3600 ) >= 10 ) ir (((a mod 3600 ) div 60 ) >= 10 ) ir (((a mod 3600 ) mod 60 ) >= 10 ), tada Pradėkite ( a:=n mod 86400;) Writeln (a div 3600 , ":" , (a mod 3600 ) div 60 , ":" , (a mod 3600 ) mod 60 ) end else If (n>86400 ) ir (a div 3600)<10 ) and (((a mod 3600 ) div 60 ) <10 ) and (((a mod 3600 ) mod 60 ) <10 ) then Writeln ("0" , a div 3600 , ":0" , (a mod 3600 ) div 60 , ":0" , (a mod 3600 ) mod 60 ) end .

Problema ta, kad tol, kol nepradėjau bandyti išvesti jį „teisingu“ formatu, viskas buvo gerai. Pasidavė bet kokiems skaičiams, išbandžiau 30 variantų. Pradėjau kentėti su šiais nuliais, kurie turėtų pasirodyti prieš minutes ar sekundes, jei jų yra mažiau nei 10 ir viskas nuėjo į velnių. Dabar programa tinkamai veikia tik su tam tikrais skaičiais, o man dar nepavyko išsiaiškinti „suveikiančio“ algoritmo. Daugeliui skaičių programa tiesiog nieko nekuria. Būtų gerai, jei būtų rodomos bent kelios klaidos, bet ne, tik tuščias ekranas.
Ar šis „teisingo“ rašymo per „Jeigu“ metodas netgi turi teisę į gyvybę?
Čia yra originali versija, kur viskas buvo išleista netinkamu formatu, bet iš esmės teisinga

Paskalis
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Programos laikas2; var a, n: Sveikasis skaičius ; Pradėti Readln (n) ; Jei n = 0, tada Writeln ("00" , ":" , "00" , ":" , "00" ) kitaip Jei n<86400 then Writeln (n div 3600 , ":" , (n mod 3600 ) div 60 , ":" , (n mod 3600 ) mod 60 ) else If n mod 86400 = 0 then Writeln ("00" , ":" , "00" , ":" , "00" ) else If n>86400, tada Pradėkite a: = n mod 86400 ; Writeln (a div 3600 , ":" , (a mod 3600 ) div 60 , ":" , (a mod 3600 ) mod 60 ) ; pabaiga pabaiga.

Ir kokiu atveju programa paprastai yra „paprasčiausiai tyli“?

Atsakymas:

Paskalis
1 2 3 4 5 6 7 8 9 10 11 12 var n: Longint ; h, m, s: sveikasis skaičius ; pradėti ReadLn (n) ; h: = n div 3600 mod 24 ; m: = n mod 3600 div 60 ; s: = n mod 3600 mod 60 ; Rašyti (h, ":" ) ; jei m<10 then Write ("0" ) ; Write (m, ":" ) ; if s<10 then Write ("0" ) ; WriteLn (s) ; end .

Klausimas: Elektroninis laikrodis su žadintuvu


Sveiki, žmonės! Padėkite man išsiaiškinti problemą. Yra elektroninių laikrodžių, rodančių realų laiką. Formoje reikia įdėti 3 mygtukus: „H“, „M“, „A“. Mygtukas
„H“ (valandos) padidina valandų skaičių vienu, o mygtukas „M“ (minutės) padidina minučių skaičių. Padidėjimas įvyksta atitinkamai modulo 24 ir 60. Tokie laikrodžiai veikia paprastai, nes kiekvienas iš dviejų įvesties veiksmų (paspaudus pirmąjį arba antrąjį mygtuką) veda į vieną iš anksto nustatytą
tam tikra laikrodžio reakcija. Papildomas mygtukas „A“ (žadintuvas) skirtas žadintuvui įjungti ir išjungti. Jei žadintuvas išjungtas, mygtukas „A“ jį įjungia ir laikrodis perjungiamas į režimą
kuriame „H“ ir „M“ mygtukai nustato ne dabartinį, o reakcijos laiką
Žadintuvas Dar kartą paspaudus mygtuką „A“, laikrodis grąžinamas į įprastą režimą. Be to, visa tai turėtų būti daroma naudojant automatinį programavimą. Štai projektas:
Bet mokytojas pateikė programos sąrašą, bet tik C++. Prašau padėti, gal kas yra darę kažką panašaus. Gal galima kaip nors perdaryti.
C++
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 classAlarm_Clock(viešas: voidh_button() //Paspausdami H mygtuką( if (is_alarmo_time_mode) ( alarm_hours= (alarm_hours+ 1 ) % 24 ; ) else ( hours= (hours+ 1 ) % 24 ; ) ) voidm_button() //Button pressM ( if (is_in_alarm_time_mode) ; ) else ( minutes= (minutes+ 1 ) % 60 ; ) ) voida_button() //Paspauskite mygtuką A( if (is_alarm_on) ( if (yra_in_alarm_time_mode) ( is_in_alarm_time_mode= false ; ) else ( bell_off() ; is_alarm_on= false ; ) ) else ( is_alarm_on= true ; is_in_alarm_time_mode) () voidtick ; //Suaktyvinkite minučių laikmatį(jei (yra_žadintuvas įjungtas&&! yra_alarm_time_mode) { jeigu(( minučių == žadintuvo_minutės1 ) && ( valandų == signalizacijos_valandos ) || (žadintuvo_minutės == 0 ) && ( minučių == 59 ) && ( valandų == žadintuvo_valandos1 ) ) bell_on () ; elseif (( minučių == žadintuvo_minutės ) && ( valandų == signalizacijos_valandos ) ) bell_off () ; } minučių = ( minučių + 1 ) % 60 ; jeigu( minučių == 0 ) valandų = ( valandų + 1 ) % 24 ; } privatus: valandomis ; //Laikrodis dabartinis laikas minutės ; //Dabartinio laiko minutės intalarm_hours ; //Žadintuvas intalarm_minutes ; //Minutė, kol suskambės žadintuvas boolis_alarm_on ; //Ar įjungtas žadintuvas? boolis_in_alarm_time_mode ; //Ar aktyvus žadintuvo laiko nustatymo režimas? voidbell_on () { ...} //Įjungti skambutį voidbell_off () { ...} //Išjungti skambutį } ;