D
delifadzli
Guest
halo vsi,
v prvi vrsti, jaz sem čisto novi v C jeziku ..
Tukaj je vzorec izvorne kode .... odseka zaslona 7 preko AVR ...
# Include <avr/io.h>
# Include <avr/interrupt.h>
# Include <util/delay_basic.h># Define SEVEN_SEGMENT_PORT PORTD
# Define SEVEN_SEGMENT_DDR DDRD
uint8_t mest [3]; / / počakaj številka za 3 zaslonenična SevenSegment (uint8_t n, uint8_t dp)
(
/ *
Ta funkcija piše številk, ki jih n na zaslonu
decimalno vejico se prikaže, če dp = 1
Opomba:
n mora biti manjša od 9
* /
if (n <10)
(
stikalo
(
primeru 0:
SEVEN_SEGMENT_PORT = 0b00000011;
break;
primer 1:
SEVEN_SEGMENT_PORT = 0b10011111;
break;
primer 2:
SEVEN_SEGMENT_PORT = 0b00100101;
break;
primer 3:
SEVEN_SEGMENT_PORT = 0b00001101;
break;
primer 4:
SEVEN_SEGMENT_PORT = 0b10011001;
break;
primer 5:
SEVEN_SEGMENT_PORT = 0b01001001;
break;
Pri 6:
SEVEN_SEGMENT_PORT = 0b01000001;
break;
Pri 7:
SEVEN_SEGMENT_PORT = 0b00011111;
break;
Pri 8:
SEVEN_SEGMENT_PORT = 0b00000001;
break;
Pri 9:
SEVEN_SEGMENT_PORT = 0b00001001;
break;
)
if (dp)
(
/ / Če se prikaže decimalno vejico mora
/ / Da 0. bit Low
SEVEN_SEGMENT_PORT & = 0b11111110;
)
)
drugega
(
/ / Ta simbol na zaslonu pove, da je n večji od 9
/ / Da zaslon ne more ravnati
SEVEN_SEGMENT_PORT = 0b11111101;
)
)
Počakajte ničen ()
(
uint8_t i;
for (i = 0; i <10; i )
(
_delay_loop_2 (0);
)
)
nična Print (uint16_t num)
(
uint8_t i = 0;
uint8_t j;
if (num> 999) vračanja;while (num)
(
številk = num% 10;
i ;
num = num/10;
)
za (j = i; j <3; j ) številk [j] = 0;
)
ničen InitADC ()
(
ADMUX = (1 <<REFS0); / / Za Aref = AVcc;
ADCSRA = (1 <<ZDEN) | (7 <<ADPS0);
)
uint16_t ReadADC (uint8_t ch)
(
/ / Izberi ADC Channel ch mora biti 0-7
ch = ch &0b00000111;
ADMUX | = ch;
/ / Start Single konverzijo
ADCSRA | = (1 <<ADSC);
/ / Počakajte za konverzijo za dokončanje
while (! (ADCSRA & (1 <<ADIF)));
/ / Clear ADIF s pisanjem enega, da ga
ADCSRA | = (1 <<ADIF);
return (ADC);
)
neveljaven Glavni ()
(
uint16_t adc_value;
uint8_t t;
/ / Prescaler = FCPU/1024
TCCR0 | = (1 <<CS02);
/ / Enable Overflow Interrupt Enable
TIMSK | = (1 <<TOIE0);
/ / Inicializiraj Counter
TCNT0 = 0;
/ / Port C [2,1,0], kakor je določeno dana
DDRB | = 0b00000111;
PORTB = 0b00000110;
/ / Port D
SEVEN_SEGMENT_DDR = 0XFF;
/ / Izklop vseh segmentih
SEVEN_SEGMENT_PORT = 0XFF;
/ / Enable Global prekinitve
SEI ();
/ / Enable ADC
InitADC ();
/ / Neskončno zanko
while (1)
(
/ / Preberi ADC
adc_value = ReadADC (0);
/ / Pretvori v obsegu Centrigrade
t = adc_value / 2;
/ / Print za prikaz
Print (t);
/ / Počakajte nekaj časa
Čakati ();
)
)
ISR (TIMER0_OVF_vect)
(
statični uint8_t i = 0;
if (i == 2)
(
i = 0;
)
drugega
(
i ;
)
PORTB = ~ (1 <<i);
SevenSegment (števila , 0);
)moči kdorkoli pomoč mi pri prilagajanju tega kodeksa
-Ker hočem uporabo PIC 16f877A .... prikazati LM35 s 7 segment ....
Poskušam teči sam ... prilagoditvi brez znanja ... Zdi se, da napaka .. huhu
prosim .... pomoč ...
I uporabo PICKit2 v2.61 za zbiranje ....
v prvi vrsti, jaz sem čisto novi v C jeziku ..
Tukaj je vzorec izvorne kode .... odseka zaslona 7 preko AVR ...
# Include <avr/io.h>
# Include <avr/interrupt.h>
# Include <util/delay_basic.h># Define SEVEN_SEGMENT_PORT PORTD
# Define SEVEN_SEGMENT_DDR DDRD
uint8_t mest [3]; / / počakaj številka za 3 zaslonenična SevenSegment (uint8_t n, uint8_t dp)
(
/ *
Ta funkcija piše številk, ki jih n na zaslonu
decimalno vejico se prikaže, če dp = 1
Opomba:
n mora biti manjša od 9
* /
if (n <10)
(
stikalo
(
primeru 0:
SEVEN_SEGMENT_PORT = 0b00000011;
break;
primer 1:
SEVEN_SEGMENT_PORT = 0b10011111;
break;
primer 2:
SEVEN_SEGMENT_PORT = 0b00100101;
break;
primer 3:
SEVEN_SEGMENT_PORT = 0b00001101;
break;
primer 4:
SEVEN_SEGMENT_PORT = 0b10011001;
break;
primer 5:
SEVEN_SEGMENT_PORT = 0b01001001;
break;
Pri 6:
SEVEN_SEGMENT_PORT = 0b01000001;
break;
Pri 7:
SEVEN_SEGMENT_PORT = 0b00011111;
break;
Pri 8:
SEVEN_SEGMENT_PORT = 0b00000001;
break;
Pri 9:
SEVEN_SEGMENT_PORT = 0b00001001;
break;
)
if (dp)
(
/ / Če se prikaže decimalno vejico mora
/ / Da 0. bit Low
SEVEN_SEGMENT_PORT & = 0b11111110;
)
)
drugega
(
/ / Ta simbol na zaslonu pove, da je n večji od 9
/ / Da zaslon ne more ravnati
SEVEN_SEGMENT_PORT = 0b11111101;
)
)
Počakajte ničen ()
(
uint8_t i;
for (i = 0; i <10; i )
(
_delay_loop_2 (0);
)
)
nična Print (uint16_t num)
(
uint8_t i = 0;
uint8_t j;
if (num> 999) vračanja;while (num)
(
številk = num% 10;
i ;
num = num/10;
)
za (j = i; j <3; j ) številk [j] = 0;
)
ničen InitADC ()
(
ADMUX = (1 <<REFS0); / / Za Aref = AVcc;
ADCSRA = (1 <<ZDEN) | (7 <<ADPS0);
)
uint16_t ReadADC (uint8_t ch)
(
/ / Izberi ADC Channel ch mora biti 0-7
ch = ch &0b00000111;
ADMUX | = ch;
/ / Start Single konverzijo
ADCSRA | = (1 <<ADSC);
/ / Počakajte za konverzijo za dokončanje
while (! (ADCSRA & (1 <<ADIF)));
/ / Clear ADIF s pisanjem enega, da ga
ADCSRA | = (1 <<ADIF);
return (ADC);
)
neveljaven Glavni ()
(
uint16_t adc_value;
uint8_t t;
/ / Prescaler = FCPU/1024
TCCR0 | = (1 <<CS02);
/ / Enable Overflow Interrupt Enable
TIMSK | = (1 <<TOIE0);
/ / Inicializiraj Counter
TCNT0 = 0;
/ / Port C [2,1,0], kakor je določeno dana
DDRB | = 0b00000111;
PORTB = 0b00000110;
/ / Port D
SEVEN_SEGMENT_DDR = 0XFF;
/ / Izklop vseh segmentih
SEVEN_SEGMENT_PORT = 0XFF;
/ / Enable Global prekinitve
SEI ();
/ / Enable ADC
InitADC ();
/ / Neskončno zanko
while (1)
(
/ / Preberi ADC
adc_value = ReadADC (0);
/ / Pretvori v obsegu Centrigrade
t = adc_value / 2;
/ / Print za prikaz
Print (t);
/ / Počakajte nekaj časa
Čakati ();
)
)
ISR (TIMER0_OVF_vect)
(
statični uint8_t i = 0;
if (i == 2)
(
i = 0;
)
drugega
(
i ;
)
PORTB = ~ (1 <<i);
SevenSegment (števila , 0);
)moči kdorkoli pomoč mi pri prilagajanju tega kodeksa
-Ker hočem uporabo PIC 16f877A .... prikazati LM35 s 7 segment ....
Poskušam teči sam ... prilagoditvi brez znanja ... Zdi se, da napaka .. huhu
prosim .... pomoč ...
I uporabo PICKit2 v2.61 za zbiranje ....