Język C znam, ale nigdy wcześniej nie pisałem programów na AVR'y. Mój program ma być dekoderem, który zamienia liczbę binarną (ustawianą switchami) na jej odpowiednik heksadecymalny widoczny na wyświetlaczy 7 segmentowym.
Napisałem taki program:
Tutaj jest schemat mojego układu.
Narazie nie wstawiłem wejścia programatora, dodam też, że układ HDSP 5321 to wyświetlacz 7 segmentowy ze wspólna anodą.
Proszę bardziej doświadczonych użytkowników o opinie czy to zadziała
Napisałem taki program:
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
// tablica z kodami znaków dla wyświetlacza
char znaki[17] = {2,158,36,12,152,72,64,30,0,8,16,192,98,132,96,224};
DDRC= 0x00; // PORTC - wejścia z przełącznika
PORTC=0xff;
DDRD= 0xff; // PORTD - wyjścia na wyświetlacz .. a - g
PORTD=0x00;
while (1){
_delay_ms(20);
switch (PORTC){
case 0: PORTD = znaki[0]; // 0000 0010 - 0
break;
case 1: PORTD = znaki[1]; // 1001 1110 - 1
break;
case 2: PORTD = znaki[2]; // 0010 0100 - 2
break;
case 3: PORTD = znaki[3]; // 0000 1100 - 3
break;
case 4: PORTD = znaki[4]; // 1001 1000 - 4
break;
case 5: PORTD = znaki[5]; // 0100 1000 - 5
break;
case 6: PORTD = znaki[6]; // 0100 0000 - 6
break;
case 7: PORTD = znaki[7]; // 0001 1110 - 7
break;
case 8: PORTD = znaki[8]; // 0000 0000 - 8
break;
case 9: PORTD = znaki[9]; // 0000 1000 - 9
break;
case 10: PORTD = znaki[10]; // 0001 0000 - A
break;
case 11: PORTD = znaki[11]; // 1100 0000 - B
break;
case 12: PORTD = znaki[12]; // 0110 0010 - C
break;
case 13: PORTD = znaki[13]; // 1000 0100 - D
break;
case 14: PORTD = znaki[14]; // 0110 0000 - E
break;
case 15: PORTD = znaki[15]; // 0111 0000 - F
break;
default: PORTD = 252; // 1111 1100 - -
}
_delay_ms(20);
}
return 0;
}
Tutaj jest schemat mojego układu.
Narazie nie wstawiłem wejścia programatora, dodam też, że układ HDSP 5321 to wyświetlacz 7 segmentowy ze wspólna anodą.
Proszę bardziej doświadczonych użytkowników o opinie czy to zadziała