apa yang di dunia yang salah dengan kode C ini???

D

david90

Guest
Kode:

# include <avr/io.h>void delay (void);

int a, b;void main (void)

(

TCCR0 = 0x03;

DDRB = 0xFF;

DDRD = 0x3;

a = 0x3;

b = 0x1;switch (a)

(

Kasus 0: a = 0x40;

break;

Kasus 1: a = 0x79;

break;

kasus 2: a = 0x24;

break;

kasus 3: a = 0x30;

break;

Kasus 4: a = 0x19;

break;

Kasus 5: a = 0x12;

break;

Kasus 6: a = 0x2;

break;

Kasus 7: a = 0x78;

break;

Kasus 8: a = 0;

break;

Kasus 9: a = 0x10;

break;

)

switch (b)

(

Kasus 0: b = 0x40;

break;

Kasus 1: b = 0x79;

break;

Kasus 2: b = 0x24;

break;

Kasus 3: b = 0x30;

break;

Kasus 4: b = 0x19;

break;

Kasus 5: b = 0x12;

break;

Kasus 6: b = 0x2;

break;

Kasus 7: b = 0x78;

break;

Kasus 8: b = 0;

break;

Kasus 9: b = 0x10;

break;

)while (1)

(

PORTB = a;

PORTD = 0x1;

delay ();PORTB = b;

PORTD = 0x2;

delay ();

))void delay (void) / / Menghasilkan penundaan 65 ms di 4 MHz

(

TCNT0 = 0x7F;

while (! (TIFR & 0x02));

/ / Tunggu sampai melimpah timer0 bendera harus ditetapkan

TIFR = 0x02; / / Clear flag overflow

)
 
Salam

Saran untuk membuat kode Anda terlihat lebih baik.

1 - Gunakan fungsi yang disebut yaitu ConvertTo7Seg () bukannya Anda menulis beralih fungsi 2 kali!

2 - Jangan gunakan a dan b vars sebagai var global, bukannya menggunakannya sebagai vars lokal dan menggunakan pointer ke var untuk memanggil mereka

yaitu untuk memanggil fungsiKode:

x = ConvertTo7Seg (& a)
 
ok.

Tapi tetap saja, mengapa wont itu mengeksekusi "switch (a )"???Hanya langsung ke "switch (b)."

Program saya adalah tidak efisien, tetapi tidak ada alasan mengapa tidak boleh menjalankan "switch (a)".

mengapa lebih baik menggunakan pointer?
Kode:

# include <avr/io.h>

int a, b, abb;void main ()

(abb = 3;

b = 1;switch (b)

(

Kasus 0: a = 0x40;

break;

Kasus 1: a = 0x79;

break;

kasus 2: a = 0x24;

break;

kasus 3: a = 0x30;

break;

Kasus 4: a = 0x19;

break;

Kasus 5: a = 0x12;

break;

Kasus 6: a = 0x2;

break;

Kasus 7: a = 0x78;

break;

Kasus 8: a = 0;

break;

Kasus 9: a = 0x10;

break;)

)

 
Mungkin ini membantu:

Kode:# include <avr/io.h>

void delay (void);const char segment_table [10] =

(

0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x2, 0x78, 0, 0x10;

)int a, b;void main (void)

(

TCCR0 = 0x03;

DDRB = 0xFF;

DDRD = 0x3;

a = 0x3;

b = 0x1;for (;;)

(

PORTB = segment_table [a];

PORTD = 0x1;

delay ();

PORTB = segment_table ;

PORTD = 0x2;

delay ();

)

)void delay (void) / / Menghasilkan penundaan 65 ms di 4 MHz

(

TCNT0 = 0x7F;

while (! (TIFR & 0x02)); / / Tunggu sampai melimpah timer0 bendera harus ditetapkan

TIFR = 0x02; / / Clear flag overflow

)

 
terima kasih, tapi aku TIDAK mencari kode yang optimal.Aku sedang mencari jawaban mengapa saya beralih kode dengan pernyataan tidak bekerja.Meskipun kode yang buruk aku ingin tahu mengapa doesn 't bekerja.

Aku mencoba kode ur tetapi

avr-gcc-c-mmcu = at90s2313-aku.-g-Os-funsigned-char-funsigned-bitfields-fpack-struct-fshort-enum-Wall-Wstrict-prototipe-Wa,-adhlns = test.exe.program.lst-std = gnu99 test.exe.program.c -o test.exe.program.o
test.exe.program.c: 6: error: parse error before ';' token
test.exe.program.c: 12: warning: return type of 'utama' tidak `int '
test.exe.program.c: In function `main ':
test.exe.program.c: 16: error: `a 'dideklarasikan (pertama digunakan dalam fungsi ini)
test.exe.program.c: 16: error: (Setiap dideklarasikan pengidentifikasi dilaporkan hanya sekali
test.exe.program.c: 16: error: untuk setiap fungsi yang muncul in)
test.exe.program.c: 17: error: `b 'tidak dideklarasikan (pertama digunakan dalam fungsi ini)
test.exe.program.c: 34:40: warning: no newline pada akhir file
test.exe.program.c: In function `penundaan ':
test.exe.program.c: 34: error: parse error pada akhir dari input
make.exe: *** [test.exe.program.o] Error 1

 
Apa yang Anda maksud dengan "ia menambahkan a dan b bersama-sama"?

Jika program itu bekerja (memberi Anda output yang dikehendaki), maka jangan khawatir tentang perilaku eksekusi anda lihat di simulator.Kompiler Anda telah dioptimalkan saya mengusir orang-orang beralih pernyataan karena mereka tidak diperlukan, karena Anda diinisialisasi a dan b dengan konstanta.Sebuah kompiler mengoptimalkan pintar mungkin juga dihilangkan a dan b, dan hanya menulis konstanta ke PORTB.

Jika itu bukan masalah ....Aku tidak punya kompiler Anda, jadi saya tidak bisa mengkompilasi program (hilang avr / io.h).Mungkin jika Anda menunjukkan kepada kita apa yang di header, lebih banyak orang bisa membantu Anda.Secara khusus, bagaimana PORTB didefinisikan?

C-Man's kode memiliki titik koma salah letak:
Kode:

const char segment_table [10] =

(

0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x2, 0x78, 0, 0x10

);
 

Welcome to EDABoard.com

Sponsor

Back
Top