Elektronikus - sakk - óra
Elektronikus sakk órák. A legegyszerűbb mód egy ilyen óra is, csak két felváltva kapcsolódnak stoppert.
Anyaga cikk hasznos lehet a CT kezd kialakulni CodeVisionAVR.
Nem számít, milyen nagy az internet, de egyszerű és érdekes kísérlet nem olyan könnyű megtalálni, és.
Például, hogy milyen típusú sakk órák, google, és én nem találkozik egy ilyen rendszer, és valójában egy ilyen rendszert az MC, ez könnyű.
Definíció: „Sakk” néven egy órát két alkalommal kijelző egységek, kötve egymással oly módon, hogy csak az egyikük lehet futtatni egy időben.
Hadd adjak egy egyszerű példa egy ilyen sakk óra (valójában egy prototípus egy stoppert. Ahelyett, hogy a visszaszámlálás. És még egy egyszerűsített változata anélkül, hogy további funkciókat, de ez javítható :)) forráskód is).
Funkciók: A vezérlő egyszerű, miközben nyomja a KH-1 átmegy az 1. stopper, miközben nyomja a KH-3 átmegy a 2. stopper gomb KH-2 (reset) nullára az olvasási pontszámot.
Ha a vezérlés elindítja a stopperóra használt P2K kapcsoló vagy közönséges átállás. akkor megközelítőleg megfelel a kívánt funkcionalitást az áramkör.
Ebben a projektben a fő az, hogy két stopperóra, ha szükséges, számuk növelhető, ami hasznos lehet más áramkörök, például, hozzon létre egy projektet felső CodeVisionAVR.
Kérjük, válasszon az MK és a frekvencia.
csatlakoztassa az LCD PORTB
és port PORTD csinálni ellenőrizzék a beviteli gombok belső felhúzó ellenállások +.
A legérdekesebb dolog, hogy beállítsák az időzítő helyes pontszám másodpercig.
Hogy ez megtörtént, én is nagyon könnyű megérteni idején segített információt a honlapon my-avr.at.ua.
Az időzítő időzítő Kiválasztás 1, Óra Value 7813 kHz, megszakítást: Összehasonlítás a mérkőzés, Comp. A = 1e85 (tisztán azt jelzi, hogy ez lesz órajele gyakorisággal 1 másodperc)
óra érték - számlálási frekvencia
Megszakítást összehasonlítása A mérkőzés - megszakítja egybeeső regiszter
Itt van egy kis stop. Mi ez a szám 1e85? Miért döntött úgy, hogy pontosan azt a számot?
Tehát, hogy pontosan kiszámítani, mi az a frekvencia, az időzítő szeretne nyitni egy tudományos számológép. Száma 1e85 (ez 16-ed rendű jelölés) a 10sitichnoy = 7813 s / óra. Ebből az következik, hogy a 7813 (frekvencia = 1 Hz interrupt) * 5 (mp) = 39065 és lefordítani egy 16chnuyu / h 9899 ezután azt kapjuk, hogy ez a szám be van helyezve a Comp. Az A és a stopper fut frekvenciája 0,2 Hz, ami 1 ideje 5 másodperc.
Generálni kódot, és mentse.
A kód időzítő: (TIM1_COMPA)
Bele kell illeszteni a közepén a következő sorokat:
TCNT1H = 0;
TCNT1L = 0;
A helyes működés e nyilvántartások van rendelve az időzítő 0.
Itt látható a forráskód már kiderült a végén.
void main (void)
<
// állapítsa meg a helyi változók itt
// kristályoszcillátor osztály faktor: 1
#pragma optsize-
CLKPR = 0x80;
CLKPR = 0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize +
#endif
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTD = 0x1C;
DDRD = 0x00;
TCCR1A = 0x00;
TCCR1B = 0x05;
TCNT1H = 0x00;
TCNT1L = 0x00;
ICR1H = 0x00;
ICR1L = 0x00;
OCR1AH = 0x1E;
OCR1AL = 0x85;
OCR1BH = 0x00;
OCR1BL = 0x00;
TIMSK = 0x40;
USICR = 0x00;
ACSR = 0x80;
lcd_init (16);
#ASM ( "SEI")
míg a (1)
<
lcd_gotoxy (0,0); // Helyezzük a kijelző
lcd_putchar (hour_A / 10 + 0x30);
lcd_putchar (hour_A% 10 + 0x30);
lcd_putchar ( ':');
lcd_putchar (min_A / 10 + 0x30);
lcd_putchar (min_A% 10 + 0x30);
lcd_putchar ( ':');
lcd_putchar (sek_A / 10 + 0x30);
lcd_putchar (sek_A% 10 + 0x30);
if (PIND.2 == 0) // a képernyőn állam az 1. stopper
lcd_putsf ( "
<
lcd_putsf ( "
lcd_gotoxy (0,1); // Helyezzük a kijelző
if (PIND.4 == 0) // a képernyőn állam a 2. stopper
lcd_putsf ( "Start2>");
más
<
lcd_putsf ( "payza>");
>;
lcd_putchar (hour_B / 10 + 0x30);
lcd_putchar (hour_B% 10 + 0x30);
lcd_putchar ( ':');
lcd_putchar (min_B / 10 + 0x30);
lcd_putchar (min_B% 10 + 0x30);
lcd_putchar ( ':');
lcd_putchar (sek_B / 10 + 0x30);
lcd_putchar (sek_B% 10 + 0x30);
ha (sek_A == 60)
ha (min_A == 60)
ha (hour_A == 96)
ha (sek_B == 60)
ha (min_B == 60)
ha (hour_B == 96)
#pragma optsize-
CLKPR = 0x80;
CLKPR = 0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize +
#endif
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTD = 0x1C;
DDRD = 0x00;
TCCR1A = 0x00;
TCCR1B = 0x05;
TCNT1H = 0x00;
TCNT1L = 0x00;
ICR1H = 0x00;
ICR1L = 0x00;
OCR1AH = 0x1E;
OCR1AL = 0x85;
OCR1BH = 0x00;
OCR1BL = 0x00;
TIMSK = 0x40;
USICR = 0x00;
ACSR = 0x80;
lcd_init (16);
#ASM ( "SEI")
míg a (1)
<
lcd_gotoxy (0,0); // Helyezzük a kijelző
lcd_putchar (hour_A / 10 + 0x30);
lcd_putchar (hour_A% 10 + 0x30);
lcd_putchar ( ':');
lcd_putchar (min_A / 10 + 0x30);
lcd_putchar (min_A% 10 + 0x30);
lcd_putchar ( ':');
lcd_putchar (sek_A / 10 + 0x30);
lcd_putchar (sek_A% 10 + 0x30);
if (PIND.2 == 0) // a képernyőn állam az 1. stopper
lcd_putsf ( "
<
lcd_putsf ( "
>;
lcd_gotoxy (0,1); //
lcd_putchar (hour_AA / 10 + 0x30);
lcd_putchar (hour_AA% 10 + 0x30);
lcd_putchar ( ':');
lcd_putchar (min_AA / 10 + 0x30);
lcd_putchar (min_AA% 10 + 0x30);
lcd_putchar ( ':');
lcd_putchar (sek_AA / 10 + 0x30);
lcd_putchar (sek_AA% 10 + 0x30);
lcd_gotoxy (0,2); //
if (PIND.4 == 0) // a képernyőn állam a 2. stopper
lcd_putsf ( "Start2>");
más
<
lcd_putsf ( "payza>");
hour_BB = 0, min_BB = 0, sek_BB = 0; // vissza az aktuális időt
>;
lcd_putchar (hour_B / 10 + 0x30);
lcd_putchar (hour_B% 10 + 0x30);
lcd_putchar ( ':');
lcd_putchar (min_B / 10 + 0x30);
lcd_putchar (min_B% 10 + 0x30);
lcd_putchar ( ':');
lcd_putchar (sek_B / 10 + 0x30);
lcd_putchar (sek_B% 10 + 0x30);
lcd_gotoxy (8,3); // az aktuális időt
lcd_putchar (hour_BB / 10 + 0x30);
lcd_putchar (hour_BB% 10 + 0x30);
lcd_putchar ( ':');
lcd_putchar (min_BB / 10 + 0x30);
lcd_putchar (min_BB% 10 + 0x30);
lcd_putchar ( ':');
lcd_putchar (sek_BB / 10 + 0x30);
lcd_putchar (sek_BB% 10 + 0x30);
ha (PIND.3 == 0) /общий сброс
hour_A = 0, min_A = 0, sek_A = 0; // reset ideje
hour_AA = 0, min_AA = 0, sek_AA = 0; // visszaállítása az aktuális
hour_B = 0, min_B = 0, sek_B = 0; // reset ideje
hour_BB = 0, min_BB = 0, sek_BB = 0; // visszaállítása az aktuális
>;
ha (sek_A == 60)
ha (min_A == 60)
ha (hour_A == 96)
ha (sek_AA == 60)
ha (min_AA == 60)
ha (hour_AA == 24)
ha (sek_B == 60)
ha (min_B == 60)
ha (hour_B == 96)