D
david90
Guest
Tady je můj finální kód (pro mě
<img src="http://www.edaboard.com/images/smiles/icon_neutral.gif" alt="Neutrální" border="0" />
) Tento kód je pro WinAVR kompilátor GCC, a to je pro ATMEL MCU at90s2313.
Kód:# Include <avr/io.h>
# Include <avr/interrupt.h>
# Include <avr/signal.h>neplatné zpoždění (void);
neplatné display7seg (void);těkavé uint16_t luštěniny = 0, km / h = 0, mph_result = 0;
int hun_mi, ten_mi, one_mi, hun_mph, ten_mph, one_mph;
const char segment_table [10] =
(
0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x2, 0x78, 0, 0x10
);int main (void)
(
DDRB = 0xFF; / / set PORTB jako výstup
DDRD = 0x77;
TCCR0 = 0x03, / / odložený startTCNT1H = 0xC9;
TCNT1L = 0x85;
TCCR1B = 0x5, / / clk/1024 TCCR1B = 0x5, / / clk/1024
TIMSK = 0x80;MCUCR = 0x08;
SREG = 0x80;
GIMSK = 0x80;
while (1) / / Forever
(
display7seg ();
)
return 0;
)neplatné zpoždění (void) / / Vytvořit zpoždění 65 ms při 4 MHz
(
TCNT0 = 0x7F;
while (! (TIFR & 0x02));
/ / Čekat na timer0 přetečení vlajkou, aby bylo nastavení
TIFR = 0x02; / / Clear přetečení vlajky
)
neplatné display7seg (void)
(hun_mi = (impulsy) / 100;
ten_mi = ((impulsů)% 100) / 10;
one_mi = ((impulsů)% 100)% 10;hun_mph = (mph_result) / 100;
ten_mph = ((mph_result)% 100) / 10;
one_mph = ((mph_result)% 100)% 10;PORTB = segment_table [hun_mi];
PORTD = 0x7B;
zpoždění ();
PORTB = segment_table [ten_mi];
PORTD = 0x7D;
zpoždění ();
PORTB = segment_table [one_mi];
PORTD = 0x7E;
zpoždění ();PORTB = segment_table] [hun_mph;
PORTD = 0x6F;
zpoždění ();
PORTB = segment_table] [ten_mph;
PORTD = 0x5F;
zpoždění ();
PORTB = segment_table] [one_mph;
PORTD = 0x3F;
zpoždění ();
)Interrupt (SIG_INTERRUPT1)
(
pokud ( pulsy == 999)
(
pulsy = 0;
)
mph ;
)
Interrupt (SIG_OVERFLOW1)
(
mph_result = mph *. 08863;
mph = 0;
TCNT1H = 0xC9;
TCNT1L = 0x61;
)
<img src="http://www.edaboard.com/images/smiles/icon_neutral.gif" alt="Neutrální" border="0" />
) Tento kód je pro WinAVR kompilátor GCC, a to je pro ATMEL MCU at90s2313.
Kód:# Include <avr/io.h>
# Include <avr/interrupt.h>
# Include <avr/signal.h>neplatné zpoždění (void);
neplatné display7seg (void);těkavé uint16_t luštěniny = 0, km / h = 0, mph_result = 0;
int hun_mi, ten_mi, one_mi, hun_mph, ten_mph, one_mph;
const char segment_table [10] =
(
0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x2, 0x78, 0, 0x10
);int main (void)
(
DDRB = 0xFF; / / set PORTB jako výstup
DDRD = 0x77;
TCCR0 = 0x03, / / odložený startTCNT1H = 0xC9;
TCNT1L = 0x85;
TCCR1B = 0x5, / / clk/1024 TCCR1B = 0x5, / / clk/1024
TIMSK = 0x80;MCUCR = 0x08;
SREG = 0x80;
GIMSK = 0x80;
while (1) / / Forever
(
display7seg ();
)
return 0;
)neplatné zpoždění (void) / / Vytvořit zpoždění 65 ms při 4 MHz
(
TCNT0 = 0x7F;
while (! (TIFR & 0x02));
/ / Čekat na timer0 přetečení vlajkou, aby bylo nastavení
TIFR = 0x02; / / Clear přetečení vlajky
)
neplatné display7seg (void)
(hun_mi = (impulsy) / 100;
ten_mi = ((impulsů)% 100) / 10;
one_mi = ((impulsů)% 100)% 10;hun_mph = (mph_result) / 100;
ten_mph = ((mph_result)% 100) / 10;
one_mph = ((mph_result)% 100)% 10;PORTB = segment_table [hun_mi];
PORTD = 0x7B;
zpoždění ();
PORTB = segment_table [ten_mi];
PORTD = 0x7D;
zpoždění ();
PORTB = segment_table [one_mi];
PORTD = 0x7E;
zpoždění ();PORTB = segment_table] [hun_mph;
PORTD = 0x6F;
zpoždění ();
PORTB = segment_table] [ten_mph;
PORTD = 0x5F;
zpoždění ();
PORTB = segment_table] [one_mph;
PORTD = 0x3F;
zpoždění ();
)Interrupt (SIG_INTERRUPT1)
(
pokud ( pulsy == 999)
(
pulsy = 0;
)
mph ;
)
Interrupt (SIG_OVERFLOW1)
(
mph_result = mph *. 08863;
mph = 0;
TCNT1H = 0xC9;
TCNT1L = 0x61;
)