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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.