hjelp i programmering ... kildekode

D

delifadzli

Guest
hei alle,

først og fremst, jeg er ganske ny i C-språk ..

Her er eksempel kildekoden .... av 7 segment display via 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 sifrene [3]; / / Holder tallene for 3 skjermervoid SevenSegment (uint8_t n, uint8_t DP)
(
/ *
Denne funksjonen skriver et tall gitt av n til skjermen
desimaltegnet vises dersom dp = 1

Merk:
n må være mindre enn 9
* /
if (n <10)
(
bryteren (n)
(
tilfelle 0:
SEVEN_SEGMENT_PORT = 0b00000011;
pause;

Eksempel 1:
SEVEN_SEGMENT_PORT = 0b10011111;
pause;

tilfelle 2:
SEVEN_SEGMENT_PORT = 0b00100101;
pause;

sak 3:
SEVEN_SEGMENT_PORT = 0b00001101;
pause;

sak 4:
SEVEN_SEGMENT_PORT = 0b10011001;
pause;

sak 5:
SEVEN_SEGMENT_PORT = 0b01001001;
pause;

sak 6:
SEVEN_SEGMENT_PORT = 0b01000001;
pause;

sak 7:
SEVEN_SEGMENT_PORT = 0b00011111;
pause;

sak 8:
SEVEN_SEGMENT_PORT = 0b00000001;
pause;

sak 9:
SEVEN_SEGMENT_PORT = 0b00001001;
pause;
)
if (DP)
(
/ / Hvis desimaltegn skal vises
/ / Gjør 0th bit Lav
SEVEN_SEGMENT_PORT & = 0b11111110;
)
)
annet
(
/ / Dette symbolet på displayet forteller at n var større enn 9
/ / Så displayet ikke kan håndtere det
SEVEN_SEGMENT_PORT = 0b11111101;
)
)

void Vent ()
(
uint8_t jeg;
for (i = 0; i <10; i )
(
_delay_loop_2 (0);
)
)

void utskrift (uint16_t NUM)
(
uint8_t i = 0;
uint8_t j;
if (num> 999) tilbake;mens (NUM)
(
sifrene = num% 10;
i ;

num = num/10;
)
for (j = i; j <3; j ) tall [j] = 0;
)

void InitADC ()
(
ADMUX = (1 <<REFS0); / / For Aref = AVcc;
ADCSRA = (1 <<ADEN) | (7 <<ADPS0);
)

uint16_t ReadADC (uint8_t ch)
(
/ / Velg ADC kanal lm må være 0-7
lm = ch &0b00000111;
ADMUX | = ch;

/ / Start Enkel konvertering
ADCSRA | = (1 <<ADSC);

/ / Vent til konvertering til fullstendig
samtidig (! (ADCSRA & (1 <<ADIF)));

/ / Clear ADIF ved å skrive ett til det
ADCSRA | = (1 <<ADIF);

avkastning (ADC);
)
void main ()
(
uint16_t adc_value;
uint8_t t;
/ / Prescaler = FCPU/1024
TCCR0 | = (1 <<CS02);

/ / Aktiver Overløp Interrupt Enable
TIMSK | = (1 <<TOIE0);

/ / Initialiser Counter
TCNT0 = 0;

/ / Port C [2,1,0] så ut putte
DDRB | = 0b00000111;

PORTB = 0b00000110;

/ / Port D
SEVEN_SEGMENT_DDR = 0XFF;

/ / Slå av alle segmenter
SEVEN_SEGMENT_PORT = 0XFF;

/ / Aktiver Global Avbryter
sei ();

/ / Aktiver ADC
InitADC ();

/ / Uendelig loop
mens 1 ()
(
/ / Les ADC
adc_value = ReadADC (0);

/ / Konverter til grad Centrigrade
t = adc_value / 2;

/ / Print for å vise
Print (t);

/ / Vent litt tid
Vent ();

)
)

ISR (TIMER0_OVF_vect)
(
statiske uint8_t i = 0;
if (i == 2)
(
i = 0;
)
annet
(
i ;
)
PORTB = ~ (1 <<i);
SevenSegment (siffer , 0);

)kan noen hjelpe meg i å justere denne koden

-Siden jeg vil bruke PIC 16f877A .... å vise LM35 med 7 segment ....

Jeg prøver løpe den av meg selv ... å justere uten kunnskap ... synes å være feil .. huhu

behage .... hjelpe ...

Jeg bruker PICKit2 v2.61 å kompilere ....

 
Hvordan kan du lage en kode skrevet for AVR med et PICKit2?

Først av alt PICKit2 er en maskinvare som brukes til å programmere en chip.

PIC og AVR har ulik arkitektur.Så du skrånende bruke et bilde kompilatoren til å lage en kode skrevet for AVR

Du må skrive koden for bilde

Bedre starter med en grunnleggende opplæringen om mikrokontrollere

Nandhu

 
delifadzli skrev:

kan noen hjelpe meg i å justere denne koden,-siden jeg vil bruke PIC 16f877A .... å vise LM35 med 7 segment ....
Jeg prøver løpe den av meg selv ... å justere uten kunnskap ... synes å være feil .. huhu behage .... hjelpe ...
Jeg bruker PICKit2 v2.61 å kompilere ....
 
fra koden du har postet jeg forstår det gjør følgende.

1.Oppsett ADC, oppsett Display
2.Les ADC
3.konvertere ADC data til spenning tilsvarende, konvertere til sifre
4.Vise den konverterte data.

Gå gjennom koden linje for linje, forstå hver linje, og deretter implementere den samme hjelp MPASM eller en passende C kompilator for PIC deler.

Dens så enkelt som det ....

 

Welcome to EDABoard.com

Sponsor

Back
Top