Skocz do zawartości

Programowanie ATMEGA 128 w VMLAbie C++


krzysurbanowicz

Pomocna odpowiedź

--------------------------------------------------------------------------------

Witam. Jestem zielony w temacie mikrokontrolerów a muse zrobic do szkoły program w VMLABie o tresći:

Generator prostego rysunku - na wyświetlaczu zapalamy dolną, środkową albo górną kreskę

– kolejno wybieraną przyciskiem. 4 segmenty - dla każdego segmentu inny przycisk.

Jak zwykle spróbowałem sam ale mam problem aby samemu wybierac odpowiedni segment który ma wyświetlic kreske. Prosze o pomoc

Oto efekt moich wypocin:

#include <avr\io.h> 
#include <avr\interrupt.h> 
#include <avr\signal.h> 
#include <util\delay.h> 

char znak[4]={0x00,0x01,0x40,0x08}; 

void hw_init(void) 
{ 
SFIOR &= !(1<<PUD); 
DDRA = 0xFF; 
DDRE = 0xFF; 
DDRB = 0x00; 
PORTA = 0x01; 
PORTB = 0xFF; 
} 

void disp(char digit[4]) 
{ 
for(char a=0;a<4;a++) 
{ 
PORTE = (1<<(a+4)); // ustawienie portu E na odpowiedni tabwietlacz (zmienna a okresla numer tabwietlacza) 
PORTA= znak[digit[a]]; // przypisanie odpowiedniego znaku z tablicy znaki (patrz wyzej) na port A 
_delay_ms(15); 
} 
} 


int main(void) { 

char tab[4]={0,0,0,0}; 
char w1=0; 
char w2=0; 
char w3=0; 
char w4=0; 
int licznik=0; 
int licznik2=0; 
int licznik3=0; 
int licznik4=0; 

hw_init(); 

while(1) 
{ 



if(PINB==0x01) 
{ 
licznik++; 

if(licznik>2) 
{licznik=0;} 

if(licznik == 0) 
{ 
tab[0] = 1; 
disp(tab); 
} 


if(licznik == 1) 
{ 
tab[0] = 2; 
disp(tab); 
} 


if(licznik == 2) 
{ 
tab[0] = 3; 
disp(tab); 
} 
} 

if(PINB==0x02) 
{ 
licznik2++; 

if(licznik2>2) 
{licznik2=0;} 

if(licznik2 == 0) 
{ 
tab[1] = 1; 
disp(tab); 
} 


if(licznik2 == 1) 
{ 
tab[1] = 2; 
disp(tab); 
} 


if(licznik2 == 2) 
{ 
tab[1] = 3; 
disp(tab); 
} 
} 


if(PINB==0x04) 
{ 
licznik3++; 

if(licznik3>2) 
{licznik3=0;} 

if(licznik3 == 0) 
{ 
tab[2] = 1; 
disp(tab); 
} 


if(licznik3 == 1) 
{ 
tab[2] = 2; 
disp(tab); 
} 


if(licznik3 == 2) 
{ 
tab[2] = 3; 
disp(tab); 
} 
} 


if(PINB==0x08) 
{ 
licznik4++; 

if(licznik4>2) 
{licznik4=0;} 

if(licznik4 == 0) 
{ 
tab[3] = 1; 
disp(tab); 
} 


if(licznik4 == 1) 
{ 
tab[3] = 2; 
disp(tab); 
} 


if(licznik4 == 2) 
{ 
tab[3] = 3; 
disp(tab); 
} 
} 

if(PINB!=0x01 || PINB!=0x02 || PINB!=0x04 || PINB!=0x08) 
{ 
disp(tab); 
} 




} 
}

__________

Komentarz dodany przez: Sabre

Na przyszłość proszę używać znaczników code.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.