D
david90
Guest
Ecco il mio codice finito (per me
<img src="http://www.edaboard.com/images/smiles/icon_neutral.gif" alt="Neutral" border="0" />
) Questo codice è per WINAVR compilatore GCC ed è per MCU Atmel AT90S2313.
Codice:# include <avr/io.h>
# include <avr/interrupt.h>
# include <avr/signal.h>void delay (void);
void display7seg (void);volatile impulsi uint16_t = 0, mph = 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 ()
(
DDRB = 0xff; / / Set PORTB come output
DDRD = 0x77;
TCCR0 = 0x03; / / delay timerTCNT1H = 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;
)void delay (void) / / Produrre un ritardo di 65 ms a 4 MHz
(
TCNT0 = 0x7F;
while (! (TIFR & 0x02));
/ / Wait for Timer0 flag di overflow da impostare
TIFR = 0x02; / / flag di overflow Clear
)
void display7seg (void)
(= hun_mi (impulsi) / 100;
= ten_mi ((impulsi)% 100) / 10;
= one_mi ((impulsi)% 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;
delay ();
PORTB = segment_table [ten_mi];
PORTD = 0x7D;
delay ();
PORTB = segment_table [one_mi];
PORTD = 0x7E;
delay ();PORTB = segment_table [hun_mph];
PORTD = 0x6F;
delay ();
PORTB = segment_table [ten_mph];
PORTD = 0x5F;
delay ();
PORTB = segment_table [one_mph];
PORTD = 0x3F;
delay ();
)INTERRUPT (SIG_INTERRUPT1)
(
if ( impulsi == 999)
(
impulsi = 0;
)
mph ;
)
INTERRUPT (SIG_OVERFLOW1)
(
= *. mph_result mph 08.863;
mph = 0;
TCNT1H = 0xC9;
TCNT1L = 0x61;
)
<img src="http://www.edaboard.com/images/smiles/icon_neutral.gif" alt="Neutral" border="0" />
) Questo codice è per WINAVR compilatore GCC ed è per MCU Atmel AT90S2313.
Codice:# include <avr/io.h>
# include <avr/interrupt.h>
# include <avr/signal.h>void delay (void);
void display7seg (void);volatile impulsi uint16_t = 0, mph = 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 ()
(
DDRB = 0xff; / / Set PORTB come output
DDRD = 0x77;
TCCR0 = 0x03; / / delay timerTCNT1H = 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;
)void delay (void) / / Produrre un ritardo di 65 ms a 4 MHz
(
TCNT0 = 0x7F;
while (! (TIFR & 0x02));
/ / Wait for Timer0 flag di overflow da impostare
TIFR = 0x02; / / flag di overflow Clear
)
void display7seg (void)
(= hun_mi (impulsi) / 100;
= ten_mi ((impulsi)% 100) / 10;
= one_mi ((impulsi)% 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;
delay ();
PORTB = segment_table [ten_mi];
PORTD = 0x7D;
delay ();
PORTB = segment_table [one_mi];
PORTD = 0x7E;
delay ();PORTB = segment_table [hun_mph];
PORTD = 0x6F;
delay ();
PORTB = segment_table [ten_mph];
PORTD = 0x5F;
delay ();
PORTB = segment_table [one_mph];
PORTD = 0x3F;
delay ();
)INTERRUPT (SIG_INTERRUPT1)
(
if ( impulsi == 999)
(
impulsi = 0;
)
mph ;
)
INTERRUPT (SIG_OVERFLOW1)
(
= *. mph_result mph 08.863;
mph = 0;
TCNT1H = 0xC9;
TCNT1L = 0x61;
)